Alternância para uma função do IAM (AWS CLI) - AWS Identity and Access Management

Alternância para uma função 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. A função 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 Funções do IAMe Criação de funções do IAM. Para saber mais sobre os diferentes métodos que você pode usar para assumir uma função, consulte Uso de funções do IAM.

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 uma função, perde temporariamente as permissões de usuário ou função anteriores e trabalha com as permissões atribuídas à função. 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 uma função quando estiver conectado como 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. Ao alternar funções no console, você não está usando o encadeamento de funções. Você está usando as permissões do usuário original.

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 a função. Para saber como visualizar o valor máximo para sua função, consulte Visualizar a configuração de duração máxima da sessão para uma função.

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. 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 um usuário federado, ele poderá ser o par de chaves de acesso para a função atribuída inicialmente 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 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 e sts:RoleSessionName.

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

  1. 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]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-2 Default output format [None]: json
  2. 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
  3. 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.

  4. 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 CLI em ambas as 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 my-bucket-1 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:::my-bucket-1/*", "arn:aws:s3:::my-bucket-1" ] }, { "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 my-bucket-2 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:::my-bucket-2/*", "arn:aws:s3:::my-bucket-2" ] } ] }

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-nnnnnnnn. O valor nnnnnnnn é um número inteiro que representa o tempo no formato de horário epoch Unix (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 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
  2. 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 my-bucket-2 --profile instancecrossaccount

    Esse comando funciona se as permissões atribuídas à função efgh permitem a listagem dos usuários na conta atual da AWS.

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