Construyendo APIs Seguras y Escalables
-
Upload
amazon-web-services-latam -
Category
Technology
-
view
683 -
download
0
Transcript of Construyendo APIs Seguras y Escalables
![Page 1: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/1.jpg)
© 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ñozEnterprise Solutions Architect, LATAM
Abril, 2016
![Page 2: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/2.jpg)
¿Qué vamos a ver en esta sesión?
1. Nuevo modelo de desarrollo: Completamente gerenciado
2. Declarar APIs con Amazon API Gateway3. Lógica de la aplicación en AWS Lambda4. APIs de Login y Registro, utilizando Amazon Cognito5. Autorización utilizando AWS IAM (STS)6. Generación de SDK para cliente
![Page 3: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/3.jpg)
Totalmente Gerenciado
API: Modelo Totalmente gerenciado
InternetMobile appsFunciones
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
FuncionesAWS Lambda
![Page 4: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/4.jpg)
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
![Page 5: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/5.jpg)
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
![Page 6: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/6.jpg)
Arquitectura de la aplicación:Mascotas
![Page 7: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/7.jpg)
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)
Sigv4Usando las
credenciales AWSInvoca 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
![Page 8: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/8.jpg)
¿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
![Page 9: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/9.jpg)
Parte I: APIs – Definición y Publicación
![Page 10: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/10.jpg)
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”
![Page 11: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/11.jpg)
Modelo de API: Recursos, Métodos e Integraciónrest-api-id
resource-id
ARN
![Page 12: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/12.jpg)
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
![Page 13: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/13.jpg)
rest-api-idresource-id
ARN
Usando Swagger para automatizar el proceso
![Page 14: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/14.jpg)
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'
![Page 15: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/15.jpg)
Usando Swagger para automatizar el proceso
Usando AWS CLIaws apigateway import-rest-api --body file://swagger.yaml
Usando la Consola
![Page 16: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/16.jpg)
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.
![Page 17: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/17.jpg)
Parte II: Ejecución de la lógica de la aplicación (Back-End)
![Page 18: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/18.jpg)
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
![Page 19: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/19.jpg)
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
Userdatabase
![Page 20: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/20.jpg)
Excepciones mapeadas a HTTP Status.Register action
Login action
Create Pet action
Get Pet action
BadRequestExceptionBAD_REQUEST +
Stack Trace
InternalErrorExceptionINTERNAL_ERROR +
Stack TracelambdaHandler (en el código
Java)
Amazon API Gateway
responses: "default": statusCode: "200" "BAD.*": statusCode: "400" "INT.*": statusCode: "500"
![Page 21: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/21.jpg)
Mapping Template es una herramienta poderosa
Encuentre más acerca de nuestros ”mapping templates”:
http://amzn.to/1L1hSF5
![Page 22: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/22.jpg)
Parte III: Gerenciando identidades y autorizando accesos
![Page 23: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/23.jpg)
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
![Page 24: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/24.jpg)
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
![Page 25: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/25.jpg)
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 AWSGenera las
credenciales AWS
Access key + secret key +
session token
/login
1.
2.
3.
![Page 26: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/26.jpg)
Roles (AuthZ) en Cognito
![Page 27: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/27.jpg)
Autorización de las llamadas API
![Page 28: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/28.jpg)
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}
![Page 29: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/29.jpg)
API Gateway protege las llamadas APIrest-api-id
resource-id
ARN
![Page 30: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/30.jpg)
API Gateway repasa las autorizaciones
credentials:
arn:aws:iam::*:user/*
En la consola En el archivo Swagger
![Page 31: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/31.jpg)
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
![Page 32: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/32.jpg)
Y todavía hay más: Fine-grained access permissions
InternetCliente
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
![Page 33: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/33.jpg)
Flujo autenticado completo
Mobile apps AWS Lambda lambdaHandlerAPI 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
![Page 34: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/34.jpg)
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
![Page 35: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/35.jpg)
Parte IV: Manejo de credenciales AWS en el cliente
![Page 36: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/36.jpg)
Generación de SDK desde la consola (1-click)
rest-api-id
![Page 37: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/37.jpg)
El SDK de cliente declara todos los métodos
![Page 38: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/38.jpg)
AWSCredentialsProvider.Implementación de AWSCredentialsProvider
El método refresh() es llamado cuando el cliente necesite nuevas credenciales
![Page 39: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/39.jpg)
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
![Page 40: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/40.jpg)
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 AWSLabshttps://github.com/awslabs/api-gateway-secure-pet-store
![Page 41: Construyendo APIs Seguras y Escalables](https://reader035.fdocument.pub/reader035/viewer/2022062223/58f2c75b1a28ab447f8b4595/html5/thumbnails/41.jpg)
¡Gracias !Este ejemplo está disponible en la cuenta GitHub AWSLabs
https://github.com/awslabs/api-gateway-secure-pet-store