Uso del complemento TIP para acceder Servicios de AWS - AWS SDKs y herramientas

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.

Uso del complemento TIP para acceder Servicios de AWS

La propagación fiable de identidades (TIP) es una función AWS IAM Identity Center que permite Servicios de AWS a los administradores conceder permisos en función de los atributos de los usuarios, como las asociaciones de grupos. Con la propagación de identidades fiable, el contexto de identidad se añade a una función de IAM para identificar al usuario que solicita acceso a AWS los recursos. Este contexto se propaga a otros. Servicios de AWS

El contexto de identidad comprende la información que se Servicios de AWS utiliza para tomar decisiones de autorización cuando reciben solicitudes de acceso. Esta información incluye los metadatos que identifican al solicitante (por ejemplo, un usuario del Centro de Identidad de IAM), el lugar Servicio de AWS al que se solicita el acceso (por ejemplo, Amazon Redshift) y el ámbito del acceso (por ejemplo, el acceso de solo lectura). El destinatario Servicio de AWS utiliza este contexto y cualquier permiso asignado al usuario para autorizar el acceso a sus recursos. Para obtener más información, consulte la descripción general de la propagación de identidades confiables de la Guía del AWS IAM Identity Center usuario.

El complemento TIP se puede utilizar con Servicios de AWS este soporte para la propagación de identidades confiable. Como caso de uso de referencia, consulte Configuración de una aplicación de Amazon Q Business mediante AWS IAM Identity Center la Guía del usuario de Amazon Q Business.

nota

Si utilizas Amazon Q Business, consulta Cómo configurar una aplicación de Amazon Q Business mediante las AWS IAM Identity Center instrucciones específicas del servicio.

Requisitos previos para usar el complemento TIP

Se requieren los siguientes recursos para que el complemento funcione:

  1. Debe utilizar el AWS SDK para Java o el AWS SDK para JavaScript.

  2. Compruebe que el servicio que está utilizando admite la propagación de identidades de confianza.

    Consulte la columna Permite la propagación de identidades de forma fiable a través del Centro de Identidad de IAM de la tabla de aplicaciones AWS gestionadas que se integran con el Centro de Identidad de IAM de la Guía del AWS IAM Identity Center usuario.

  3. Habilite el Centro de Identidad de IAM y la propagación de identidades confiable.

    Consulte los requisitos previos y las consideraciones de la TIP en la Guía del AWS IAM Identity Center usuario.

  4. Debe tener una Identity-Center-integrated solicitud.

    Consulte las aplicaciones AWS administradas o las aplicaciones administradas por el cliente en la Guía del AWS IAM Identity Center usuario.

  5. Debe configurar un emisor de token (TTI) de confianza y conectar su servicio al IAM Identity Center.

    Consulte los requisitos previos para emisores de tokens de confianza y las tareas para configurar un emisor de token de confianza en la Guía del usuario.AWS IAM Identity Center

Para usar el complemento TIP en tu código

  1. Cree una instancia del complemento de propagación de identidades confiable.

  2. Cree una instancia de cliente de servicio para interactuar con su cliente de servicio Servicio de AWS y personalícelo añadiendo el complemento de propagación de identidades confiable.

El complemento TIP utiliza los siguientes parámetros de entrada:

  • webTokenProvider: función que el cliente implementa para obtener un token OpenID de su proveedor de identidad externo.

  • accessRoleArn: El ARN del rol de IAM que debe asumir el complemento con el contexto de identidad del usuario para obtener las credenciales de identidad mejorada.

  • applicationArn: la cadena de identificación única del cliente o la aplicación. Este valor es un ARN de aplicación que tiene las OAuth concesiones configuradas.

  • ssoOidcClient: (Opcional) Un cliente OIDC de SSO, por ejemplo, SsoOidcClientpara Java o for JavaScript, con configuraciones definidas client-sso-oidcpor el cliente. Si no se proporciona, se creará una instancia y se utilizará un cliente OIDC que utilice. applicationRoleArn

  • stsClient: (Opcional) Un AWS STS cliente con configuraciones definidas por el cliente, que se utiliza para asumir accessRoleArn el contexto de identidad del usuario. Si no se proporciona, se creará una instancia y se applicationRoleArn utilizará un AWS STS cliente que lo utilice.

  • applicationRoleArn: (Opcional) El ARN del rol de IAM que se va a asumir AssumeRoleWithWebIdentity para poder iniciar el OIDC AWS STS y los clientes.

    • Si no se proporciona, se deben proporcionar ambos parámetros. ssoOidcClient stsClient

    • Si se proporciona, no applicationRoleArn puede tener el mismo valor que el accessRoleArn parámetro. applicationRoleArnse utiliza para crear el STSClient, que se utiliza para asumir AccessRole. Si se usa el mismo rol para ambos applicationRoleaccessRole, significaría usar un rol para asumirse a sí mismo (suposición del rol propio), lo que no se recomienda. AWS Consulte el anuncio para obtener más detalles.

ssoOidcClientConsideraciones stsClient y applicationRoleArn parámetros

Al configurar el complemento TIP, tenga en cuenta los siguientes requisitos de permiso en función de los parámetros que proporcione:

  • Si proporciona ssoOidcClient ystsClient:

    • Las credenciales del centro de identidad ssoOidcClient deben tener oauth:CreateTokenWithIAM permiso para llamar al centro de identidad y obtener el contexto de usuario específico del centro de identidad.

    • Las credenciales stsClient deben estar sts:AssumeRole activadas y sts:SetContext los permisos activadosaccessRole. accessRoletambién debe configurarse con una relación de confianza con las credenciales activadasstsClient.

  • Si proporcionaapplicationRoleArn:

    • applicationRoledebe tener los oauth:CreateTokenWithIAM recursos necesarios sts:AssumeRole y sts:SetContext los permisos necesarios (instancia de iDCaccessRole), ya que se utilizará para crear clientes OIDC y STS.

    • applicationRoledebe tener una relación de confianza con el proveedor de identidad que se utilice para generar elwebToken, ya que se webToken utilizará para asumir el ApplicationRole mediante la AssumeRoleWithWebIdentityllamada del complemento.

Ejemplo de ApplicationRole configuración:

Política de confianza con el proveedor de tokens web:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/IDENTITY_PROVIDER_URL" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "IDENTITY_PROVIDER_URL:aud": "CLIENT_ID_TO_BE_TRUSTED" } } } ] }

Política de permisos:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": [ "accessRoleArn" ] }, { "Effect": "Allow", "Action": [ "sso-oauth:CreateTokenWithIAM" ], "Resource": [ "*" ] } ] }

Ejemplos de código que utilizan TIP

Los ejemplos siguientes muestran cómo implementar el complemento TIP en su código utilizando el AWS SDK para Java o el AWS SDK para JavaScript.

Java

Para usar el complemento TIP en su AWS SDK para Java proyecto, debe declararlo como una dependencia en el pom.xml archivo de su proyecto.

<dependency> <groupId>software.amazon.awsidentity.trustedIdentityPropagation</groupId> <artifactId>aws-sdk-java-trustedIdentityPropagation-java-plugin</artifactId> <version>2.0.0</version> </dependency>

En tu código fuente, incluye la declaración de paquete requerida parasoftware.amazon.awssdk.trustedidentitypropagation.

Los siguientes ejemplos muestran dos formas de crear una instancia del complemento de propagación de identidades confiable y agregarla a un cliente de servicio. Ambos ejemplos utilizan Amazon S3 como servicio y se utilizan S3AccessGrantsPlugin para administrar los permisos específicos del usuario, pero se pueden aplicar a cualquiera Servicio de AWS que admita la propagación de identidades confiables (TIP).

nota

Para estos ejemplos, debe configurar los permisos específicos de usuario de S3 Access Grants. Consulte la documentación de S3 Access Grants para obtener más información.

Opción 1: Cree y transfiera clientes OIDC y STS

SsoOidcClient oidcClient = SsoOidcClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider).build(); StsClient stsClient = StsClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider).build(); TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder() .webTokenProvider(() -> webToken) .applicationArn(idcApplicationArn) .accessRoleArn(accessRoleArn) .ssoOidcClient(oidcClient) .stsClient(stsClient) .build(); S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder() .build(); S3Client s3Client = S3Client.builder().region(Region.US_EAST_1) .crossRegionAccessEnabled(true) .addPlugin(trustedIdentityPropagationPlugin) .addPlugin(accessGrantsPlugin) .build(); final var resp = s3Client.getObject(GetObjectRequest.builder() .key("path/to/object/fileName") .bucket("bucketName") .build());

Opción 2: Transferir applicationRoleArn y aplazar la creación del cliente al complemento

TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder() .webTokenProvider(() -> webToken) .applicationArn(idcApplicationArn) .accessRoleArn(accessRoleArn) .applicationRoleArn(applicationRoleArn) .build(); S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder() .build(); S3Client s3Client = S3Client.builder().region(Region.US_EAST_1) .crossRegionAccessEnabled(true) .addPlugin(trustedIdentityPropagationPlugin) .addPlugin(accessGrantsPlugin) .build(); final var resp = s3Client.getObject(GetObjectRequest.builder() .key("path/to/object/fileName") .bucket("bucketName") .build());

Para obtener información y fuentes adicionales, consulte trusted-identity-propagation-javaen GitHub.

JavaScript

Ejecute el siguiente comando para instalar el paquete de complementos de autenticación TIP en su AWS SDK para JavaScript proyecto:

$ npm i @aws-sdk-extension/trusted-identity-propagation

El final package.json debe incluir una dependencia similar a la siguiente:

"dependencies": { "@aws-sdk-extension/trusted-identity-propagation": "^2.0.0" },

En tu código fuente, importa la TrustedIdentityPropagationExtension dependencia requerida.

Los siguientes ejemplos muestran dos formas de crear una instancia del complemento de propagación de identidades confiable y agregarla a un cliente de servicio. Ambos ejemplos utilizan Amazon S3 como servicio y Amazon S3 Access Grants para administrar los permisos específicos de los usuarios, pero se pueden aplicar a cualquiera Servicio de AWS que admita la propagación de identidades confiables (TIP).

nota

Para estos ejemplos, debe configurar los permisos específicos de usuario de Amazon S3 Access Grants; consulte la documentación de Amazon S3 Access Grants para obtener más información.

Opción 1: Cree y transfiera clientes OIDC y STS

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control"; import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation"; const s3ControlClient = new S3ControlClient({ region: "us-east-1", extensions: [ TrustedIdentityPropagationExtension.create({ webTokenProvider: async () => { return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER'; }, ssoOidcClient: customOidcClient, stsClient: customStsClient, accessRoleArn: accessRoleArn, applicationArn: applicationArn, }), ], }); const getDataAccessParams = { Target: "S3_URI_PATH", Permission: "READ", AccountId: ACCOUNT_ID, InstanceArn: S3_ACCESS_GRANTS_ARN, TargetType: "Object", }; try { const command = new GetDataAccessCommand(getDataAccessParams); const response = await s3ControlClient.send(command); const credentials = response.Credentials; // Create a new S3 client with the temporary credentials const temporaryS3Client = new S3Client({ region: "us-east-1", credentials: { accessKeyId: credentials.AccessKeyId, secretAccessKey: credentials.SecretAccessKey, sessionToken: credentials.SessionToken, }, }); // Use the temporary S3 client to perform the operation const s3Params = { Bucket: "BUCKET_NAME", Key: "S3_OBJECT_KEY", }; const getObjectCommand = new GetObjectCommand(s3Params); const s3Object = await temporaryS3Client.send(getObjectCommand); const fileContent = await s3Object.Body.transformToString(); // Process the S3 object data console.log("Successfully retrieved S3 object:", fileContent); } catch (error) { console.error("Error accessing S3 data:", error); }

Opción 2: Transferir applicationRoleArn y aplazar la creación del cliente al complemento

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control"; import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation"; const s3ControlClient = new S3ControlClient({ region: "us-east-1", extensions: [ TrustedIdentityPropagationExtension.create({ webTokenProvider: async () => { return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER'; }, accessRoleArn: accessRoleArn, applicationRoleArn: applicationRoleArn, applicationArn: applicationArn, }), ], }); // Same S3 AccessGrants workflow as Option 1 const getDataAccessParams = { Target: "S3_URI_PATH", Permission: "READ", AccountId: ACCOUNT_ID, InstanceArn: S3_ACCESS_GRANTS_ARN, TargetType: "Object", }; try { const command = new GetDataAccessCommand(getDataAccessParams); const response = await s3ControlClient.send(command); const credentials = response.Credentials; const temporaryS3Client = new S3Client({ region: "us-east-1", credentials: { accessKeyId: credentials.AccessKeyId, secretAccessKey: credentials.SecretAccessKey, sessionToken: credentials.SessionToken, }, }); const s3Params = { Bucket: "BUCKET_NAME", Key: "S3_OBJECT_KEY", }; const getObjectCommand = new GetObjectCommand(s3Params); const s3Object = await temporaryS3Client.send(getObjectCommand); const fileContent = await s3Object.Body.transformToString(); console.log("Successfully retrieved S3 object:", fileContent); } catch (error) { console.error("Error accessing S3 data:", error); }

Para obtener información y fuentes adicionales, consulte trusted-identity-propagation-jsen GitHub.