Alterar para uma perfil do IAM (AWS CLI)
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 (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 e Criar um perfil do IAM. Para saber mais sobre os diferentes métodos que você pode usar para assumir uma função, consulte Métodos para assumir um perfil.
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 uma função para executar um comando da AWS CLI quando estiver conectado como um usuário autenticado externamente (SAML ou OIDC) que já esteja usando uma função. 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: 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.
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
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
nota
Por motivos de segurança, os administradores podem revisar logs do AWS CloudTrail 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 ter mais informações, consulte sts:SourceIdentity e sts:RoleSessionName.
Para alternar para uma função de produção (AWS CLI)
-
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 no Guia do usuário da AWS Command Line Interface.
Execute o comando aws configure da seguinte forma:
aws configure
Quando solicitado, forneça as seguintes informações:
AWS Access Key ID [None]:
AWS Secret Access Key [None]:AKIAIOSFODNN7EXAMPLE
Default region name [None]:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default output format [None]:us-east-2
json
-
Crie um novo perfil para a função no arquivo
.aws/config
no Unix ou Linux ou o arquivoC:\Users\USERNAME\.aws\config
no Windows. O exemplo a seguir cria um perfil chamadoprodaccess
que muda para a função
na contaProductionAccessRole
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 dosource_profile
para solicitar credenciais para a função. Por isso, a identidade mencionada comosource_profile
deve tersts:AssumeRole
permissões para a função especificada norole_arn
.[profile prodaccess] role_arn = arn:aws:iam::
123456789012
:role/ProductionAccessRole source_profile = default -
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çãoProductionAccessRole
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. -
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 Passo 1.
Para obter mais informações, consulte Assumir uma função 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
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 CLI111111111111
. 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
{ "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
{ "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
{ "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-
. O valor nnnnnnnn
nnnnnnnn
é um número inteiro que representa o tempo no formato de horário epoch Unix
Para permitir que uma função de perfil de instância do EC2 alterne para uma função entre contas (AWS CLI)
-
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 perfilinstancecrossaccount
que muda para a função
na contaefgh
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õessts:AssumeRole
para a função especificada norole_arn
.[profile instancecrossaccount] role_arn = arn:aws:iam::
222222222222
:role/efgh credential_source = Ec2InstanceMetadata -
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çãoefgh
na conta222222222222
.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. -
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 no Guia do usuário do AWS Command Line Interface.