S3 Access Grants e identidades de directorios corporativos - Amazon Simple Storage Service

S3 Access Grants e identidades de directorios corporativos

Puede usar Amazon S3 Access Grants para otorgar acceso a las entidades principales de AWS Identity and Access Management (IAM) (usuarios o roles), tanto en la misma Cuenta de AWS como en otras. Sin embargo, en muchos casos, la entidad que accede a los datos es un usuario final de su directorio corporativo. En lugar de otorgar acceso a las entidades principales de IAM, puede utilizar Amazon S3 Access Grants para otorgar acceso directamente a los usuarios y grupos corporativos. Con Amazon S3 Access Grants, ya no es necesario asignar las identidades corporativas a las entidades principales de IAM intermedias para poder acceder a los datos de S3 mediante sus aplicaciones corporativas.

Esta nueva funcionalidad, que permite utilizar las identidades de los usuarios finales para acceder a los datos, se proporciona al asociar su instancia de S3 Access Grants a una instancia. del AWS IAM Identity Center. El Centro de identidades de IAM es compatible con proveedores de identidades basados en estándares y es el centro de AWS para todos los servicios o características, incluido S3 Access Grants, que admiten identidades de usuarios finales. El Centro de identidades de IAM proporciona soporte de autenticación para identidades corporativas mediante su característica de propagación de identidades de confianza. Para obtener más información, consulte Propagación de identidades de confianza en aplicaciones.

Para empezar a utilizar el soporte de identidades de personal en S3 Access Grants, como requisito previo, comience en el Centro de identidades de IAM configurando el aprovisionamiento de identidades entre su proveedor de identidad corporativa y el Centro de identidades de IAM. El Centro de identidades de IAM es compatible con proveedores de identidad corporativa como Okta, Microsoft Entra ID (anteriormente Azure Active Directory) o cualquier otro proveedor de identidades (IdP) externo que admita el protocolo System for Cross-Domain Identity Management (SCIM). Cuando conecta el Centro de identidades de IAM a su IdP y habilita el aprovisionamiento automático, los usuarios y grupos de su IdP se sincronizan en el almacén de identidades del Centro de identidades de IAM. Tras este paso, el Centro de identidades de IAM tiene su propia vista de sus usuarios y grupos, de modo que puede hacer referencia a ellos mediante otros Servicios de AWS y características, como S3 Access Grants. Para obtener más información sobre la configuración del aprovisionamiento automático de Centro de identidades de IAM, consulte Aprovisionamiento automático en la Guía del usuario de AWS IAM Identity Center.

El Centro de identidades de IAM está integrado con AWS Organizations, para que pueda administrar de forma centralizada los permisos de varias Cuentas de AWS sin tener que configurar cada una de ellas manualmente. En una organización típica, el administrador de identidades configura una instancia del Centro de identidades de IAM para toda la organización, como un único punto de sincronización de identidades. Esta instancia del Centro de identidades de IAM suele ejecutarse en una Cuenta de AWS dedicada de su organización. En esta configuración común, puede hacer referencia a las identidades de usuarios y grupos en S3 Access Grants desde cualquier Cuenta de AWS de la organización.

Sin embargo, si su administrador de AWS Organizations aún no ha configurado una instancia central del Centro de identidades de IAM, puede crear una local en la misma cuenta que su instancia de S3 Access Grants. Esta configuración es más común para los casos de uso de prueba de concepto o de desarrollo local. En todos los casos, la instancia del Centro de identidades de IAM debe estar en la misma Región de AWS que la instancia de S3 Access Grants a la que se asociará.

En el siguiente diagrama de una configuración del Centro de identidades de IAM con un IdP externo, el IdP se configura con SCIM para sincronizar el almacén de identidades del IdP al almacén de identidades del Centro de identidades de IAM.

Integración del Centro de identidades de IAM con un almacén de identidades externo mediante el aprovisionamiento automático.

Para usar las identidades de su directorio corporativo con S3 Access Grants, haga lo siguiente:

Cómo pueden acceder las identidades de directorio a los datos de S3

Suponga que tiene usuarios del directorio corporativo que necesitan acceder a sus datos de S3 a través de una aplicación corporativa, por ejemplo, una aplicación de visualización de documentos, que está integrada con su IdP externo (por ejemplo, Okta) para autenticar a los usuarios. La autenticación del usuario en estas aplicaciones se suele realizar mediante redireccionamientos en el navegador web del usuario. Puesto que los usuarios del directorio no son las entidades principales de IAM, su aplicación necesita credenciales de IAM con las que pueda llamar a la operación de la API GetDataAccess de S3 Access Grants para obtener credenciales de acceso a los datos de S3 en nombre de los usuarios. A diferencia de los usuarios y roles de IAM, que obtienen las credenciales ellos mismos, su aplicación necesita una forma de representar a un usuario del directorio, que no esté asignado a un rol de IAM, para que el usuario pueda acceder a los datos a través de S3 Access Grants.

Esta transición, de un usuario de directorio autenticado a un intermediario de IAM que puede realizar solicitudes a S3 Access Grants en nombre del usuario del directorio, la realiza la aplicación a través de la característica del emisor de tokens de confianza del Centro de identidades de IAM. La aplicación, después de autenticar al usuario del directorio, tiene un token de identidad del IdP (por ejemplo, Okta) que representa al usuario del directorio según Okta. La configuración del emisor de tokens de confianza del Centro de identidades de IAM permite a la aplicación intercambiar este token de Okta (el inquilino de Okta está configurado como el "emisor de confianza") por un token de identidad diferente del Centro de identidades de IAM que representará de forma segura al usuario del directorio dentro de Servicios de AWS. La aplicación de datos asumirá entonces un rol de IAM y proporcionará el token del usuario del directorio del Centro de identidades de IAM como contexto adicional. La aplicación puede usar la sesión de IAM resultante para llamar a S3 Access Grants. El token representa tanto la identidad de la aplicación (la propia entidad principal de IAM) como la identidad del usuario del directorio.

El paso principal de esta transición es el intercambio de token. La aplicación realiza este intercambio de token mediante una llamada a la operación de la API CreateTokenWithIAM en el Centro de identidades de IAM. Por supuesto, también se trata de una llamada a la API AWS y requiere que una entidad principal de IAM la firme. La entidad principal de IAM que realiza esta solicitud suele ser un rol de IAM asociado a la aplicación. Por ejemplo, si la aplicación se ejecuta en Amazon EC2, la solicitud CreateTokenWithIAM normalmente la realiza el rol de IAM asociado a la instancia EC2 en la que se ejecuta la aplicación. El resultado de una llamada CreateTokenWithIAM correcta es un nuevo token de identidad, que se reconocerá en Servicios de AWS.

El siguiente paso, antes de que la aplicación pueda llamar GetDataAccess en nombre del usuario del directorio, consiste en obtener una sesión de IAM que incluya la identidad del usuario del directorio. La aplicación lo hace con una solicitud AssumeRole de AWS Security Token Service (AWS STS) que también incluye el token del Centro de identidades de IAM para el usuario del directorio como contexto de identidad adicional. Este contexto adicional es lo que permite al Centro de identidades de IAM propagar la identidad del usuario del directorio para pasar al siguiente paso. El rol de IAM que asume la aplicación es el que necesitará los permisos de IAM para llamar a la operación GetDataAccess.

Tras haber asumido el rol de IAM portador de la identidad con el token del Centro de identidades de IAM para el usuario del directorio como contexto adicional, la aplicación ahora tiene todo lo necesario para realizar una solicitud firmada a GetDataAccess en nombre del usuario del directorio autenticado.

La propagación del token se basa en los siguientes pasos:

Crear una aplicación del Centro de identidades de IAM

En primer lugar, cree una nueva aplicación en el Centro de identidad de IAM. Esta aplicación utilizará una plantilla que permite al Centro de identidades de IAM identificar el tipo de configuración de la aplicación que puede utilizar. El comando para crear la aplicación requiere que proporciones la instancia del Centro de identidades de IAM, el nombre de recurso de Amazon (ARN), un nombre de aplicación y el ARN del proveedor de la aplicación. El proveedor de la aplicación es el proveedor de aplicaciones SAML u OAuth que la aplicación utilizará para realizar llamadas al Centro de identidades de IAM.

Para utilizar el comando de ejemplo siguiente, sustituya user input placeholders con su información.

aws sso-admin create-application \ --instance-arn "arn:aws:sso:::instance/ssoins-ssoins-1234567890abcdef" \ --application-provider-arn "arn:aws:sso::aws:applicationProvider/custom" \ --name MyDataApplication

Respuesta:

{ "ApplicationArn": "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" }

Crear un emisor de tokens de confianza

Ahora que dispone de la aplicación del Centro de identidades de IAM, el siguiente paso es configurar un emisor de tokens de confianza que se utilizará para intercambiar sus valores IdToken de su IdP por los tokens del Centro de identidades de IAM. En este paso debe proporcionar los siguientes elementos:

  • La URL del emisor del proveedor de identidad

  • El nombre del emisor de tokens de confianza

  • La ruta del atributo de la notificación

  • La ruta de los atributos del almacén de identidades

  • La opción de recuperación de JSON Web Key Set (JWKS)

La ruta del atributo de la notificación es el atributo del proveedor de identidad que se utilizará para asignarse al atributo del almacén de identidades. Normalmente, la ruta del atributo de la notificación es la dirección de correo electrónico del usuario, pero puede utilizar otros atributos para realizar la asignación.

Cree un archivo de especificaciones denominado oidc-configuration.json con la siguiente información: Para utilizar este archivo, sustituya user input placeholders por su información.

{ "OidcJwtConfiguration": { "IssuerUrl": "https://login.microsoftonline.com/a1b2c3d4-abcd-1234-b7d5-b154440ac123/v2.0", "ClaimAttributePath": "preferred_username", "IdentityStoreAttributePath": "userName", "JwksRetrievalOption": "OPEN_ID_DISCOVERY" } }

Para crear el emisor de tokens de confianza, ejecute el siguiente comando. Para utilizar este comando de ejemplo, sustituya user input placeholders por su propia información.

aws sso-admin create-trusted-token-issuer \ --instance-arn "arn:aws:sso:::instance/ssoins-1234567890abcdef" \ --name MyEntraIDTrustedIssuer \ --trusted-token-issuer-type OIDC_JWT \ --trusted-token-issuer-configuration file://./oidc-configuration.json

Respuesta

{ "TrustedTokenIssuerArn": "arn:aws:sso::123456789012:trustedTokenIssuer/ssoins-1234567890abcdef/tti-43b4a822-1234-1234-1234-a1b2c3d41234" }

Conectar la aplicación del Centro de identidades de IAM con el emisor de tokens de confianza

El emisor de tokens de confianza necesita algunos ajustes de configuración más para funcionar. Defina la audiencia en la que confiará el emisor de tokens de confianza. La audiencia es el valor dentro del IdToken que se identifica con la clave y que se encuentra en la configuración del proveedor de identidades. Por ejemplo:

1234973b-abcd-1234-abcd-345c5a9c1234

Cree un archivo denominado grant.json que contenga el contenido siguiente. Para usar este archivo, cambie la audiencia para que coincida con la configuración de su proveedor de identidad y proporcione el ARN del emisor de tokens de confianza que devolvió el comando anterior.

{ "JwtBearer": { "AuthorizedTokenIssuers": [ { "TrustedTokenIssuerArn": "arn:aws:sso::123456789012:trustedTokenIssuer/ssoins-1234567890abcdef/tti-43b4a822-1234-1234-1234-a1b2c3d41234", "AuthorizedAudiences": [ "1234973b-abcd-1234-abcd-345c5a9c1234" ] } ] } }

Ejecute el siguiente comando de ejemplo. Para usar este comando, sustituya user input placeholders por su información.

aws sso-admin put-application-grant \ --application-arn "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --grant-type "urn:ietf:params:oauth:grant-type:jwt-bearer" \ --grant file://./grant.json \

Este comando establece los ajustes de configuración para que el emisor de tokens de confianza confíe en la audiencia del archivo grant.json y vincule esta audiencia con la aplicación creada en el primer paso para intercambiar tokens de tipo jwt-bearer. La cadena urn:ietf:params:oauth:grant-type:jwt-bearer no es una cadena arbitraria. Es un espacio de nombres registrado en los perfiles de aserción JSON Web Token (JWT) de OAuth. Puede encontrar más información sobre este espacio de nombres en el RFC 7523.

A continuación, utilice el siguiente comando para configurar los alcances que incluirá el emisor de tokens de confianza al intercambiar valores IdToken desde su proveedor de identidad. En el caso de S3 Access Grants, el valor del parámetro --scope es s3:access_grants:read_write.

aws sso-admin put-application-access-scope \ --application-arn "arn:aws:sso::111122223333:application/ssoins-ssoins-111122223333abcdef/apl-abcd1234a1b2c3d" \ --scope "s3:access_grants:read_write"

El último paso consiste en adjuntar una política de recursos a la aplicación del Centro de identidades de IAM. Esta política permitirá al rol de IAM de su aplicación realizar solicitudes a la operación de la API sso-oauth:CreateTokenWithIAM y recibir los valores IdToken del Centro de identidades de IAM.

Cree un archivo denominado authentication-method.json que contenga el contenido siguiente. Reemplace 123456789012 por su ID de cuenta.

{ "Iam": { "ActorPolicy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/webapp" }, "Action": "sso-oauth:CreateTokenWithIAM", "Resource": "*" } ] } } }

Para asociar la política a la aplicación del Centro de identidades de IAM, ejecute este comando:

aws sso-admin put-application-authentication-method \ --application-arn "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --authentication-method-type IAM \ --authentication-method file://./authentication-method.json

Esto completa la configuración para usar S3 Access Grants con los usuarios del directorio a través de una aplicación web. Puede probar esta configuración directamente en la aplicación o puede llamar a la operación de la API CreateTokenWithIAM mediante el siguiente comando desde un rol de IAM permitido en la política de la aplicación del Centro de identidades de IAM:

aws sso-oidc create-token-with-iam \ --client-id "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --grant-type urn:ietf:params:oauth:grant-type:jwt-bearer \ --assertion IdToken

La respuesta será parecida a la siguiente:

{ "accessToken": "<suppressed long string to reduce space>", "tokenType": "Bearer", "expiresIn": 3600, "refreshToken": "<suppressed long string to reduce space>", "idToken": "<suppressed long string to reduce space>", "issuedTokenType": "urn:ietf:params:oauth:token-type:refresh_token", "scope": [ "sts:identity_context", "s3:access_grants:read_write", "openid", "aws" ] }

Si decodifica el valor IdToken que está codificado con base64, puede ver los pares clave-valor en formato JSON. La clave sts:identity_context contiene el valor que la aplicación debe enviar en la solicitud sts:AssumeRole para incluir la información de identidad del usuario del directorio. A continuación, se muestra un ejemplo del IdToken decodificado:

{ "aws:identity_store_id": "d-996773e796", "sts:identity_context": "AQoJb3JpZ2luX2VjEOTtl;<SUPRESSED>", "sub": "83d43802-00b1-7054-db02-f1d683aacba5", "aws:instance_account": "123456789012", "iss": "https://identitycenter.amazonaws.com/ssoins-1234567890abcdef", "sts:audit_context": "AQoJb3JpZ2luX2VjEOT<SUPRESSED>==", "aws:identity_store_arn": "arn:aws:identitystore::232642235904:identitystore/d-996773e796", "aud": "abcd12344U0gi7n4Yyp0-WV1LWNlbnRyYWwtMQ", "aws:instance_arn": "arn:aws:sso:::instance/ssoins-6987d7fb04cf7a51", "aws:credential_id": "EXAMPLEHI5glPh40y9TpApJn8...", "act": { "sub": "arn:aws:sso::232642235904:trustedTokenIssuer/ssoins-6987d7fb04cf7a51/43b4a822-1020-7053-3631-cb2d3e28d10e" }, "auth_time": "2023-11-01T20:24:28Z", "exp": 1698873868, "iat": 1698870268 }

Puede obtener el valor de sts:identity_context y pasar esta información en una llamada sts:AssumeRole. A continuación se muestra un ejemplo de la CLI de la sintaxis. El rol que se va a asumir es un rol temporal con permisos para invocar s3:GetDataAccess.

aws sts assume-role \ --role-arn "arn:aws:iam::123456789012:role/temp-role" \ --role-session-name "TempDirectoryUserRole" \ --provided-contexts ProviderArn="arn:aws:iam::aws:contextProvider/IdentityCenter",ContextAssertion="value from sts:identity_context"

Ahora puede usar las credenciales recibidas de esta llamada para invocar la operación de la API s3:GetDataAccess y recibir las credenciales finales con acceso a sus recursos de S3.