Como faço para assumir um perfil do IAM usando a AWS CLI?

8 minuto de leitura
0

Quero assumir um perfil do AWS Identity and Access Management (IAM) usando a AWS Command Line Interface (AWS CLI).

Resolução

Para assumir um perfil do IAM usando a AWS CLI e ter acesso somente para leitura às instâncias do Amazon Elastic Compute Cloud (Amazon EC2), faça o seguinte:

Observação: se você receber erros ao executar comandos da AWS CLI, confirme que está executando uma versão recente da AWS CLI.

Importante: a execução dos comandos nas etapas a seguir mostra suas credenciais, como senhas, em texto sem formatação. Depois de assumir o perfil do IAM, é uma prática recomendada alterar suas senhas.

Criar um usuário do IAM com permissões para assumir perfis

1.    Crie um usuário do IAM usando a AWS CLI usando o seguinte comando:

Observação: substitua Bob pelo seu nome de usuário do IAM.

aws iam create-user --user-name Bob

2.    Crie a política do IAM que concede as permissões a Bob usando a AWS CLI. Crie o arquivo JSON que define a política do IAM usando seu editor de texto favorito. Por exemplo, você pode usar o vim, um editor de texto comumente usado no Linux, da seguinte forma:

Observação: substitua o exemplo por seu próprio nome de política, nome de usuário, perfil, nome do arquivo JSON, nome do perfil e chaves.

vim example-policy.json

3.    O conteúdo do arquivo example-policy.json é semelhante ao seguinte:

{
  "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 Criação de políticas de IAM, Exemplos de políticas baseadas em identidade do IAM e Referência de políticas de IAM JSON.

Criar a política do IAM

1.    Use o seguinte comando aws iam create-policy:

aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

O comando aws iam create-policy gera várias informações, incluindo o ARN (nome de recurso da Amazon) da política do IAM da seguinte forma:

arn:aws:iam::123456789012:policy/example-policy

Observação: substitua 123456789012 por sua própria conta.

2.    Observe o ARN da política do IAM na saída e anexe a política Bob usando o comando attach-user-policy. Em seguida, verifique se o anexo está no lugar usando 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

1.    Crie o arquivo JSON que define a relação de confiança da seguinte forma:

vim example-role-trust-policy.json

2.    O conteúdo do arquivo example-role-trust-policy.json é semelhante ao seguinte:

{
  "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. Você pode fazer isso especificando entidades principais semelhantes a arn:aws:iam::123456789012:user/example-username. Para obter mais informações, consulte Elementos de política JSON do IAM: 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 para leitura às instâncias do Amazon Relational Database Service (Amazon RDS). Como o perfil do IAM está sendo assumido por um usuário 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 assumam esse perfil. Para obter mais informações, consulte Criação de um perfil para delegar permissões a um usuário do IAM.

1.    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 de acordo com o arquivo JSON que você criou na seção anterior. 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. Veja os seguintes exemplos de 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 a example-role.

2.    Crie chaves de acesso para Bob com o seguinte comando:

aws iam create-access-key --user-name Bob

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

1.    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

1.    Execute o comando aws sts get-caller-identity da seguinte forma:

aws sts get-caller-identity

O comando aws sts get-caller-identity gera três informações, incluindo o ARN. A saída mostra algo semelhante a arn:aws:iam::123456789012:user/Bob para verificar se os comandos da AWS CLI são invocados como Bob.

2.    Confirme se o usuário do IAM tem acesso somente para leitura às instâncias do EC2 e nenhum acesso às instâncias de banco de dados do Amazon RDS executando os seguintes comandos:

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 deve mostrar todas as instâncias do EC2 que estão na região eu-west-1. O comando aws rds describe-db-instances deve gerar uma mensagem de erro de acesso negado, porque Bob não tem acesso ao Amazon RDS.

Assuma o perfil do IAM

Execute uma das ações a seguir:

Use um perfil do IAM criando um perfil no arquivo ~/.aws/config. Para obter mais informações, consulte Como usar um perfil do IAM na AWS CLI.

-ou-

Assuma o perfil do IAM fazendo o seguinte:

1.    Obtenha o ARN do perfil executando o seguinte comando:

aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"

2.    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

O comando AWS CLI gera 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 usando o parâmetro DurationSeconds.

Criar variáveis de ambiente para assumir o perfil do IAM e verificar o acesso

1.    Crie três variáveis de ambiente para assumir o perfil do IAM. Essas variáveis de ambiente são preenchidas com 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.

2.    Verifique se você assumiu o perfil do IAM executando o seguinte comando:

aws sts get-caller-identity

O comando AWS CLI deve gerar o ARN como arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session em vez de arn:aws:iam::123456789012:user/Bob para verificar se você assumiu a example-role.

3.    Verifique 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 usando os seguintes comandos:

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 deve gerar uma mensagem de erro de acesso negado. O comando aws rds describe-db-instances deve retornar as instâncias de banco de dados do Amazon RDS. Isso verifica se as permissões atribuídas ao perfil do IAM estão funcionando corretamente.

4.    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

Perfis, termos e conceitos

create-role

Como criar um perfil para delegar permissões a um serviço da AWS