Como faço para assumir uma função do IAM usando a AWS CLI?

Data da última atualização: 11-05-2021

Quero assumir uma função do AWS Identity and Access Management (IAM) usando a AWS Command Line Interface (AWS CLI). Como posso fazer isso?

Resolução

Siga estas instruções para assumir uma função do IAM usando a AWS CLI. Neste exemplo, depois de seguir estas etapas, o usuário terá acesso somente leitura às instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e permissão para assumir uma função do IAM.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Crie um usuário do IAM que tenha permissões para assumir funções

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

Observação: substituaBob pelo nome do 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. Você deve criar o arquivo JSON que define a política do IAM usando o editor de texto que preferir. Este exemplo usa o Vim, que é comumente usado no Linux:

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

vim example-policy.json

3.    O conteúdo do arquivo example-policy.json deve ser semelhante a este:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "iam:ListRoles",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

Para obter mais informações sobre a criação de políticas do IAM, consulte Criar políticas do IAM, Exemplo de políticas baseadas em identidade do IAM e Referência de política JSON do IAM.

Crie a política do IAM

1.    Use o 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 nome do recurso da Amazon (ARN) da política do IAM:

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

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

2.    Observe o ARN da política do IAM da saída e associe a política a Bob usando o comando attach-user-policy. Em seguida, verifique se a associação está em vigor usando list-attached-user-policies:

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

Crie o arquivo JSON que define a relação de confiança da função do IAM

1.    Crie o arquivo JSON que define a relação de confiança:
vim example-role-trust-policy.json

2.    O conteúdo do arquivo example-role-trust-policy.json deve ser semelhante a este:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
        "Action": "sts:AssumeRole"
    }
}

Você também pode restringir a relação de confiança para que a função do IAM possa ser assumida apenas por usuários do IAM específicos. Você pode fazer isso especificando entidades semelhantes a arn:aws:iam::123456789012:user/example-username. Para obter mais informações, consulte Elementos da política JSON da AWS: entidade.

Crie a função do IAM e anexe a política

Crie uma função do IAM que possa ser assumida por Bob e que tenha acesso somente leitura às instâncias do Amazon Relational Database Service (Amazon RDS). Como essa função do IAM é assumida por um usuário do IAM, você deve especificar uma entidade que permita aos usuários do IAM assumir essa função. Por exemplo, uma entidade semelhante a arn:aws:iam::123456789012:root permite que todas as identidades do IAM da conta assumam essa função. Para obter mais informações, consulte Criar uma função para delegar permissões a um usuário do IAM.

1.    Crie a função do IAM que tem acesso somente leitura às instâncias de banco de dados do Amazon RDS. Anexe as políticas do IAM à sua função do IAM de acordo com seus requisitos de segurança.

O comando aws iam create-role cria a função do IAM e define a relação de confiança de acordo com o conteúdo do arquivo JSON. O comando aws iam attach-role-policy anexa a política gerenciada da AWS à função AmazonRDSReadOnlyAccess. 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 são anexadas à função example-role do IAM.

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 leitura às instâncias do EC2 e é capaz de assumir a função example-role.

2.    Crie chaves de acesso para Bob com este comando:

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

O comando da AWS CLI gera um ID da chave de acesso e uma chave de acesso secreta. Certifique-se de observar essas chaves.

Configure 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:

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: para Default region name (Nome da região padrão), especifique a sua Região AWS.

Verifique se os comandos da AWS CLI são chamados e, em seguida, verifique o acesso do usuário do IAM

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

aws sts get-caller-identity

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

2.    Confirme se o usuário do IAM tem acesso somente leitura às instâncias do EC2 e nenhum acesso às instâncias de banco de dados do Amazon RDS executando estes 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 a função do IAM

Execute uma das seguintes ações:

Use uma função do IAM criando um perfil no arquivo ~/.aws/config. Para obter mais informações, consulte Usar uma função do IAM na AWS CLI..

-ou-

Siga estas etapas para assumir a função do IAM.

1.    Obtenha o ARN da função executando este comando:

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

2.    O comando lista as funções do IAM, mas filtra a saída por nome da função. Para assumir a função do IAM, execute este comando:

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

O comando da AWS CLI gera várias informações. Dentro do bloco de credenciais, você precisa de AccessKeyId, SecretAccessKey e SessionToken. Este exemplo usa as variáveis ​​de ambiente RoleAccessKeyID, RoleSecretKey e RoleSessionToken. Observe o carimbo de data/hora do campo de validade, que está no fuso horário UTC e indica quando as credenciais temporárias da função do IAM vão expirar. Se as credenciais temporárias tiverem expirado, você deverá recorrer à chamada de API sts:AssumeRole novamente.

Observação: você pode aumentar a validade da duração máxima da sessão para credenciais temporárias de funções do IAM usando o parâmetro DurationSeconds.

Crie variáveis ​​de ambiente para assumir a função do IAM e verificar o acesso

1.    Crie três variáveis ​​de ambiente para assumir a função do IAM. Essas variáveis ​​de ambiente são preenchidas com esta saída:

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

2.    Verifique se você assumiu a função do IAM executando este comando:

aws sts get-caller-identity

O comando da 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, que verifica se você assumiu a função example-role.

3.    Você criou uma função do IAM com acesso somente leitura às instâncias de banco de dados do Amazon RDS, mas sem acesso às instâncias do EC2. Verifique executando estes 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 e 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 à função do IAM estão funcionando corretamente.

4.    Para retornar ao usuário do IAM, remova as variáveis ​​de ambiente:

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.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?