Como faço para assumir um perfil do IAM usando a AWS CLI?
Quero usar a AWS Command Line Interface (AWS CLI) para assumir um perfil do AWS Identity and Access Management (IAM).
Resolução
Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Para usar a AWS CLI para assumir um perfil do IAM com acesso somente leitura às instâncias do Amazon Elastic Compute Cloud (Amazon EC2), faça o seguinte.
Importante: suas credenciais, como senhas, ficam visíveis em texto sem formatação quando executa os comandos nas etapas a seguir. É uma prática recomendada alterar suas senhas depois de assumir o perfil do IAM.
Criar um usuário do IAM com permissões para assumir perfis
- Crie um usuário do IAM a partir da AWS CLI com o seguinte comando:
Observação: substitua Bob pelo nome de usuário do IAM - Crie a política do IAM que concede as permissões ao usuário Bob. Para isso, use um editor de texto da sua escolha para criar o arquivo JSON que define a política do IAM. Você pode usar o seguinte exemplo de JSON, example-policy.json, como modelo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "iam:ListRoles", "sts:AssumeRole" ], "Resource": "*" } ] }
Para obter mais informações sobre como criar políticas de IAM, consulte Criar políticas do IAM, Exemplos de políticas baseadas em identidade do IAM e Referência de política JSON do IAM.
Criar a política do IAM
Para criar sua política do IAM, realize as seguintes etapas:
- Execute o seguinte comando aws iam create-policy:
O comando aws iam create-policy gera várias informações, incluindo o ARN (nome do recurso da Amazon) da política do IAM da seguinte forma:aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
Observação: substitua 123456789012 pelo ID da sua própria conta.arn:aws:iam::123456789012:policy/example-policy
- Observe o ARN da política do IAM na saída e anexe a política Bob com o comando attach-user-policy. Em seguida, verifique se o anexo está no lugar com o comando list-attached-user-policies da seguinte forma:
aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy" aws iam list-attached-user-policies --user-name Bob
Criar o arquivo JSON que define a relação de confiança do perfil do IAM
Use um editor de texto para criar um arquivo JSON que defina a relação de confiança. Você pode usar a seguinte política de confiança como exemplo:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Action": "sts:AssumeRole" } }
Essa política de confiança permite que usuários e funções da conta 123456789012 assumam esse perfil se permitirem a ação sts:AssumeRole em sua política de permissões. Você também pode restringir a relação de confiança para que o perfil do IAM possa ser assumido somente por usuários específicos do IAM. Para isso, especifique entidades principais semelhantes a arn:aws:iam::123456789012:user/example-username. Para mais informações, consulte Elementos de política JSON da AWS: entidade principal.
Criar o perfil do IAM e anexe a política
Crie um perfil do IAM que possa ser assumido por Bob que tenha acesso somente leitura às instâncias do Amazon Relational Database Service (Amazon RDS). Para permitir que um usuário do IAM assuma um perfil do IAM, você deve especificar uma entidade principal que permita que os usuários do IAM assumam esse perfil. Por exemplo, uma entidade principal semelhante a arn:aws:iam::123456789012:root permite que todas as identidades IAM da conta 123456789012 assumam esse perfil. Para obter mais informações, consulte Criar um perfil para delegar permissões a um usuário do IAM.
-
Crie o perfil do IAM que tenha acesso somente para leitura às instâncias de banco de dados do Amazon RDS. Anexe as políticas do IAM a seu perfil do IAM de acordo com seus requisitos de segurança.
O comando aws iam create-role cria o perfil do IAM e define a relação de confiança especificada no arquivo JSON que você criou. O comando aws iam attach-role-policy anexa a política gerenciada pela AWS AmazonRDSReadOnlyAccess ao perfil. Você pode anexar políticas diferentes (políticas gerenciadas e políticas personalizadas) de acordo com seus requisitos de segurança. O comando aws iam list-attached-role-policies mostra as políticas do IAM que estão anexadas ao perfil do IAM example-role. Por exemplo, execute os seguintes comandos:
aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess" aws iam list-attached-role-policies --role-name example-role
Observação: verifique se Bob tem acesso somente para leitura às instâncias do EC2 e pode assumir o example-role.
-
Crie chaves de acesso para Bob com o seguinte comando:
aws iam create-access-key --user-name Bob
Importante: o comando AWS CLI gera um ID de chave de acesso e uma chave de acesso secreta. Certifique-se de anotar essas chaves.
Configurar as chaves de acesso
Para configurar as chaves de acesso, use o perfil padrão ou um perfil específico. Para configurar o perfil padrão, execute aws configure. Para criar um novo perfil específico, execute aws configure --profile example_-_profile-name. Neste exemplo, o perfil padrão é configurado da seguinte forma:
aws configure AWS Access Key ID [None]: ExampleAccessKeyID1 AWS Secret Access Key [None]: ExampleSecretKey1 Default region name [None]: eu-west-1 Default output format [None]: json
Observação: em Nome de região padrão, especifique sua região da AWS.
Verificar se os comandos do AWS CLI foram invocados e, em seguida, verifique o acesso do usuário do IAM
Conclua as seguintes etapas:
-
Execute o comando aws sts get-caller-identity da seguinte forma:
aws sts get-caller-identity
A saída do comando aws sts get-caller-identity inclui o ARN. Para verificar se os comandos da AWS CLI são invocados como Bob, verifique se a saída inclui algo semelhante a arn:aws:iam::123456789012:user/Bob.
-
Execute os seguintes comandos para confirmar se o usuário do IAM tem acesso somente para leitura às instâncias do EC2 e não tem acesso às instâncias de banco de dados do Amazon RDS:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
O comando aws ec2 describe-instances mostra todas as instâncias do EC2 que estão na região eu-west-1. O comando aws rds describe-db-instances gera uma mensagem de erro de acesso negado, porque Bob não tem acesso ao Amazon RDS.
Assumir o perfil do IAM
Execute uma das ações a seguir:
Crie um perfil no arquivo ~/.aws/config para usar um perfil do IAM. Para obter mais informações, consulte Usar um perfil do IAM na AWS CLI.
-ou-
Execute os seguintes comandos para assumir o perfil do IAM:
-
Obtenha o ARN do perfil com o seguinte comando:
aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
-
O comando lista os perfis do IAM, mas filtra a saída pelo nome do perfil. Para assumir o perfil do IAM, execute o seguinte comando:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
Esses comandos geram várias informações. Dentro do bloco de credenciais, você precisa do AccessKeyId, SecretAccessKey e SessionToken. Este exemplo usa as variáveis de ambiente RoleAccessKeyID, RoleSecretKey e RoleSessionToken. Observe que o carimbo de data/hora do campo de expiração está no fuso horário UTC. O carimbo de data/hora indica quando as credenciais temporárias do perfil do IAM expiram. Se as credenciais temporárias expirarem, você deverá invocar a chamada de API sts:AssumeRole novamente.
Observação: Você pode aumentar a expiração máxima da duração da sessão para credenciais temporárias para perfis do IAM com o parâmetro DurationSeconds.
Criar variáveis de ambiente para assumir o perfil do IAM e verificar o acesso
-
Crie três variáveis de ambiente para assumir o perfil do IAM. Essas variáveis de ambiente incluem a seguinte saída:
export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken
Observação: para sistemas Windows, substitua export por set neste comando.
-
Execute o comando a seguir para verificar se assumiu o perfil do IAM:
aws sts get-caller-identity
Se você assumir o comando AWS CLI deve gerar o ARN como example-role, o comando da AWS CLI irá gerar o ARN como arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session ao invés de arn:aws:iam::123456789012:user/Bob.
-
Execute os seguintes comandos para verificar se você criou um perfil do IAM com acesso somente para leitura às instâncias de banco de dados do Amazon RDS e sem acesso às instâncias do EC2:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
O comando aws ec2 describe-instances gera uma mensagem de erro de acesso negado. O comando aws rds describe-db-instances retorna as instâncias de banco de dados do Amazon RDS. Isso verifica se as permissões atribuídas ao perfil do IAM funcionam corretamente.
-
Para retornar ao usuário do IAM, remova as variáveis de ambiente da seguinte forma:
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN aws sts get-caller-identity
O comando unset remove as variáveis de ambiente e o comando aws sts get-caller-identity verifica se você retornou como o usuário do IAM Bob.
Observação: para sistemas Windows, defina as variáveis ambientais como strings vazias para limpar seu conteúdo da seguinte forma:
SET AWS_ACCESS_KEY_ID= SET AWS_SECRET_ACCESS_KEY= SET AWS_SESSION_TOKEN=
Informações relacionadas
Como criar um perfil para delegar permissões a um serviço da AWS
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 7 meses
- AWS OFICIALAtualizada há 3 anos