Almacenes de políticas vinculados a API - Amazon Verified Permissions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Almacenes de políticas vinculados a API

Al crear un nuevo almacén de políticas en la consola de permisos verificados de Amazon, puede elegir la opción Configurar con API Gateway y una fuente de identidad. Con esta opción, puede crear un almacén de políticas vinculado a API, un modelo de autorización para aplicaciones que se autentican con grupos de usuarios de Amazon Cognito o con un proveedor de identidad (IdP) de OIDC y obtiene datos de las API de Amazon API Gateway. Para empezar, consulte Cree un almacén de políticas con una API y un proveedor de identidades conectados.

importante

Los almacenes de políticas que se crean con la opción Configurar con API Gateway y una fuente de identidad en la consola de permisos verificados no están pensados para su implementación inmediata en producción. Con el almacén de políticas inicial, finalice el modelo de autorización y exporte los recursos del almacén de políticas al que CloudFormation. Implemente permisos verificados en producción mediante programación con el AWS Cloud Development Kit (CDK). Para obtener más información, consulte Pasar a la producción con AWS CloudFormation.

En un almacén de políticas que está vinculado a una API y a una fuente de identidad, su aplicación presenta un token de grupo de usuarios en un encabezado de autorización cuando realiza una solicitud a la API. La fuente de identidad de tu almacén de políticas proporciona la validación de los tokens para los permisos verificados. El token forma las solicitudes principal de autorización de entrada con la IsAuthorizedWithTokenAPI. Los permisos verificados crean políticas en torno a la pertenencia a grupos de sus usuarios, tal como se presenta en la declaración de un grupo en términos de identidad (ID) y de acceso, por cognito:groups ejemplo, en el caso de los grupos de usuarios. Su API procesa el token de su aplicación en un autorizador Lambda y lo envía a Verified Permissions para que tome una decisión de autorización. Cuando su API recibe la decisión de autorización del autorizador de Lambda, transfiere la solicitud a su fuente de datos o la deniega.

Componentes de la fuente de identidad y la autorización de API Gateway con permisos verificados
  • Un grupo de usuarios de Amazon Cognito o un IdP de OIDC que autentica y agrupa a los usuarios. Los tokens de los usuarios completan la membresía del grupo y el principal o el contexto que Verified Permissions evalúa en su almacén de políticas.

  • Una API REST de API Gateway. Los permisos verificados definen las acciones a partir de las rutas y los métodos de la API, por ejemploMyAPI::Action::get /photo.

  • Una función de Lambda y un autorizador de Lambda para su API. La función Lambda toma los tokens de soporte del grupo de usuarios, solicita la autorización de Verified Permissions y devuelve una decisión a API Gateway. El flujo de trabajo Configurar con Cognito y API Gateway crea automáticamente este autorizador Lambda automáticamente.

  • Un almacén de políticas de permisos verificados. La fuente de identidad del almacén de políticas es su grupo de usuarios. El esquema del almacén de políticas refleja la configuración de la API y las políticas vinculan a los grupos de usuarios con las acciones de la API permitidas.

  • Una aplicación que autentica a los usuarios con tu IDP y añade tokens a las solicitudes de la API.

Cómo autoriza Verified Permissions las solicitudes de API

Al crear un nuevo almacén de políticas y seleccionar la opción Configurar con Cognito y API Gateway, Verified Permissions crea el esquema y las políticas del almacén de políticas. El esquema y las políticas reflejan las acciones de la API y los grupos de grupos de usuarios que desea autorizar para que las realicen. Verified Permissions también crea la función Lambda y el autorizador. Debes configurar el nuevo autorizador en un método de tu API.

Diagrama que muestra el flujo de una solicitud de autorización con Amazon API Gateway, Amazon Cognito y Amazon Verified Permissions.
  1. El usuario inicia sesión con la aplicación a través de Amazon Cognito u otro IdP de OIDC. El IdP emite identificadores de acceso y de identificación con la información del usuario.

  2. Su aplicación almacena los JWT. Para obtener más información, consulte Uso de tokens con grupos de usuarios en la Guía para desarrolladores de Amazon Cognito.

  3. El usuario solicita datos que la aplicación debe recuperar de una API externa.

  4. La aplicación solicita datos de una API REST en API Gateway. Añade un ID o un token de acceso como encabezado de solicitud.

  5. Si tu API tiene una memoria caché para la decisión de autorización, devuelve la respuesta anterior. Si el almacenamiento en caché está deshabilitado o la API no tiene memoria caché actual, API Gateway pasa los parámetros de la solicitud a un autorizador Lambda basado en tokens.

  6. La función Lambda envía una solicitud de autorización a un almacén de políticas de permisos verificados con la IsAuthorizedWithTokenAPI. La función Lambda transmite los elementos de una decisión de autorización:

    1. El token del usuario como principal.

    2. El método de la API combinado con la ruta de la APIGetPhoto, por ejemplo, como acción.

    3. El término Application como recurso.

  7. Los permisos verificados validan el token. Para obtener más información sobre cómo se validan los tokens de Amazon Cognito, consulte Autorización con permisos verificados de Amazon en la Guía para desarrolladores de Amazon Cognito.

  8. Verified Permissions evalúa la solicitud de autorización comparándola con las políticas de su almacén de políticas y devuelve una decisión de autorización.

  9. El autorizador de Lambda devuelve una Deny respuesta Allow or a API Gateway.

  10. La API devuelve datos o una ACCESS_DENIED respuesta a su aplicación. La aplicación procesa y muestra los resultados de la solicitud de API.

Añadir un control de acceso basado en atributos (ABAC)

Una sesión de autenticación típica con un IdP devuelve los identificadores de identificación y acceso. Puedes pasar cualquiera de estos tipos de token como token portador en las solicitudes de aplicación a tu API. En función de lo que elijas al crear tu almacén de políticas, Verified Permissions espera uno de los dos tipos de token. Ambos tipos contienen información sobre la pertenencia al grupo del usuario. Para obtener más información sobre los tipos de token en Amazon Cognito, consulte Uso de tokens con grupos de usuarios en la Guía para desarrolladores de Amazon Cognito.

Tras crear un almacén de políticas, puede añadir y ampliar políticas. Por ejemplo, puede agregar nuevos grupos a sus políticas a medida que los agrega a su grupo de usuarios. Como su almacén de políticas ya conoce la forma en que su grupo de usuarios presenta los grupos en forma de tokens, puede permitir un conjunto de acciones para cualquier grupo nuevo con una política nueva.

Es posible que también desee ampliar el modelo de evaluación de políticas basado en grupos para convertirlo en un modelo más preciso basado en las propiedades de los usuarios. Los tokens del grupo de usuarios contienen información de usuario adicional que puede contribuir a las decisiones de autorización.

Tokens de identificación

Los identificadores representan los atributos de un usuario y tienen el nivel más alto de control de acceso detallado. Para evaluar las direcciones de correo electrónico, los números de teléfono o los atributos personalizados, como el departamento y el gerente, evalúa el token de identificación.

Tokens de acceso

Los tokens de acceso representan los permisos de un usuario con el ámbito de OAuth 2.0. Para añadir una capa de autorización o configurar solicitudes de recursos adicionales, evalúa el token de acceso. Por ejemplo, puedes validar que un usuario esté en los grupos adecuados y tenga un ámbito como el PetStore.read que generalmente autoriza el acceso a la API. Los grupos de usuarios pueden añadir ámbitos personalizados a los tokens con servidores de recursos y con la personalización de los mismos durante el tiempo de ejecución.

Consulte, Trabajar con fuentes de identidad en esquemas y políticas por ejemplo, las políticas que procesan las reclamaciones en los tokens de identificación y acceso.

Consideraciones para los almacenes de pólizas vinculados a las API

Al crear un almacén de políticas vinculado a una API en la consola de permisos verificados, se crea una prueba para una posible implementación en producción. Antes de pasar a la fase de producción, establece una configuración fija para la API y el grupo de usuarios. Tenga en cuenta los siguientes factores:

API Gateway almacena en caché las respuestas

En los almacenes de políticas vinculados a API, Verified Permissions crea un autorizador Lambda con un TTL de almacenamiento en caché de autorización de 120 segundos. Puede ajustar este valor o desactivar el almacenamiento en caché en su autorizador. En un autorizador con el almacenamiento en caché activado, el autorizador devuelve la misma respuesta cada vez hasta que caduque el TTL. Esto puede prolongar la vida útil efectiva de los tokens del grupo de usuarios hasta un tiempo igual al TTL de almacenamiento en caché de la etapa solicitada.

Los grupos de Amazon Cognito se pueden reutilizar

Amazon Verified Permissions determina la pertenencia a un grupo para los usuarios del grupo de usuarios a partir de la cognito:groups declaración que figura en el identificador de usuario o en el token de acceso. El valor de esta afirmación es un conjunto de nombres descriptivos de los grupos de usuarios a los que pertenece el usuario. No puede asociar grupos de grupos de usuarios con un identificador único.

Los grupos de usuarios que se eliminan y se vuelven a crear con el mismo nombre se presentan en el almacén de políticas como el mismo grupo. Al eliminar un grupo de un grupo de usuarios, elimine todas las referencias al grupo del almacén de políticas.

El espacio de nombres y el esquema derivados de la API son point-in-time

Verified Permissions captura tu API en un momento dado: solo consulta tu API cuando creas tu almacén de políticas. Cuando el esquema o el nombre de la API cambien, debe actualizar el almacén de políticas y el autorizador de Lambda, o bien crear un nuevo almacén de políticas vinculado a la API. Verified Permissions deriva el espacio de nombres del almacén de políticas del nombre de tu API.

La función Lambda no tiene configuración de VPC

La función Lambda que Verified Permissions crea para tu autorizador de API no está conectada a una VPC. De forma predeterminada. Las API cuyo acceso a la red está restringido a las VPC privadas no pueden comunicarse con la función Lambda que autoriza las solicitudes de acceso con permisos verificados.

Verified Permissions implementa los recursos del autorizador en CloudFormation

Para crear un almacén de políticas vinculado a una API, debe iniciar sesión con un AWS director con muchos privilegios en la consola de permisos verificados. Este usuario despliega una AWS CloudFormation pila que crea recursos en varios. Servicios de AWS Este director debe tener permiso para añadir y modificar recursos en Verified Permissions IAM, Lambda y API Gateway. Como práctica recomendada, no comparta estas credenciales con otros administradores de su organización.

Consulte Pasar a la producción con AWS CloudFormation para obtener una descripción general de los recursos que crea Verified Permissions.

Pasar a la producción con AWS CloudFormation

Los almacenes de políticas vinculados a API son una forma de crear rápidamente un modelo de autorización para una API API Gateway. Están diseñados para servir como entorno de pruebas para el componente de autorización de la aplicación. Después de crear su almacén de políticas de prueba, dedique tiempo a refinar las políticas, el esquema y el autorizador Lambda.

Puede ajustar la arquitectura de la API y requerir ajustes equivalentes en el esquema y las políticas del almacén de políticas. Los almacenes de políticas vinculados a las API no actualizan automáticamente su esquema desde la arquitectura de la API: Verified Permissions solo consulta la API en el momento de crear un almacén de políticas. Si tu API cambia lo suficiente, es posible que tengas que repetir el proceso con un nuevo almacén de políticas.

Cuando su modelo de aplicación y autorización estén listos para su implementación en producción, integre el almacén de políticas vinculado a la API que desarrolló con sus procesos de automatización. Como práctica recomendada, le recomendamos que exporte el esquema y las políticas del almacén de políticas a una AWS CloudFormation plantilla que pueda implementar en otras Cuentas de AWS . Regiones de AWS

Los resultados del proceso del almacén de políticas vinculado a la API son un almacén de políticas inicial y un autorizador Lambda. El autorizador Lambda tiene varios recursos dependientes. Verified Permissions implementa estos recursos en una pila generada automáticamente. CloudFormation Para implementarlo en producción, debe recopilar el almacén de políticas y los recursos del autorizador Lambda en una plantilla. Un almacén de políticas vinculado a una API se compone de los siguientes recursos:

  1. AWS::VerifiedPermissions::PolicyStore: Copie el esquema en el SchemaDefinition objeto. Escapa de " los personajes como\".

  2. AWS::VerifiedPermissions::IdentitySource: Copie los valores de la salida de su almacén GetIdentitySource de políticas de prueba y modifíquelos según sea necesario.

  3. Una o más de las AWS::VerifiedPermissions::Policysiguientes opciones: Copie la declaración de política en el Definition objeto. Escapa de " los personajes como\".

  4. AWS: :Lambda: :Function, AWS::: :Role,IAM::AWS: :Policy,IAM::: :Authorizer,AWS ApiGateway AWS::Lambda::Permission: Copia la plantilla de la pestaña Plantilla de la pila que Verified Permissions implementó cuando creaste tu almacén de políticas.

La siguiente plantilla es un ejemplo de almacén de políticas. Puede añadir los recursos del autorizador Lambda de su pila existente a esta plantilla.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyExamplePolicyStore": { "Type": "AWS::VerifiedPermissions::PolicyStore", "Properties": { "ValidationSettings": { "Mode": "STRICT" }, "Description": "ApiGateway: PetStore/test", "Schema": { "CedarJson": "{\"PetStore\":{\"actions\":{\"get /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /pets/{petId}\":{\"appliesTo\":{\"context\":{\"type\":\"Record\",\"attributes\":{}},\"resourceTypes\":[\"Application\"],\"principalTypes\":[\"User\"]}},\"post /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}}},\"entityTypes\":{\"Application\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}},\"User\":{\"memberOfTypes\":[\"UserGroup\"],\"shape\":{\"attributes\":{},\"type\":\"Record\"}},\"UserGroup\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}}}}}" } } }, "MyExamplePolicy": { "Type": "AWS::VerifiedPermissions::Policy", "Properties": { "Definition": { "Static": { "Description": "Policy defining permissions for testgroup cognito group", "Statement": "permit(\nprincipal in PetStore::UserGroup::\"us-east-1_EXAMPLE|testgroup\",\naction in [\n PetStore::Action::\"get /\",\n PetStore::Action::\"post /pets\",\n PetStore::Action::\"get /pets\",\n PetStore::Action::\"get /pets/{petId}\"\n],\nresource);" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" } }, "DependsOn": [ "MyExamplePolicyStore" ] }, "MyExampleIdentitySource": { "Type": "AWS::VerifiedPermissions::IdentitySource", "Properties": { "Configuration": { "CognitoUserPoolConfiguration": { "ClientIds": [ "1example23456789" ], "GroupConfiguration": { "GroupEntityType": "PetStore::UserGroup" }, "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" }, "PrincipalEntityType": "PetStore::User" }, "DependsOn": [ "MyExamplePolicyStore" ] } } }