Roles de IAM - Amazon Cognito

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.

Roles de IAM

Al crear un grupo de identidades, se le solicitará que actualice las IAM funciones que asumen sus usuarios. IAMLos roles funcionan así: cuando un usuario inicia sesión en su aplicación, Amazon Cognito genera AWS credenciales temporales para el usuario. Estas credenciales temporales están asociadas a un IAM rol específico. Con el IAM rol, puede definir un conjunto de permisos para acceder a sus AWS recursos.

Puede especificar los IAM roles predeterminados para los usuarios autenticados y no autenticados. Asimismo, puede definir reglas para elegir el rol de cada usuario en función de las notificaciones contenidas en el token de ID. Para obtener más información, consulte Uso del control de acceso basado en roles.

De forma predeterminada, la consola de Amazon Cognito crea IAM funciones que proporcionan acceso a Amazon Mobile Analytics y a Amazon Cognito Sync. Como alternativa, puede optar por utilizar los roles existentesIAM.

Modifique IAM los roles para permitir o restringir el acceso a otros servicios. Para ello, inicie sesión en la IAM consola. A continuación, seleccione Roles (Roles) y seleccione un rol. Las políticas adjuntas al rol seleccionado se indican en la pestaña Permissions (Permisos). Puede personalizar una política de acceso mediante la selección del enlace Manage Policy (Administrar política) correspondiente. Para obtener más información sobre el uso y la definición de políticas, consulte Descripción general de IAM las políticas.

nota

Como práctica recomendada, defina políticas que sigan el principio de concesión de privilegios mínimos. En otras palabras, las políticas incluyen solo los permisos que los usuarios necesitan para llevar a cabo sus tareas. Para obtener más información, consulte Concesión de privilegios mínimos en la Guía del IAM usuario.

Recuerde que las identidades sin autenticar las asumen los usuarios que no inician sesión en su aplicación. Normalmente, los permisos que asigna para las identidades sin autenticar deben ser más restrictivas que los de las identidades autenticadas.

Configuración de una política de confianza

Amazon Cognito usa IAM roles para generar credenciales temporales para los usuarios de la aplicación. El acceso a los permisos se controla mediante las relaciones de confianza de un rol. Obtener más información sobre Confianza y permisos de rol.

El token que se presenta lo genera un grupo de identidades, que traduce un token de grupo de usuarios, una red social o de un OIDC proveedor, o una SAML afirmación, en su propio token. AWS STS El token del grupo de identidades contiene una reclamación aud que es el ID del grupo de identidades.

El siguiente ejemplo de política de confianza de roles permite al director del servicio federado llamar cognito-identity.amazonaws.com al. AWS STS API AssumeRoleWithWebIdentity La solicitud solo tendrá éxito si el token del grupo de identidades de la API solicitud contiene las siguientes afirmaciones.

  1. Una reclamación aud del ID del grupo de identidades us-west-2:abcdefg-1234-5678-910a-0e8443553f95.

  2. Esta reclamación de amr de authenticated que se agrega cuando el usuario ha iniciado sesión y no es un usuario invitado.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-west-2:abcdefg-1234-5678-910a-0e8443553f95" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

Políticas de confianza para IAM los roles en la autenticación básica (clásica)

Debe aplicar al menos una condición que limite las políticas de confianza para los roles que utilice con los grupos de identidades. Al crear o actualizar políticas de confianza de roles para grupos de identidades, IAM devuelve un error si intenta guardar los cambios sin al menos una clave de condición que limite las identidades de origen. AWS STS no permite AssumeRoleWithWebIdentityrealizar operaciones entre cuentas desde grupos de identidades hasta IAM roles que carezcan de una condición de este tipo.

En este tema se incluyen varias condiciones que limitan las identidades de origen de los grupos de identidades. Para obtener una lista completa, consulte Claves disponibles para la federación de identidades AWS web.

En la autenticación básica o clásica con un grupo de identidades, puede asumir cualquier IAM función AWS STS si cuenta con la política de confianza adecuada. IAMlos roles de los grupos de identidades de Amazon Cognito confían en que el director cognito-identity.amazonaws.com del servicio asuma el rol. Esta configuración no es suficiente para proteger sus IAM funciones contra el acceso no deseado a los recursos. Las funciones de este tipo deben aplicar una condición adicional a la política de confianza de funciones. No puede crear ni modificar roles para grupos de identidades sin al menos una de las siguientes condiciones.

cognito-identity.amazonaws.com:aud

Restringe la función a las operaciones de uno o más grupos de identidades. Amazon Cognito indica el conjunto de identidades de origen en la aud declaración del token del grupo de identidades.

cognito-identity.amazonaws.com:amr

Restringe la función a uno de los usuarios authenticated o a los unauthenticated usuarios (invitados). Amazon Cognito indica el estado de autenticación en la amr declaración del token del grupo de identidades.

cognito-identity.amazonaws.com:sub

Restringe la función a uno o más usuarios mediante. UUID UUIDEs el identificador de identidad del usuario en el grupo de identidades. Este valor no es el sub valor del proveedor de identidad original del usuario. Amazon Cognito lo indica UUID en la sub declaración del token del conjunto de identidades.

La autenticación de flujo mejorado requiere que la IAM función esté en la Cuenta de AWS misma posición que el grupo de identidades, pero este no es el caso de la autenticación básica.

Se aplican consideraciones adicionales a los grupos de identidades de Amazon Cognito que asumen funciones entre IAM cuentas. Las políticas de confianza de esos roles deben aceptar el principio del cognito-identity.amazonaws.com servicio y deben contener la condición específicacognito-identity.amazonaws.com:aud. Para evitar el acceso no deseado a AWS los recursos, la clave de aud condición restringe la función a los usuarios de los grupos de identidades del valor de la condición.

El token que un grupo de identidades emite para una identidad contiene información sobre el origen del grupo Cuenta de AWS de identidades. Cuando presentas un token de grupo de identidades en una AssumeRoleWithWebIdentityAPIsolicitud, AWS STS comprueba si el grupo de identidades de origen es el Cuenta de AWS mismo que el IAM rol. Si AWS STS determina que la solicitud es multicuenta, comprueba si la política de confianza de roles tiene alguna aud condición. La llamada a asumir un rol falla si no se dan tales condiciones en la política de confianza del rol. Si la solicitud no es multicuenta, AWS STS no aplica esta restricción. Como práctica recomendada, aplique siempre una condición de este tipo a las políticas de confianza de las funciones de su grupo de identidades.

Condiciones adicionales de la política de confianza

Reutilización de roles en los grupos de identidades

Para reutilizar un rol en varios grupos de identidades que comparten un conjunto de permisos comunes, puede incluir varios grupos de identidades, como se indica a continuación:

"StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }
Restricción del acceso a identidades concretas

Para crear una política limitada a un conjunto específico de usuarios de la aplicación, compruebe el valor de cognito-identity.amazonaws.com:sub:

"StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] }
Restricción del acceso a proveedores concretos

Para crear una política limitada a los usuarios que han iniciado sesión con un proveedor específico (quizás su propio proveedor de inicios de sesión), compruebe el valor de cognito-identity.amazonaws.com:amr:

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }

Por ejemplo, una aplicación que solo confía en Facebook tendría la siguiente cláusula amr:

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

Políticas de acceso

Los permisos que adjunte a un rol se aplican a todos los usuarios que asuman ese rol. Para particionar el acceso de sus usuarios, utilice condiciones y variables de política. Para obtener más información, consulte los elementos IAM de la política: variables y etiquetas. Puede utilizar la sub condición para restringir las acciones a la identidad de Amazon Cognito IDs en sus políticas de acceso. Utilice esta opción con precaución, sobre todo en el caso de las identidades no autenticadas, que carecen de un ID de usuario coherente. Para obtener más información sobre las variables IAM de política para la federación web con Amazon Cognito, consulte IAMy AWS STS condicione las claves de contexto en la Guía del AWS Identity and Access Management usuario.

Para ofrecer protección de seguridad adicional, Amazon Cognito aplica una política de ámbito reducido a las credenciales que asigna a sus usuarios no autenticados en el flujo mejorado, mediante GetCredentialsForIdentity. La política de alcance reducido añade una Política de sesión en línea y una AWS política de sesiones gestionadas a las IAM políticas que usted aplica a su función no autenticada. Como debe conceder el acceso tanto a las IAM políticas de su rol como a las políticas de sesión, la política de reducción limita el acceso de los usuarios a los servicios distintos de los de la lista siguiente.

nota

En el flujo básico (clásico), usted hace su propia AssumeRoleWithWebIdentityAPIsolicitud y puede aplicar estas restricciones a la solicitud. Como práctica recomendada de seguridad, no asigne ningún permiso por encima de esta política de ámbito reducido a usuarios no autenticados.

Amazon Cognito también impide que los usuarios autenticados y no autenticados realicen solicitudes a los grupos de identidades de API Amazon Cognito y a Amazon Cognito Sync. Otros AWS services podrían imponer restricciones al acceso al servicio desde las identidades web.

Si una solicitud se realiza correctamente con el flujo mejorado, Amazon Cognito realiza una AssumeRoleWithWebIdentity API solicitud en segundo plano. Entre los parámetros de esta solicitud, Amazon Cognito incluye los siguientes.

  1. El ID de identidad de su usuario.

  2. El ARN IAM rol que el usuario quiere asumir.

  3. Un parámetro policy que agrega una política de sesión en línea.

  4. PolicyArns.member.NParámetro cuyo valor es una política AWS gestionada que concede permisos adicionales en Amazon CloudWatch.

Servicios a los que pueden acceder los usuarios no autenticados

Cuando utiliza el flujo mejorado, las políticas de ámbito reducido que Amazon Cognito aplica a la sesión del usuario impiden que utilice otros servicios que no sean los que se muestran en la siguiente tabla. Para un subconjunto de servicios, solo se permiten acciones específicas.

Categoría Servicio

Análisis

Amazon Data Firehose

Amazon Managed Service para Apache Flink

Integración de aplicaciones

Amazon Simple Queue Service

Realidad aumentada y realidad virtual

Amazon Sumerian¹

Aplicaciones empresariales

Amazon Mobile Analytics

Amazon Simple Email Service

Cálculo

AWS Lambda

Criptografía y PKI

AWS Key Management Service¹

Base de datos

Amazon DynamoDB

Amazon SimpleDB

Web y móvil front-end

AWS AppSync

Amazon Location Service

Amazon Simple Notification Service

Amazon Pinpoint

Desarrollo de juegos

Amazon GameLift

Internet de las cosas (IoT)

AWS IoT

Machine Learning

Amazon CodeWhisperer

Amazon Comprehend

Amazon Lex

Amazon Machine Learning

Amazon Personalize

Amazon Polly

Amazon Rekognition

Amazon SageMaker ¹

Amazon Textract¹

Amazon Transcribe

Amazon Translate

Administración y gobernanza

Amazon CloudWatch

Amazon CloudWatch Logs

Redes y entrega de contenido

Amazon API Gateway

Seguridad, identidad y conformidad

Grupos de usuarios de Amazon Cognito

Almacenamiento

Amazon Simple Storage Service

¹ AWS services En el caso de la siguiente tabla, la política en línea concede un subconjunto de acciones. En la tabla se muestran las acciones disponibles en cada uno.

AWS service Permisos máximos para usuarios de flujo mejorado no autenticados
AWS Key Management Service

Encrypt

Decrypt

ReEncrypt

GenerateDataKey

Amazon SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText

AnalyzeDocument

Amazon Sumerian

View*

Para conceder acceso AWS services más allá de esta lista, active el flujo de autenticación básico (clásico) en su grupo de identidades. Si sus usuarios ven NotAuthorizedException errores permitidos por las políticas asignadas a la IAM función para los usuarios no autenticados, evalúe si puede eliminar ese servicio de su caso de uso. AWS services Si no puede, cambie al flujo básico.

La política de sesión en línea

La política de sesión integrada impide que los permisos efectivos de tu usuario incluyan el acceso a otros permisos AWS services ajenos a los de la siguiente lista. También debe concederles permisos AWS services en las políticas que aplique a la función del IAM usuario. Los permisos efectivos de un usuario para una sesión de rol asumido son la intersección de las políticas asignadas a su rol y su política de sesión. Para obtener más información, consulte Políticas de sesión en la Guía del usuario de AWS Identity and Access Management .

Amazon Cognito agrega la siguiente política insertada en las sesiones de los usuarios en  Regiones de AWS que están habilitadas de forma predeterminada.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:*", "logs:*", "dynamodb:*", "kinesis:*", "mobileanalytics:*", "s3:*", "ses:*", "sns:*", "sqs:*", "lambda:*", "machinelearning:*", "execute-api:*", "iot:*", "gamelift:*", "scs:*", "cognito-identity:*", "cognito-idp:*", "lex:*", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "appsync:*", "personalize:*", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "sagemaker:InvokeEndpoint", "cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*" ], "Resource": [ "*" ] } ] }

Para todas las demás regiones, la política de ámbito reducido insertada  incluye todo lo que se muestra en las regiones predeterminadas, excepto las siguientes instrucciones Action.

"cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*"

La política de sesiones AWS administradas

Amazon Cognito también limita el alcance de los permisos de los usuarios no autenticados con la política administrada de  AWS  AmazonCognitoUnAuthedIdentitiesSessionPolicy a los usuarios no autenticados en el flujo mejorado. También debe conceder este permiso en las políticas que asocie a su función no autenticada. IAM

La política administrada por AmazonCognitoUnAuthedIdentitiesSessionPolicy contiene los permisos siguientes.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint" ], "Resource": "*" }] }

Ejemplos de políticas de acceso

En esta sección, puede encontrar políticas de acceso de Amazon Cognito de ejemplo que conceden a los usuarios los permisos mínimos necesarios para realizar operaciones específicas. Puede limitar aún más los permisos de un determinado ID de identidad utilizando variables de política siempre que sea posible. Por ejemplo, utilizando ${cognito-identity.amazonaws.com:sub}. Para obtener más información, consulte Información sobre la parte 3 de la autenticación de Amazon Cognito: roles y políticas en el blog de AWS Mobile.

nota

Como práctica recomendada de seguridad, las políticas deben incluir únicamente los permisos que los usuarios necesitan para realizar sus tareas. Esto significa que debe intentar siempre el acceso a una identidad individual para objetos cuando sea posible.

Otorgar a una identidad acceso de lectura a un único objeto en Amazon S3

La siguiente política de acceso concede permisos de lectura a una identidad para recuperar un único objeto de un determinado bucket de S3.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"] } ] }

Otorgar a una identidad acceso de lectura y escritura a rutas específicas de identidad en Amazon S3

La siguiente política de acceso concede permisos de lectura y escritura para obtener acceso a una "carpeta" de prefijo específico en un bucket de S3 mapeando el prefijo a la variable ${cognito-identity.amazonaws.com:sub}.

Con esta política, una identidad como us-east-1:12345678-1234-1234-1234-123456790ab insertada a través de ${cognito-identity.amazonaws.com:sub} puede obtener, colocar y enumerar objetos en arn:aws:s3:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab. Sin embargo, la identidad no concedería acceso a otros objetos en arn:aws:s3:::mybucket.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"] } ] }

Asignar a identidades acceso detallado a Amazon DynamoDB

La siguiente política de acceso proporciona un control de acceso minucioso a los recursos de DynamoDB mediante variables de entorno de Amazon Cognito. Estas variables otorgan acceso a los elementos de DynamoDB por ID de identidad: Para obtener más información, consulte Uso de condiciones IAM de política para un control de acceso detallado en la Guía para desarrolladores de Amazon DynamoDB.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ] }

Otorgar a una identidad permiso para llamar a una función de Lambda

La siguiente política de acceso concede un permiso de identidad para invocar una función de Lambda.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" ] } ] }

Otorgar a una identidad permiso para publicar registros en Kinesis Data Streams

La siguiente política de acceso permite a una identidad utilizar la operación PutRecord con cualquiera de los Kinesis Data Streams. Se puede aplicar a los usuarios que necesitan añadir registros de datos a todos los flujos de una cuenta. Para obtener más información, consulte Control del acceso a los recursos de Amazon Kinesis Data Streams IAM mediante la Guía para desarrolladores de Amazon Kinesis Data Streams.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }

Otorgar a una identidad acceso a sus datos en el almacén de Amazon Cognito Sync

La siguiente política de acceso solo concede permisos de identidad para acceder a sus propios datos en el almacén de Amazon Cognito Sync.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }] }