O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Construyendo APIs Seguras y Escalables

1.818 visualizações

Publicada em

Demostración usando Amazon API Gateway y AWS Lambda
en el 2016 AWS Summit Buenos Aires

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Construyendo APIs Seguras y Escalables

  1. 1. © 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Construyendo APIs Seguras y Escalables Demostración usando Amazon API Gateway y AWS Lambda Mauricio Muñoz Enterprise Solutions Architect, LATAM Abril, 2016
  2. 2. ¿Qué vamos a ver en esta sesión? 1. Nuevo modelo de desarrollo: Completamente gerenciado 2. Declarar APIs con Amazon API Gateway 3. Lógica de la aplicación en AWS Lambda 4. APIs de Login y Registro, utilizando Amazon Cognito 5. Autorización utilizando AWS IAM (STS) 6. Generación de SDK para cliente
  3. 3. Totalmente Gerenciado API: Modelo Totalmente gerenciado InternetMobile apps Funciones AWS Lambda AWS API Gateway cache Endpoints en Amazon EC2 Cualquier otro endpoint público Amazon CloudWatch Amazon CloudFront API Gateway API Gateway Otros Servicios AWS Funciones AWS Lambda
  4. 4. Puntos Principales AWS Lambda + Amazon API Gateway = 0 (cero) infraestructura para administrar Seguridad = Prioridad: Aproveche la integración con AWS Identity and Access Management Swagger + client SDK = Automatización de workflows
  5. 5. Servicios que vamos a utilizar Amazon API Gateway AWS Lambda Amazon Cognito Amazon DynamoDB Publica las APIs y enruta las llamadas Ejecuta: Lógica de autenticación y lógica de la aplicación Gerencia de identidades y entrega credenciales AWS Almacén de datos: Usuarios y Mascotas
  6. 6. Arquitectura de la aplicación: Mascotas
  7. 7. No-Autenticadas Flujo de las llamadas Mobile apps AWS Lambda lambdaHandler Register (/user-POST) Login (/login-POST) API Gateway Autenticadas Mobile apps AWS Lambda lambdaHandler ListPets (/pets – GET) GetPet (/pets/{petId}-GET API Gateway Assume Role CreatePet (/pets – POST) Sigv4 Usando las credenciales AWS Invoca con las credenciales AWS Autorizado por IAM Recibe credenciales AWS APIs: /user /login APIs: /pets /pets/{petId} Table: petstoreapp-users IdentityPool: PetStoreApp Table: petstoreapp-pets
  8. 8. ¿Qué tiene de diferente este modelo? “Serverless” – La aplicación puede usar muchos servidores, pero no necesito administrar ninguno. Autorización: Realizada por AWS, basada en Roles Definición e implementación de APIs usando Swagger
  9. 9. Parte I: APIs – Definición y Publicación
  10. 10. Amazon API Gateway - Conceptos Gerenciamiento de implementaciones – múltiples versiones y ambientes (stages) Definición y Publicación de APIs Usa las credenciales de AWS IAM para el control de acceso a sus recursos (Como si fueran servicios AWS) Aprovecha los mecanismos de Autorización de AWS Gestión de tráfico de red Protección DDoS y “Throttling”
  11. 11. Modelo de API: Recursos, Métodos e Integración rest-api-id resou rce-id ARN
  12. 12. Recursos y Métodos • POST – Recibe usuario y contraseña; registra (crea) el nuevo usuario en DynamoDB /users • POST – Recibe usuario y contraseña; autentica; solicita credenciales AWS a cognito y las retorna a la App /login • POST – Recibe los datos de la mascota;los guarda en DynamoDB • GET – Retorna una lista de mascotas desde DynamoDB /pets • GET – Retorna la información de la mascota, a partir de su petID/pets/{petId} No Autenticado Autenticado
  13. 13. rest-api-id resou rce-id ARN Usando Swagger para automatizar el proceso
  14. 14. Method Response Integration (Req. & Resp) Method Request Method Usando Swagger para automatizar el proceso /users: post: summary: Registers a new user consumes: - application/json produces: - application/json parameters: - name: NewUser in: body schema: $ref: '#/definitions/User’ x-amazon-apigateway-integration: type: aws uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31... credentials: arn:aws:iam::964405213927:role/pet_store_lambda_invoke ... responses: 200: schema: $ref: '#/definitions/RegisterUserResponse'
  15. 15. Usando Swagger para automatizar el proceso Usando AWS CLIaws apigateway import-rest-api --body file://swagger.yaml Usando la Consola
  16. 16. Beneficios de usar Swagger • Las definiciones de las API permanecen en su repositorio, con el resto del código de la aplicación. • Pueden ser usadas en conjunto con otras utilidades de Swagger (por ejemplo, generación de documentación). • Las APIs pueden ser importadas e implementadas en su propio script.
  17. 17. Parte II: Ejecución de la lógica de la aplicación (Back-End)
  18. 18. Escalabilidad y Alto desempeño; Eficiente y Económica No hay infraestructura para administrar Pague solo por lo que use: Lambda adecúa automáticamente la capacidad para responder a los volúmenes de solicitudes. Use su propio código Funciones Lambda : Ejecución de código basada en eventos, Stateless Ejecute su código en una variedad de lenguajes estándar. Use threads, procesos, archivos y shell scripts, de la forma usual. Enfóquese en su lógica de negocio. Cargue su código y AWS Lambda se encarga del resto. AWS Lambda - Conceptos
  19. 19. Lambda handler. lambdaHandler (en el código Java) Acción: Register Acción: Login Acción: Create Pet Acción: Get Pet Gestión de identidades Pet store database Amazon API Gateway Integration request User database
  20. 20. Excepciones mapeadas a HTTP Status. Register action Login action Create Pet action Get Pet action BadRequestException BAD_REQUEST + Stack Trace InternalErrorException INTERNAL_ERROR + Stack Trace lambdaHandler (en el código Java) Amazon API Gateway responses: "default": statusCode: "200" "BAD.*": statusCode: "400" "INT.*": statusCode: "500"
  21. 21. Mapping Template es una herramienta poderosa Encuentre más acerca de nuestros ”mapping templates”: http://amzn.to/1L1hSF5
  22. 22. Parte III: Gerenciando identidades y autorizando accesos
  23. 23. Amazon Cognito - Conceptos Gestión de usuarios autenticados e invitados, entre diferentes proveedores de identidad Gestión de Identidad Sincroniza datos de los usuarios entre dispositivos y plataformas, via nube Sincronización de datos Facilita el acceso seguro a servicios AWS desde plataformas y dispositivos móviles Acceso seguro a recursos AWS
  24. 24. Definición de las APIs (No Autenticadas) • POST • Recibe un usuario y contraseña • Encripta la contraseña (con salt) y registra la cuenta del usuario en DynamoDB • Hace una llamada a Cognito, para registrar el usuario y generar las credenciales • Retorna las informaciones de usuario y credenciales temporales /users • POST • Recibe un usuario y contraseña • Autentica el usuario (contra la información en DynamoDB) • Si la autenticación es exitosa, hace una llamada a Cognito para generar credenciales • Retorna las credenciales temporales /login
  25. 25. Recibiendo las credenciales temporales. Llamada a la API login (sin autenticación) Cliente API Gateway Backend /login Login action BD Usuarios Credenciales OK Solicita OIDC Obtiene el token OpenID Recibe las credenciales AWS para firmar las llamadas API Usando el token OIDC, solicita credenciales AWS Genera las credenciales AWS Access key + secret key + session token /login 1. 2. 3.
  26. 26. Roles (AuthZ) en Cognito
  27. 27. Autorización de las llamadas API
  28. 28. APIs /pets (necesitan AuthN y AuthZ) • POST • Recibe información de la mascota (nombre, tipo) • Graba en DynamoDB • Retorna el petID creado • GET • Retorna la lista de mascotas almacenada en DynamoDB (incluyendo el petID) /pets • GET • Recibe (en el path) el petID • Usando mapping templates, se pasa el parámetro petID a la función Lambda • Busca la información de la mascota en DynamoDB • Retorna la información de la mascota /pets/{petId}
  29. 29. API Gateway protege las llamadas API rest-api-id resou rce-id ARN
  30. 30. API Gateway repasa las autorizaciones credentials: arn:aws:iam::*:user/* En la consola En el archivo Swagger
  31. 31. El Rol IAM define la autorización { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "lambda:InvokeFunction", "execute-api:invoke" ], "Resource": [ "arn:aws:dynamodb:us-east-1:xxxxxx:table/test_pets", "arn:aws:lambda:us-east-1:xxxxx:function:PetStore”, "arn:aws:execute-api:us-east-1:xxxx:API_ID/*/POST/pets" ] } ] } En este ejemplo, el rol permite accesos a: • DynamoDB • API Gateway • Lambda Y permite definir acceso solamente a recursos específicos en esos servicios
  32. 32. Y todavía hay más: Fine-grained access permissions Internet Cliente API Gateway Funciones AWS Lambda Amazon CloudFront DynamoDB CognitoId2 … "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": [”${cognito- identity.amazonaws.com:sub}"], "dynamodb:Attributes": [ "UserId","GameTitle","Wins","Losses", "TopScore","TopScoreDateTime” ] }, "StringEqualsIfExists": { "dynamodb:Select": "SPECIFIC_ATTRIBUTES” } } … Ejecuta con el rol definido UserID Wins Losses cognitoId1 3 2 cognitoId2 5 8 cognitoId3 2 3 Informaciones de contexto (Cognito ID) son repasadas … Con eso, AWS Lambda & DynamoDB seguirán coherentemente la política de acceso
  33. 33. Flujo autenticado completo Mobile apps AWS Lambda lambdaHandler API Gateway Sigv4 Usa los mismos permisos de las credenciales de usuario Llamadas a los servicios son autorizadas usando un rol IAM Documentación acerca de FGAC: http://amzn.to/1YkxcjR DynamoDB
  34. 34. Beneficios de usar AWS IAM (AuthN & AuthZ) • Separación de funciones – la estrategia de autorización se delega a un servicio dedicado • Gestión centralizada de acceso, a través de un conjunto único de políticas • Credenciales y Roles pueden ser modificadas o deshabilitadas con una llamada API
  35. 35. Parte IV: Manejo de credenciales AWS en el cliente
  36. 36. Generación de SDK desde la consola (1-click) rest-api-id
  37. 37. El SDK de cliente declara todos los métodos
  38. 38. AWSCredentialsProvider. Implementación de AWSCredentialsProvider El método refresh() es llamado cuando el cliente necesite nuevas credenciales
  39. 39. Beneficios del SDK generado El SDK de cliente contiene la lógica para: • Firmar las llamadas API usando sigv4 • Manejar respuestas reguladas (throttled) • Marshal/unmarshal solicitudes y respuestas en objetos
  40. 40. AWS Lambda + Amazon API Gateway = 0 (cero) infraestructura para administrar Seguridad = Prioridad: Aproveche la integración con AWS Identity and Access Management Swagger + client SDK = Automatización de workflows ¿Qué vimos hoy? Este ejemplo está disponible en la cuenta GitHub AWSLabs https://github.com/awslabs/api-gateway-secure-pet-store
  41. 41. ¡Gracias ! Este ejemplo está disponible en la cuenta GitHub AWSLabs https://github.com/awslabs/api-gateway-secure-pet-store

×