View a markdown version of this page

Usando o plug-in TIP para acessar Serviços da AWS - AWS SDKs e ferramentas

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando o plug-in TIP para acessar Serviços da AWS

A propagação de identidade confiável (TIP) é um recurso Centro de Identidade do AWS IAM que permite que os administradores concedam permissões com base nos atributos do usuário, como associações de grupos. Serviços da AWS Com a propagação de identidade confiável, o contexto de identidade é adicionado a uma função do IAM para identificar o usuário que está solicitando acesso aos AWS recursos. Esse contexto é propagado para outros Serviços da AWS.

O contexto de identidade compreende informações que são Serviços da AWS usadas para tomar decisões de autorização quando recebem solicitações de acesso. Essas informações incluem metadados que identificam o solicitante (por exemplo, um usuário do IAM Identity Center), o acesso AWS service (Serviço da AWS) ao qual o acesso é solicitado (por exemplo, Amazon Redshift) e o escopo do acesso (por exemplo, acesso somente para leitura). O receptor AWS service (Serviço da AWS) usa esse contexto e todas as permissões atribuídas ao usuário para autorizar o acesso aos seus recursos. Para obter mais informações, consulte a visão geral da propagação de identidade confiável no Guia do Centro de Identidade do AWS IAM usuário.

O plug-in TIP pode ser usado com Serviços da AWS esse suporte à propagação de identidade confiável. Como caso de uso de referência, consulte Configuring an Amazon Q Business application using Centro de Identidade do AWS IAM no Amazon Q Business User Guide.

nota

Se você estiver usando o Amazon Q Business, consulte Configuring an Amazon Q Business application using Centro de Identidade do AWS IAM para obter instruções específicas para o serviço.

Pré-requisitos para o uso do plug-in TIP

Os seguintes recursos são necessários para o plug-in funcionar:

  1. Você deve estar usando o AWS SDK para Java ou AWS SDK para JavaScript o.

  2. Verifique se o serviço que você está usando é compatível com propagação de identidades confiáveis.

    Consulte a coluna Enables trusted identity propagation through IAM Identity Center da tabela AWS managed applications that integrate with IAM Identity Center no Centro de Identidade do AWS IAM User Guide.

  3. Habilite o IAM Identity Center e a propagação de identidades confiáveis.

    Consulte TIP prerequisites and considerations no Centro de Identidade do AWS IAM User Guide.

  4. Você deve ter um Identity-Center-integrated aplicativo.

    Consulte AWS managed applications ou Customer managed applications no Centro de Identidade do AWS IAM User Guide.

  5. Você deve configurar um emissor de token confiável (TTI) e conectar seu serviço ao IAM Identity Center.

    Consulte Prerequisites for trusted token issuers e Tasks for setting up a trusted token issuer no Centro de Identidade do AWS IAM User Guide.

Para usar o plug-in TIP no código

  1. Crie uma instância do plug-in de propagação de identidades confiáveis.

  2. Crie uma instância de cliente de serviço para interagir com você AWS service (Serviço da AWS) e personalize o cliente de serviço adicionando o plug-in confiável de propagação de identidade.

O plug-in TIP aceita os seguintes parâmetros de entrada:

  • webTokenProvider: uma função que o cliente implementa para obter um token do OpenID do respectivo provedor de identidades externo.

  • accessRoleArn: o ARN do perfil do IAM a ser assumido pelo plug-in com o contexto de identidade do usuário para obter as credenciais aprimoradas com identidade.

  • applicationArn: string do identificador específico do cliente ou da aplicação. Esse valor é um ARN da aplicação que tem concessões de OAuth configuradas.

  • ssoOidcClient: (Opcional) Um cliente SSO OIDC, como SsoOidcClient para Java ou for JavaScript, com configurações client-sso-oidc definidas pelo cliente. Se não for fornecido, um cliente do OIDC usando o applicationRoleArn será instanciado e usado.

  • stsClient: (opcional) um cliente do AWS STS com configurações definidas pelo cliente, usado para assumir o accessRoleArn com o contexto da identidade do usuário. Se não for fornecido, um AWS STS cliente usando applicationRoleArn será instanciado e usado.

  • applicationRoleArn: (Opcional) O ARN da função IAM a ser assumido para que o OIDC e os AWS STS clientes possam ser inicializados. AssumeRoleWithWebIdentity

    • Se não forem fornecidos, ambos os parâmetros ssoOidcClient e stsClient deverão ser fornecidos.

    • Se fornecido, o applicationRoleArn não poderá ser igual ao valor do parâmetro accessRoleArn. applicationRoleArn é usado para compilar o STSClient, que é usado para assumir o accessRole. Se o mesmo papel for usado para ambos applicationRole eaccessRole, isso significaria usar um papel para assumir a si mesmo (suposição de papel próprio), o que é desencorajado por. AWS Consulte announcement para obter mais detalhes.

Considerações sobre sso OidcClient, STSClient e parâmetros do aplicativo RoleArn

Ao configurar o plug-in TIP, considere os seguintes requisitos de permissão com base nos parâmetros que você fornecer:

  • Se você fornecer ssoOidcClient e stsClient:

    • As credenciais no ssoOidcClient devem ter permissão de oauth:CreateTokenWithIAM para chamar a central de identidade para obter o contexto do usuário específico da central de identidade.

    • As credenciais no stsClient devem ter as permissões sts:AssumeRole e sts:SetContext noaccessRole. O accessRole também precisa ser configurado com uma relação de confiança com as credenciais no stsClient.

  • Se você estiver fornecendo applicationRoleArn:

    • O applicationRole deve ter as permissões oauth:CreateTokenWithIAM, sts:AssumeRole e sts:SetContext nos recursos necessários (instância do IdC, accessRole), pois ele será usado para compilar os clientes do OIDC e do STS.

    • applicationRoledeve ter uma relação de confiança com o provedor de identidade usado para gerar owebToken, pois webToken ele será usado para assumir o ApplicationRole por meio da AssumeRoleWithWebIdentity chamada do plug-in.

Exemplo ApplicationRole de configuração:

Política de confiança com o provedor de tokens Web:

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

Política de permissão:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": [ "arn:aws:iam::111122223333:role/accessRole" ] }, { "Effect": "Allow", "Action": [ "sso-oauth:CreateTokenWithIAM" ], "Resource": [ "*" ] } ] }

Exemplos de código usando TIP

Os exemplos abaixo mostram como implementar o plug-in TIP em seu código usando o AWS SDK para Java ou AWS SDK para JavaScript o.

Java

Para usar o plug-in TIP em seu AWS SDK para Java projeto, você precisa declará-lo como uma dependência no pom.xml arquivo do seu projeto.

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

No código-fonte, inclua a instrução de pacote necessária para software.amazon.awssdk.trustedidentitypropagation.

Os exemplos a seguir mostram duas maneiras de criar uma instância do plug-in de propagação de identidades confiáveis e adicioná-lo a um cliente de serviço. Ambos os exemplos usam o Amazon S3 como serviço e o utilizam S3AccessGrantsPlugin para gerenciar permissões específicas do usuário, mas podem ser aplicados a qualquer um AWS service (Serviço da AWS) que ofereça suporte à propagação de identidade confiável (TIP).

nota

Para esses exemplos, você precisa configurar as permissões específicas do usuário de Concessão de Acesso do S3. Consulte a documentação de Concessão de Acesso do S3 para obter mais detalhes.

Opção 1: criar e transmitir clientes do OIDC e do 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());

Opção 2: passar o aplicativo RoleArn e adiar a criação do cliente para o plug-in

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 obter mais detalhes e fontes, consulte https://github.com/aws-sdk-plugin/trusted-identity-propagation-java trusted-identity-propagation-java on. GitHub

JavaScript

Execute o comando a seguir para instalar o pacote de plug-in de autenticação TIP em seu AWS SDK para JavaScript projeto:

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

O package.json final deve incluir uma dependência semelhante à seguinte:

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

No seu código-fonte, importe a dependência de TrustedIdentityPropagationExtension necessária.

Os exemplos a seguir mostram duas maneiras de criar uma instância do plug-in de propagação de identidades confiáveis e adicioná-lo a um cliente de serviço. Ambos os exemplos usam o Amazon S3 como serviço e utilizam as concessões de acesso do Amazon S3 para gerenciar permissões específicas do usuário, mas podem ser aplicados a qualquer um AWS service (Serviço da AWS) que ofereça suporte à propagação de identidade confiável (TIP).

nota

Para esses exemplos, você precisa configurar as permissões específicas do usuário de Concessão de Acesso do Amazon S3. Consulte a documentação de Concessão de Acesso do Amazon S3 para obter mais detalhes.

Opção 1: criar e transmitir clientes do OIDC e do 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); }

Opção 2: passar o aplicativo RoleArn e adiar a criação do cliente para o plug-in

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 obter mais detalhes e fontes, consulte https://github.com/aws-sdk-plugin/trusted-identity-propagation-js trusted-identity-propagation-js on. GitHub