

# Tutorial do IAM: Delegar acesso entre contas da AWS usando funções do IAM
<a name="tutorial_cross-account-with-roles"></a>

**Importante**  
 As [práticas recomendadas](best-practices.md) do IAM aconselham exigir que os usuários humanos usem a federação com um provedor de identidades para acessar a AWS usando credenciais temporárias em vez de usuários do IAM com credenciais de longo prazo. Recomendamos usar somente usuários do IAM para [casos de uso específicos](gs-identities-iam-users.md) não compatíveis com usuários federados.

Este tutorial ensina a usar um perfil para delegar acesso a recursos em diferentes Contas da AWS, denominadas **Destino** e **Origem**. Você compartilha recursos em uma conta com usuários em outra conta. Ao configurar o acesso entre contas dessa forma, você não precisa criar usuários individuais do IAM em cada conta. Além disso, os usuários não precisam sair de uma conta e fazer login em outra conta para acessar recursos em diferentes Contas da AWS. Depois de configurar a função, você verá como usar a função do Console de gerenciamento da AWS, da AWS CLI e da API.

Neste tutorial, a conta **Destino** gerencia os dados de aplicações acessados por diferentes aplicações e equipes. Em cada conta, você armazena as informações da aplicação em buckets do Amazon S3. Você gerencia os usuários do IAM na conta **Origem**, em que tem dois perfis de usuário do IAM: **Desenvolvedores** e **Analistas**. Desenvolvedores e analistas usam a conta **Origem** para gerar dados compartilhados por vários microsserviços. Ambos os perfis têm permissões para trabalhar na conta Origem e acessar os recursos ali existentes. Periodicamente, um desenvolvedor deve atualizar os dados compartilhados na conta **Destino**. Os desenvolvedores armazenam esses dados em um bucket do Amazon S3 denominado `amzn-s3-demo-bucket-shared-container`. 

Ao final deste tutorial, você terá o seguinte:
+ Usuários na conta **Origem** (a conta confiável) com permissão para assumir um determinado perfil na conta **Destino**.
+ Um perfil na conta **Destino** (a conta confiável) com permissão para acessar um determinado bucket do Amazon S3. 
+ O bucket `amzn-s3-demo-bucket-shared-container` na conta **Destino**.

Os desenvolvedores podem usar o perfil no Console de gerenciamento da AWS para acessar o bucket `amzn-s3-demo-bucket-shared-container` na conta **Destino**. Eles também podem acessar o bucket usando chamadas de API autenticadas por credenciais temporárias fornecidas pelo perfil. As tentativas semelhantes de usar um perfil feitas por um analista falham.

Esse fluxo de trabalho tem três etapas básicas:

**[Para criar um perfil na conta Destino](#tutorial_cross-account-with-roles-1)**  
Primeiro, você usa o Console de gerenciamento da AWS para estabelecer confiança entre a conta **Destino** (número de identificação 999999999999) e a conta **Origem** (número de identificação 111111111111). Você começa criando um perfil do IAM denominado *UpdateData*. Ao criar o perfil, você define a conta **Origem** como uma entidade confiável e especifica uma política de permissões que deixa os usuários confiáveis atualizarem o bucket `amzn-s3-demo-bucket-shared-container`.

**[Conceder acesso ao perfil](#tutorial_cross-account-with-roles-2)**  
Nesta sessão, você modifica a política de perfil para negar aos analistas acesso ao perfil `UpdateData`. Porque os analistas têm acesso de PowerUser nesse cenário, e você deve *negar* explicitamente a capacidade de usar o perfil.

**[Teste o acesso alternando funções](#tutorial_cross-account-with-roles-3)**  
Por fim, como desenvolvedor, você usa o perfil `UpdateData` para atualizar o bucket `amzn-s3-demo-bucket-shared-container` na conta **Destino**. Você verá como acessar a função por meio do console da AWS da AWS CLI e da API.

## Considerações
<a name="tutorial_cross-account-with-roles-considerations"></a>

Antes de usar perfis do IAM para delegar acesso aos recursos nas Contas da AWS, é importante levar em conta o seguinte:
+ Você não pode alternar um perfil ao fazer login como Usuário raiz da conta da AWS.
+ As funções do IAM e as políticas baseadas em recurso delegam o acesso entre contas em uma única partição. Por exemplo, suponha que você tenha uma conta no Oeste dos EUA (Norte da Califórnia) na partição `aws` padrão. Além disso, você tem uma conta na China (Pequim) na partição `aws-cn`. Você não pode usar uma política baseada em recurso do Amazon S3 em sua conta na China (Pequim) para permitir o acesso de usuários em sua conta `aws` padrão.
+ Você pode usar o Centro de Identidade do AWS IAM para facilitar a autenticação única (SSO) de Contas da AWS externas (contas fora da sua AWS Organizations) usando Security Assertion Markup Language (SAML). Para obter detalhes, consulte [Integrate external Contas da AWS into Centro de Identidade do AWS IAM for central access management with independent billing using SAML 2.0](https://community.aws/content/2dIMI8N7w7tGxbE0KQMrkSBfae4/aws-iam-identity-center-integration-with-external-aws-accounts-for-independent-billing?lang=en) 
+ Você pode associar perfis a recursos da AWS, como instâncias do Amazon EC2 ou funções do AWS Lambda. Para obter detalhes, consulte [Criar um perfil para delegar permissões a um serviço da AWS](id_roles_create_for-service.md).
+ Se você quiser que uma aplicação assuma um perfil em outra Conta da AWS, poderá usar o AWS SDK para assumir perfis entre contas. Para obter mais informações, consulte [Authentication and access](https://docs.aws.amazon.com//sdkref/latest/guide/access.html) no *AWS SDKs and Tools Reference Guide*.
+ Trocar de função usando o Console de gerenciamento da AWS só funciona com contas que não exijam um `ExternalId`. Por exemplo, vamos supor que você conceda acesso à sua conta a terceiros e exija um `ExternalId` em um elemento `Condition` em sua política de permissões. Nesse caso, o terceiro pode acessar sua conta somente usando a API da AWS ou uma ferramenta de linha de comando. O terceiro não pode usar o console, pois ele deve fornecer um valor para `ExternalId`. Para obter mais informações sobre esse cenário, consulte [Acesso às Contas da AWS de propriedade de terceiros](id_roles_common-scenarios_third-party.md) e [How to enable cross account access to the Console de gerenciamento da AWS](https://aws.amazon.com/blogs/security/how-to-enable-cross-account-access-to-the-aws-management-console) no AWS Security Blog.

## Pré-requisitos
<a name="tutorial_cross-account-with-roles-prereqs"></a>

Este tutorial pressupõe que você já tenha os seguintes itens configurados:
+ **Duas** Contas da AWS distintas que você pode usar, uma para representar a conta **Origem** e outra para representar a conta **Destino**.
+ Usuários e perfis na conta **Origem** criados e configurados da seguinte forma:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)
+ Você não precisa criar nenhum usuário na conta **Destino**.
+ Um bucket do Amazon S3 criado na conta **Destino**. Você pode chamá-lo de `amzn-s3-demo-bucket-shared-container` neste tutorial, mas como os nomes dos buckets do S3 devem ser globalmente exclusivos, você deve usar um bucket com outro nome.

## Para criar um perfil na conta Destino
<a name="tutorial_cross-account-with-roles-1"></a>

É possível permitir que os usuários de uma Conta da AWS acessem recursos em outra Conta da AWS. Neste tutorial, faremos isso criando um perfil que define quem pode acessá-lo e quais permissões são concedidas aos usuários que alternam para ele.

Nesta etapa do tutorial, você cria o perfil na conta **Destino** e especifica a conta **Origem** como uma entidade confiável. Você também limita as permissões da função a acesso somente leitura e gravação para o bucket `amzn-s3-demo-bucket-shared-container`. Qualquer pessoa com permissão para usar a função pode ler e gravar no bucket `shared-container`.

Antes de poder criar um perfil, você precisa do *ID de conta* da Conta da AWS **Origem**. Cada Conta da AWS tem um identificador ID de conta exclusivo e ela atribuído.

**Para obter o ID da Conta da AWS Origem**

1. Faça login no Console de gerenciamento da AWS como administrador da conta **Origem** e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No console do IAM, escolha seu nome de usuário na barra de navegação no canto superior direito. Geralmente, ele é assim: ***username*@*account\$1ID\$1number\$1or\$1alias***.

   Nesse cenário, você pode usar o ID de conta 111111111111 para a conta **Origem**. No entanto, é necessário usar um ID de conta válido se você usar este cenário em seu ambiente de teste.

**Para criar um perfil na conta Destino que possa ser usado pela conta Origem**

1. Entre no Console de gerenciamento da AWS como administrador da conta **Destino** e abra o console do IAM.

1. Para criar a função, prepare a política gerenciada que define as permissões para os requisitos da função. Em uma etapa posterior, você anexará essa política à função. 

   Você deseja definir o acesso de leitura e gravação ao bucket `amzn-s3-demo-bucket-shared-container`. Embora a AWS forneça algumas políticas gerenciadas do Amazon S3, não há uma que conceda acesso de leitura e gravação a um único bucket do Amazon S3. Você pode criar a sua própria política.

   No painel de navegação, escolha **Policies (Políticas)** e, em seguida, selecione **Create policy (Criar política)**.

1. Escolha a guia **JSON** e copie o texto do documento de política JSON a seguir. Cole este texto na caixa de texto **JSON**, substituindo o ARN do recurso (`arn:aws:s3:::shared-container`) pelo verdadeiro ARN para o seu bucket do Amazon S3.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "s3:ListAllMyBuckets",
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-shared-container"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-shared-container/*"
       }
     ]
   }
   ```

------

   A ação  `ListAllMyBuckets` concede permissão para listar todos os buckets de propriedade do remetente autenticado da solicitação. A permissão `ListBucket` concede aos usuários a habilidade de visualizar objetos no bucket `amzn-s3-demo-bucket-shared-container`. As permissões `GetObject`, `PutObject`, `DeleteObject` concedem aos usuários a capacidade de visualizar, atualizar e excluir o conteúdo no bucket `amzn-s3-demo-bucket-shared-container`.
**nota**  
É possível alternar entre as opções de editor **Visual** e **JSON** a qualquer momento. Porém, se você fizer alterações ou escolher **Avançar** no editor **Visual**, o IAM poderá reestruturar a política a fim de otimizá-la para o editor visual. Para obter mais informações, consulte [Reestruturação da política](troubleshoot_policies.md#troubleshoot_viseditor-restructure).

1. Na página **Revisar e criar**, digite **read-write-app-bucket** para o nome da política. Revise as permissões concedidas pela política e depois escolha **Criar política** para salvar seu trabalho.

   As novas políticas aparecem na lista de políticas gerenciadas.

1. No painel de navegação, escolha **Funções** e **Criar função**.

1. Selecione o tipo de perfil **Uma Conta da AWS**.

1. Em **ID da conta**, digite a ID da conta **Origem**.

   Este tutorial usa o ID da conta de exemplo **111111111111** para a conta **Origem**. Você deve usar um ID de conta válido. Se você usar um ID de conta inválido, como **111111111111**, o IAM não permitirá que você crie a nova função.

   Por enquanto, não é necessário exigir um ID externo ou exigir que os usuários tenham autenticação multifator (MFA) para assumirem a função. Deixe essas opções desmarcadas. Para obter mais informações, consulte [Código da autenticação multifator no IAM da AWS](id_credentials_mfa.md).

1. Selecione **Next: Permissions** (Próximo: permissões) para definir as permissões associadas à função.

1. Marque a caixa de seleção ao lado da política que você criou anteriormente.
**Dica**  
Em **Filter** (Filtrar), selecione **Customer managed** (Gerenciado pelo cliente) para filtrar a lista, de modo que ela inclua apenas as políticas criadas por você. Isso oculta as políticas criadas pela AWS e torna muito mais fácil encontrar a que você necessita.

   Em seguida, escolha **Próximo**. 

1. (Opcional) Adicione metadados à função anexando etiquetas como pares de chave-valor. Para obter mais informações sobre como usar tags no IAM, consulte [Tags para recursos do AWS Identity and Access Management](id_tags.md).

1. (Opcional) Em **Descrição da função**, insira uma descrição para a nova função.

1. Depois de revisar a função, escolha **Criar função**.

    

   A função `UpdateData` é exibida na lista de funções.

Agora você deve obter o nome do recurso da Amazon (ARN) da função, que é um identificador exclusivo para a função. Ao modificar o perfil de desenvolvedor na conta Origem, você especifica o ARN do perfil da conta Destino para conceder ou negar as permissões.

**Para obter o ARN para UpdateData**

1. No painel de navegação do console do IAM, escolha **Perfis**.

1. Na lista de funções, escolha `UpdateData`.

1. Na seção **Resumo** do painel de detalhes, copie o valor de **ARN da função**.

   A conta Destino tem o ID de conta 999999999999, portanto, o ARN do perfil é `arn:aws:iam::999999999999:role/UpdateData`. Certifique-se de fornecer o ID da Conta da AWS verdadeiro para a conta Destino.

Neste ponto, você estabeleceu confiança entre as contas **Destino** e **Origem**. Você fez isso criando um perfil na conta **Destino** que identifica a conta **Origem** como uma entidade principal confiável. Você também definiu o que os usuários que passarem para a função `UpdateData` podem fazer.

Em seguida, modifique as permissões para o perfil Desenvolvedor.

## Conceder acesso ao perfil
<a name="tutorial_cross-account-with-roles-2"></a>

Nesse momento, os analistas e os desenvolvedores têm permissões para gerenciar os dados na conta **Origem**. Use as seguintes etapas necessárias para adicionar permissões a fim de permitir alternar para a função.

**Para modificar o perfil Desenvolvedores para permitir que eles alternem para o perfil UpdateData**

1. Entre como administrador na conta **Origem** e abra o console do IAM.

1. Escolha **Perfis** e depois **Desenvolvedores**.

1. Escolha a guia **Permissions** (Permissões), **Add permissions** (Adicionar permissões) e **Create inline policy** (Criar política em linha).

1. Selecione a guia **JSON**.

1. Adicione a seguinte instrução de política para permitir a ação `AssumeRole` no perfil `UpdateData` na conta Destino. Certifique-se de alterar *DESTINATION-ACCOUNT-ID* no elemento `Resource` para o ID da Conta da AWS real da conta Destino.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::111122223333:role/UpdateData"
       }
   }
   ```

------

   O efeito `Allow` permite explicitamente que o grupo Desenvolvedores acesse o perfil `UpdateData` na conta Destino. Qualquer desenvolvedor que tente acessar a função é bem-sucedido.

1. Selecione **Revisar política**.

1. Digite um **Nome**, como, por exemplo, **allow-assume-S3-role-in-destination**.

1. Escolha **Criar política**.

Na maioria dos ambientes, talvez o procedimento a seguir não seja necessário. Se, no entanto, você usar permissões PowerUserAccess, alguns grupos já poderão alternar funções. O procedimento a seguir mostra como adicionar uma permissão `"Deny"` ao grupo Analistas para garantir que eles não possam assumir o perfil. Se esse procedimento não for necessário em seu ambiente, recomendamos que não o adicione. As permissões `"Deny"` fazem com que seja mais complicado de gerenciar e entender o estado geral das permissões. Use as permissões `"Deny"` somente quando não existir uma opção melhor.

**Para modificar o perfil Analistas para negar permissão de assumir o perfil `UpdateData`**

1. Escolha **Perfis** e depois **Analistas**.

1. Escolha a guia **Permissions** (Permissões), **Add permissions** (Adicionar permissões) e **Create inline policy** (Criar política em linha).

1. Selecione a guia **JSON**.

1. Adicione a instrução de política a seguir para negar a ação `AssumeRole` na função `UpdateData`. Certifique-se de alterar *DESTINATION-ACCOUNT-ID* no elemento `Resource` para o ID da Conta da AWS real da conta Destino.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Deny",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::111122223333:role/UpdateData"
       }
   }
   ```

------

   O efeito `Deny` nega explicitamente ao grupo Analistas acesso ao perfil `UpdateData` na conta Destino. Qualquer analista que tente acessar o perfil receberá uma mensagem de acesso negado.

1. Selecione **Revisar política**.

1. Digite um **nome**, como **deny-assume-S3-role-in-destination**.

1. Escolha **Criar política**.

O perfil Desenvolvedores agora tem permissões para usar o perfil `UpdateData` na conta Destino. O perfil Analistas é impedido de usar o perfil `UpdateData`.

Em seguida, você verá como David, um desenvolvedor, pode acessar o bucket `amzn-s3-demo-bucket-shared-container` na conta Destino. David pode acessar o bucket no Console de gerenciamento da AWS, na AWS CLI ou na API do AWS.

## Teste o acesso alternando funções
<a name="tutorial_cross-account-with-roles-3"></a>

Após concluir as duas primeiras etapas deste tutorial, você terá um perfil que concede acesso a um recurso na conta **Destino**. Você também terá um perfil na conta **Origem** com usuários que têm permissão para usar esse perfil. Esta etapa discute como testar a alternância para essa função no Console de gerenciamento da AWS, na AWS CLI e na API da AWS.

Para obter ajuda com os problemas comuns que você pode encontrar ao trabalhar com perfis do IAM, consulte [Solucionar problemas de perfis do IAM](troubleshoot_roles.md).

### Alternar funções (console)
<a name="switch-tutorial_cross-account-with-roles"></a>

Se David precisar atualizar os dados na conta **Destino** no Console de gerenciamento da AWS, ele poderá fazer isso usando **Switch Role**. Ele especifica o ID da conta ou o alias e o nome da função, e suas permissões mudam imediatamente para as permitidas pela função. Depois, ele poderá usar o console para trabalhar com o bucket `amzn-s3-demo-bucket-shared-container`, mas não poderá trabalhar com nenhum outro recurso em **Destino**. Enquanto David usar o perfil, não poderá usar também seus privilégios de usuário avançado na conta **Origem**. Isso porque apenas um conjunto de permissões pode ser ativado por vez.

O IAM oferece duas maneiras para David acessar a página **Switch Role** (Alternar função):
+ David recebe um link do administrador que aponta para uma configuração predefinida Switch Role (Trocar de função). O link é fornecido ao administrador na última página do assistente **Criar função** ou na página **Resumo da função** de uma função entre contas. Ao selecionar esse link, David acessa a página **Alternar função** com os campos **ID da conta** e **Nome da função** já preenchidos. Tudo o que David precisa fazer é escolher **Trocar perfis**.
+ O administrador não envia o link no e-mail, mas, em vez disso, envia os valores do número de **ID da conta** e do **Nome da função**. David deve inserir manualmente os valores para tocar de função. Isso é ilustrado no procedimento a seguir.

**Para assumir uma função**

1. David inicia sessão no Console de gerenciamento da AWS usando seu usuário normal na conta **Origem**.

1. Ele escolhe o link que o administrador enviou por e-mail para ele. Esse link leva David à página **Switch Role** (Trocar de função) com as informações de ID ou alias da conta e nome da função já preenchidas.

   —ou—

   David escolhe os nomes (menu Identity [Identidade]) na barra de navegação e, depois, escolhe **Switch Roles** (Trocar de função). 

   Se essa for a primeira vez que David tenta acessar a página Alternar função dessa forma, primeiramente ele entrará na página **Switch Role** (Alternar função) de primeiro acesso. Essa página fornece informações adicionais sobre como a alternância de perfis pode permitir aos usuários gerenciar os recursos entre Contas da AWS. David deve selecionar **Switch Role** (Alternar função) nessa página para concluir o restante do procedimento.

1. Em seguida, para acessar o perfil, David deve digitar manualmente o número do ID da conta Destino (`999999999999`) e o nome do perfil (`UpdateData`).

   Além disso, David deseja monitorar quais funções e permissões associadas estão ativas no IAM no momento. Para controlar essas informações, ele digita `Destination` na caixa de texto **Display Name** (Nome de exibição), escolhe a opção na cor vermelha e escolhe **Switch Role** (Alternar função).

1. David agora pode usar o console do Amazon S3 para trabalhar com o bucket do Amazon S3 ou qualquer outro recurso ao qual a função `UpdateData` tenha permissões.

1. Quando concluído, David poderá voltar para as permissões originais. Para isso, ele escolhe o nome de exibição do perfil **Destino** na barra de navegação e depois escolhe **Voltar para David em 111111111111**.

1. Da próxima vez que David desejar alternar perfis e escolher o menu **Identidade** na barra de navegação, ele verá a entrada Destino no mesmo local em que estava da última vez. Ele pode simplesmente escolher essa entrada para alternar funções imediatamente sem inserir novamente o ID da conta e o nome da função.

### Alternar funções (AWS CLI)
<a name="switch-cli-tutorial_cross-account-with-roles"></a>

 Se David precisar trabalhar no ambiente **Destino** na linha de comando, poderá fazer isso usando a [AWS CLI](https://aws.amazon.com/cli/). Ele executa o comando `aws sts assume-role` e transmite o nome de recurso da Amazon (ARN) para obter credenciais de segurança temporárias para essa função. Em seguida, ele configura essas credenciais em variáveis do ambiente para que os comandos da AWS CLI funcionem usando as permissões da função. Enquanto David estiver usando o perfil, não poderá usar também seus privilégios de usuário avançado na conta **Origem**, pois apenas um conjunto de permissões pode estar ativo de cada vez.

Todas as chaves de acesso e tokens são apenas exemplos e não podem ser usados da forma que são mostrados. Substitua pelos valores apropriados do seu ambiente real.

**Para assumir uma função**

1. David abre uma janela de prompt de comando e confirma que o cliente de AWS CLI está funcionando executando o comando:

   ```
   aws help
   ```
**nota**  
O ambiente padrão de David usa as credenciais do usuário `David` do seu perfil padrão que ele criou com o comando `aws configure`. Para obter mais informações, consulte [Configuração da AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration) no *Guia do usuário da AWS Command Line Interface*.

1. Ele inicia o processo de alternar perfis executando o comando a seguir para alternar para o perfil `UpdateData` na conta **Destino**. Ele recebeu o ARN de função do administrador que criou a função. O comando também exige que você forneça um nome de sessão, você pode escolher qualquer texto que desejar para isso.

   ```
   aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/UpdateData" --role-session-name "David-ProdUpdate"
   ```

   Em seguida, David vê a seguinte na saída:

   ```
   {
       "Credentials": {
           "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
           "SessionToken": "AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLE
   CvSRyh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDy
   EXAMPLE9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3Uuysg
   sKdEXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLEsnf87e
   NhyDHq6ikBQ==",
           "Expiration": "2014-12-11T23:08:07Z",
           "AccessKeyId": "AKIAIOSFODNN7EXAMPLE"
       }
   }
   ```

1. David vê três elementos de que precisa na seção Credentials Credenciais) da saída.
   + `AccessKeyId`
   + `SecretAccessKey`
   + `SessionToken`

   David precisa configurar o ambiente de AWS CLI para usar esses parâmetros nas chamadas subsequentes. Para obter informações sobre as várias maneiras de configurar suas credenciais, consulte [Configuração da AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#config-settings-and-precedence). Você não pode usar o comando `aws configure` porque ele não dá suporte à captura do token de sessão. Porém, você pode inserir manualmente as informações em um arquivo de configuração. Como essas são credenciais temporárias com um tempo de expiração relativamente curto, é mais fácil adicioná-las ao ambiente de sua sessão de linha de comando atual.

1. Para adicionar os três valores ao ambiente, David recorta e cola a saída da etapa anterior nos seguintes comandos. Talvez você queira recortar e colar em um editor de texto simples para resolver problemas de quebra de linha na saída do token de sessão. Ela deve ser adicionada como uma string longa simples, apesar de a linha ser mostrada quebrada aqui para fins de clareza.

   O exemplo a seguir mostra os comandos fornecidos no ambiente Windows, onde "set" é o comando para criar uma variável de ambiente. Nos computadores Linux ou macOS, o comando é "exportar". Todas as outras partes do exemplo são válidas em todos os três ambientes.

   Para obter detalhes sobre como usar as ferramentas para Windows Powershell, consulte [Alternar para um perfil do IAM (Ferramentas para Windows PowerShell)](id_roles_use_switch-role-twp.md)

   ```
   set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
   set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   set AWS_SESSION_TOKEN=AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLECvS
   Ryh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDyEXA
   MPLEKEY9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3UusKd
   EXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLENhykxiHen
   DHq6ikBQ==
   ```

   Nesse ponto, todos os comandos a seguir são executados de acordo com as permissões de função identificadas por essas credenciais. No caso de David, a função `UpdateData`.
**Importante**  
Você pode salvar as definições de configuração usadas com frequência e credenciais em arquivos que são mantidos pela AWS CLI. Para obter mais informações, consulte [Using existing configuration and credentials files](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-existing) no *AWS Command Line Interface User Guide*. 

1. Execute o comando para acessar os recursos na conta Destino. Neste exemplo, David lista o conteúdo do bucket do S3 com o comando a seguir.

   ```
   aws s3 ls s3://shared-container
   ```

   Como nomes de bucket do Amazon S3 são universalmente exclusivos, não há necessidade de especificar o ID da conta que tem o bucket. Para acessar recursos de outros serviços da AWS, consulte a documentação da AWS CLI desse serviço para obter os comandos e a sintaxe necessários para referenciar seus recursos.

### Uso da AssumeRole (API da AWS)
<a name="api-tutorial_cross-account-with-roles"></a>

Quando David precisa fazer uma atualização na conta **Destino** no código, ele faz uma chamada `AssumeRole` para assumir o perfil `UpdateData`. A chamada retorna credenciais temporárias que ele pode usar para acessar o bucket `amzn-s3-demo-bucket-shared-container` na conta **Destino**. Com essas credenciais, David pode fazer chamadas de API para atualizar o bucket `amzn-s3-demo-bucket-shared-container`. Porém, ele não pode fazer chamadas de API para acessar nenhum outro recurso na conta **Destino**, mesmo tendo permissões de usuário avançado na conta **Origem**.

**Para assumir uma função**

1. David chama `AssumeRole` como parte de um aplicativo. Ele deve especificar o ARN `UpdateData`: `arn:aws:iam::999999999999:role/UpdateData`.

   A resposta da chamada `AssumeRole` inclui as credenciais temporárias com um `AccessKeyId` e um `SecretAccessKey`. Também inclui um horário de `Expiration` que indica quando as credenciais expiram, e é necessário solicitar novas. Quando você configura o encadeamento de perfis com o AWS SDK, muitos provedores de credenciais atualizam automaticamente as credenciais antes que expirem.

1. Com as credenciais temporárias, David faz uma chamada `s3:PutObject` para atualizar o bucket `amzn-s3-demo-bucket-shared-container`. Ele pode passar as credenciais para a chamada de API como o parâmetro `AuthParams`. Como as credenciais temporárias do perfil têm apenas acesso de leitura e gravação ao bucket `amzn-s3-demo-bucket-shared-container`, todas as outras ações na conta Destino são negadas.

Para obter um exemplo de código (usando Python), consulte [Alternar para um perfil do IAM (API da AWS)](id_roles_use_switch-role-api.md).

## Recursos adicionais
<a name="tutorial_cross-account-with-roles-related"></a>

Os seguintes recursos podem ajudar você a saber mais sobre os tópicos deste tutorial:
+ Para obter mais informações sobre os usuários do IAM, consulte [Identidades do IAM](id.md).
+ Para mais informações sobre os buckets do Amazon S3, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) no *Guia do usuário do Amazon Simple Storage Service*.
+  Para saber se as entidades de contas fora de sua zona de confiança (organização confiável ou conta) têm acesso para assumir as suas funções, consulte [O que é o IAM Access Analyzer?](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html).

## Resumo
<a name="tutorial_cross-account-with-roles-summary"></a>

Você concluiu o tutorial de acesso à API entre contas. Você criou uma função para estabelecer confiança com outra conta e definiu quais ações as entidades confiáveis podem executar. Depois, você modificou uma política de perfil para controlar quais usuários do IAM; podem acessar o perfil. Como resultado, da conta **Origem** os desenvolvedores podem fazer atualizações no bucket `amzn-s3-demo-bucket-shared-container` na conta **Destino** usando credenciais temporárias.