

# Alterar para uma perfil do IAM (AWS CLI)
<a name="id_roles_use_switch-role-cli"></a>

Uma *função* especifica um conjunto de permissões que você pode usar para acessar os recursos da AWS de que você precisa. Nesse sentido, ela é semelhante a um [usuário do AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) (IAM). Ao fazer login como usuário, você obtém um conjunto específico de permissões. No entanto, você não faz login em uma função mas, depois de fazer login como usuário, poderá mudar para uma função. Isso separa, temporariamente, as permissões originais de usuário e, em vez disso, oferece a você as permissões atribuídas à função. O perfil pode estar em sua própria conta ou em qualquer outra Conta da AWS. Para obter mais informações sobre funções, seus benefícios e como criar e configurá-las, consulte [Perfis do IAM](id_roles.md) e [Criar um perfil do IAM](id_roles_create.md). Para saber mais sobre os diferentes métodos que você pode usar para assumir uma função, consulte [Métodos para assumir um perfil](id_roles_manage-assume.md).

**Importante**  
As permissões do usuário do IAM e quaisquer funções você venha a assumir não são cumulativas. Apenas um conjunto de permissões é ativo por vez. Quando você assume um perfil, perde temporariamente as permissões de usuário ou perfil anteriores e trabalha com as permissões atribuídas ao perfil. Ao sair da função, suas permissões de usuário são, automaticamente, restauradas.

Você poderá usar uma função para executar um comando da AWS CLI quando estiver conectado como um usuário do IAM. Você também pode usar um perfil para executar um comando da AWS CLI quando tiver se conectado como um [usuário autenticado externamente](id_roles_providers.md) ([SAML](id_roles_providers_saml.md) ou [OIDC](id_roles_providers_oidc.md)) que já esteja usando um perfil. Além disso, você pode usar uma função para executar um comando da AWS CLI de uma instância do Amazon EC2 anexada a uma função por meio do perfil da instância. Você não pode assumir um perfil quando está conectado como o Usuário raiz da conta da AWS.

[**Encadeamento de funções**](id_roles.md#iam-term-role-chaining): você também pode usar o encadeamento de funções, que usa permissões de uma função para acessar uma segunda função.

Por padrão, a sessão da função dura uma hora. Quando assume esta função usando as operações da CLI `assume-role*`, você pode especificar um valor para o parâmetro `duration-seconds`. Esse valor pode variar de 900 segundos (15 minutos) até o valor configurado de duração máxima da sessão para o perfil. Se você alternar perfis no console, a duração da sessão será limitada a, no máximo, uma hora. Para saber como visualizar o valor máximo para sua função, consulte [Atualizar a duração máxima da sessão de um perfil](id_roles_update-role-settings.md#id_roles_update-session-duration). 

Se você usar o encadeamento de funções, a duração da sessão será limitada a um máximo de uma hora. Se você usar o parâmetro `duration-seconds` para fornecer um valor maior do que uma hora, a operação falhará.

## Cenário de exemplo: alternar para uma função de produção
<a name="switch-role-cli-scenario-prod-env"></a>

Imagine que você seja um usuário do IAM para trabalhar no ambiente de desenvolvimento. Nesse cenário, ocasionalmente, é necessário trabalhar com o ambiente de produção na linha de comando com a [AWS CLI](https://aws.amazon.com/cli/). Você já tem uma credencial de chave de acesso disponível para você. Esse pode ser o par de chaves de acesso atribuído ao usuário do IAM padrão. Ou, se estiver conectado como uma entidade principal federada SAML ou OIDC, ele poderá ser o par de chaves de acesso para o perfil inicialmente atribuído a você. Se suas permissões atuais concederem a capacidade de assumir uma função específica do IAM, você poderá identificar essa função em um “perfil” nos arquivos de configuração da AWS CLI. Esse comando é executado com as permissões da função do IAM especificada, não a identidade original. Quando especifica esse perfil em um comando da AWS CLI, você está usando a nova função. Nesta situação, você não pode usar as permissões originais na conta de desenvolvimento ao mesmo tempo. Isso porque apenas um conjunto de permissões pode ser ativado por vez.

**nota**  
Por motivos de segurança, os administradores podem [revisar logs do AWS CloudTrail](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds) para saber quem executou uma ação na AWS. Seu administrador pode exigir que você especifique uma identidade-fonte ou um nome de sessão de função ao assumir a função. Para obter mais informações, consulte [`sts:SourceIdentity`](reference_policies_iam-condition-keys.md#ck_sourceidentity) e [`sts:RoleSessionName`](reference_policies_iam-condition-keys.md#ck_rolesessionname).

**Para alternar para uma função de produção (AWS CLI)**

1. <a name="step-configure-default"></a>Se você nunca usou a AWS CLI, é necessário, primeiro, configurar seu perfil CLI padrão. Abra um prompt de comando e configure sua instalação da AWS CLI para usar a chave de acesso de seu usuário do IAM ou de sua função federada. 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*.

   Execute o comando [aws configure](https://docs.aws.amazon.com/cli/latest/reference/configure/) da seguinte forma:

   ```
   aws configure
   ```

   Quando solicitado, forneça as seguintes informações:

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-east-2
   Default output format [None]: json
   ```

1. Crie um novo perfil para a função no arquivo `.aws/config` no Unix ou Linux ou o arquivo `C:\Users\USERNAME\.aws\config` no Windows. O exemplo a seguir cria um perfil chamado `prodaccess` que muda para a função `ProductionAccessRole` na conta `123456789012`. Você obtém o ARN da função do administrador da conta que criou a função. Quando este perfil é invocado, a AWS CLI usa as credenciais do `source_profile` para solicitar credenciais para a função. Por isso, a identidade mencionada como `source_profile` deve ter `sts:AssumeRole` permissões para a função especificada no `role_arn`.

   ```
   [profile prodaccess]
       role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
       source_profile = default
   ```

1. Depois de criar o novo perfil, qualquer comando da AWS CLI que especifique o parâmetro `--profile prodaccess` será executado sob as permissões anexadas à função `ProductionAccessRole` do IAM, em vez do usuário padrão.

   ```
   aws iam list-users --profile prodaccess
   ```

   Este comando funciona se as permissões atribuídas ao `ProductionAccessRole` permitem a listagem dos usuários na conta da AWS atual.

1. Para retornar para as permissões concedidas por suas credenciais originais, execute comandos sem o parâmetro `--profile`. A AWS CLI reverte para usar as credenciais em seu perfil padrão, que você configurou em [Step 1](#step-configure-default).

Para obter mais informações, consulte [Assumir uma função](https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html) no *Guia do usuário do AWS Command Line Interface*.

## Cenário de exemplo: permitir que uma função de perfil da instância alterne para uma função em outra conta
<a name="switch-role-cli-scenario-ec2-instance"></a>

Imagine que você esteja usando duas Contas da AWS e queira permitir que uma aplicação em execução em uma instância do Amazon EC2 execute comandos da [AWS CLI](https://aws.amazon.com/cli/) nas duas contas. Vamos supor que a instância do EC2 exista na conta `111111111111`. Essa instância inclui a função de perfil da instância `abcd` que permite que a aplicação execute tarefas somente leitura do Amazon S3 no bucket `amzn-s3-demo-bucket1` dentro da mesma conta `111111111111`. No entanto, o aplicativo também deve ter permissão para assumir a função entre contas `efgh` para executar tarefas na conta `222222222222`. Para fazer isso, a função de perfil de instância do EC2 `abcd` deve ter a seguinte política de permissões:

***Política de permissões da função `abcd` da conta 111111111111***

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAccountLevelS3Actions",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowListAndReadS3ActionOnMyBucket",
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        },
        {
            "Sid": "AllowIPToAssumeCrossAccountRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::222222222222:role/efgh"
        }
    ]
}
```

------

Vamos supor que a função entre contas `efgh` permita tarefas somente leitura do Amazon S3 no bucket `amzn-s3-demo-bucket2` na mesma conta `222222222222`. Para fazer isso, a função entre contas `efgh` deve ter a seguinte política de permissões:

***Política de permissões da função `efgh` da conta 222222222222***

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAccountLevelS3Actions",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowListAndReadS3ActionOnMyBucket",
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket2/*",
                "arn:aws:s3:::amzn-s3-demo-bucket2"
            ]
        }
    ]
}
```

------

A função `efgh` deve permitir que a função do perfil de instância `abcd` a assuma. Para fazer isso, a função `efgh` deve ter a seguinte política de confiança:

***Política de confiança da função `efgh` da conta 222222222222***

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "efghTrustPolicy",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"}
        }
    ]
}
```

------

Para executar comandos da AWS CLI na conta `222222222222`, você deve atualizar o arquivo de configuração da CLI. Identifique a função `efgh` como "perfil" e a função do perfil de instância do EC2 `abcd` como a “fonte de credencial” no arquivo de configuração da AWS CLI. Os comandos da CLI são executados com as permissões da função `efgh`, e não a função `abcd` original.

**nota**  
Para fins de segurança, você pode usar o AWS CloudTrail para auditar o uso de funções na conta. Para diferenciar sessões de função quando uma função é usada por diferentes entidades de segurança nos logs do CloudTrail, use o nome da sessão da função. Quando a AWS CLI assume uma função em nome de um usuário, como descrito neste tópico, um nome de sessão da função é automaticamente criado como `AWS-CLI-session-nnnnnnnn`. O valor *nnnnnnnn* é um número inteiro que representa o tempo no formato de [horário epoch Unix](http://wikipedia.org/wiki/Unix_time) (o número de segundos desde a meia-noite de 1º de janeiro de 1970, em UTC). Para obter mais informações, consulte [Referência de eventos do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/eventreference.html) no *Guia do usuário do AWS CloudTrail*.

**Para permitir que uma função de perfil de instância do EC2 alterne para uma função entre contas (AWS CLI)**

1. Você não precisa configurar um perfil de CLI padrão. Em vez disso, você pode carregar credenciais dos metadados de perfil da instância do EC2. Crie um novo perfil para a função no arquivo `.aws/config`. O exemplo a seguir cria um perfil `instancecrossaccount` que muda para a função `efgh` na conta `222222222222`. Quando esse perfil é invocado, a AWS CLI usa as credenciais dos metadados de perfil da instância do EC2 para solicitar credenciais para a função. Por isso, a função de perfil de instância do EC2 deve ter permissões `sts:AssumeRole` para a função especificada no `role_arn`.

   ```
   [profile instancecrossaccount]
   role_arn = arn:aws:iam::222222222222:role/efgh
   credential_source = Ec2InstanceMetadata
   ```

1. Depois de criar o novo perfil, qualquer comando da AWS CLI que especifique o parâmetro `--profile instancecrossaccount` é executado sob as permissões anexadas à função `efgh` na conta `222222222222`.

   ```
   aws s3 ls amzn-s3-demo-bucket2 --profile instancecrossaccount
   ```

   Esse comando funciona se as permissões atribuídas ao perfil `efgh` permitem a listagem dos usuários na Conta da AWS atual.

1. Para retornar para as permissões originais do perfil de instância do EC2 na conta `111111111111`, execute os comandos da CLI sem o parâmetro `--profile`.

Para obter mais informações, consulte [Assumir uma função](https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html) no *Guia do usuário do AWS Command Line Interface*.