Usando o plugin 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 plugin TIP para acessar Serviços da AWS

A propagação de identidade confiável (TIP) é um recurso AWS IAM Identity Center 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 ao receber 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 destinatário 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 AWS IAM Identity Center usuário.

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

nota

Se você estiver usando o Amazon Q Business, consulte Configuring an Amazon Q Business application using AWS IAM Identity Center 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 for 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 AWS IAM Identity Center User Guide.

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

    Consulte TIP prerequisites and considerations no AWS IAM Identity Center User Guide.

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

    Consulte AWS managed applications ou Customer managed applications no AWS IAM Identity Center 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 AWS IAM Identity Center 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 do aplicativo que tem OAuth concessões configuradas.

  • ssoOidcClient: (Opcional) Um cliente OIDC SSO, como SsoOidcClientpara Java ou for JavaScript, com configurações client-sso-oidcdefinidas 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 do IAM a ser assumido para que o OIDC e os AWS STS clientes AssumeRoleWithWebIdentity possam ser inicializados.

    • 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 os parâmetros ssoOidcClient, stsClient e applicationRoleArn

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 será usado para assumir o ApplicationRole por meio da AssumeRoleWithWebIdentitychamada 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::ACCOUNT_ID: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": [ "accessRoleArn" ] }, { "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 for Java ou AWS SDK para JavaScript o.

Java

Para usar o plug-in TIP em seu AWS SDK for Java projeto, você precisa declará-lo como uma dependência no arquivo do pom.xml 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 applicationRoleArn 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 detalhes adicionais e fontes, consulte trusted-identity-propagation-javaem GitHub.

JavaScript

Execute o comando a seguir para instalar o pacote do 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 os Amazon S3 Access Grants para gerenciar permissões específicas do usuário, mas podem ser aplicados a AWS service (Serviço da AWS) qualquer um 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 applicationRoleArn 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 detalhes adicionais e fontes, consulte trusted-identity-propagation-jsem GitHub.