

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 name="access-tip"></a>

 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 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html) 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 confiável de identidade. Como caso de uso de referência, consulte [Configuring an Amazon Q Business application using Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html) 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](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html) para obter instruções específicas para o serviço. 

## Pré-requisitos para o uso do plug-in TIP
<a name="prereq-tip"></a>

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. 

1. 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html) no *Centro de Identidade do AWS IAM User Guide*. 

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

   Consulte [TIP prerequisites and considerations](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html) no *Centro de Identidade do AWS IAM User Guide*. 

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

   Consulte [AWS managed applications](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-quick-start-setting-up-identity-center-to-test-awsmanagedapps.html) ou [Customer managed applications](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html) no *Centro de Identidade do AWS IAM User Guide*. 

1. 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites) e [Tasks for setting up a trusted token issuer](https://docs.aws.amazon.com/singlesignon/latest/userguide/setuptrustedtokenissuer.html#setuptrustedtokenissuer-tasks) no *Centro de Identidade do AWS IAM User Guide*.

## Para usar o plug-in TIP no código
<a name="using-tip"></a>

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

1. 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 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html)para Java ou for JavaScript, com configurações [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sso-oidc/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-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 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` e`accessRole`, isso significaria usar um papel para assumir a si mesmo (suposição de papel próprio), o que é desencorajado por. AWS Consulte [announcement](https://aws.amazon.com/blogs/security/announcing-an-update-to-iam-role-trust-policy-behavior/) para obter mais detalhes.

### Considerações sobre os parâmetros `ssoOidcClient`, `stsClient` e `applicationRoleArn`
<a name="considerations-tip"></a>

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` no`accessRole`. 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.
  + `applicationRole`deve ter uma relação de confiança com o provedor de identidade usado para gerar o`webToken`, pois `webToken` será usado para assumir o ApplicationRole por meio da [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)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::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
<a name="tip-code-example"></a>

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 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html) 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-java](https://github.com/aws-sdk-plugin/trusted-identity-propagation-java)em 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html) 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-js](https://github.com/aws-sdk-plugin/trusted-identity-propagation-js)em GitHub.

------