Funções do IAM para Amazon EC2 - Amazon Elastic Compute Cloud

Funções do IAM para Amazon EC2

As aplicações devem assinar suas solicitações de API com as credenciais da AWS. Portanto, se você for um desenvolvedor de aplicações, precisará de uma estratégia para gerenciar credenciais para suas aplicações que executam em instâncias do EC2. Por exemplo, você pode distribuir de maneira segura suas credenciais da AWS para as instâncias, permitindo que as aplicações nessas instâncias usem suas credenciais para assinar solicitações, enquanto protege suas credenciais de outros usuários. Contudo, é um desafio distribuir credenciais para cada instância de maneira segura, especialmente aquelas que a AWS cria em seu nome, como instâncias Spot ou instâncias em grupos do Auto Scaling. Você também deve poder atualizar as credenciais em cada instância quando alterna suas credenciais da AWS.

Projetamos funções do IAM para que suas aplicações possam fazer solicitações de API de suas instâncias de maneira segura, sem exigir que você gerencie as credenciais de segurança que as aplicações usam. Em vez de criar e distribuir suas credenciais da AWS, você pode delegar permissão para fazer solicitações de API usando funções do IAM da seguinte forma:

  1. Crie uma função do IAM.

  2. Defina quais contas ou serviços da AWS podem assumir a função.

  3. Defina quais ações e recursos de API a aplicação pode usar depois de assumir a função.

  4. Especifique a função quando você executar a instância ou anexe a função a uma instância existente.

  5. Faça com que a aplicação recupere um conjunto de credenciais temporárias e use-as.

Por exemplo, você pode usar funções do IAM para conceder permissões a aplicações em execução em suas instâncias que precisam usar um bucket no Amazon S3. Você pode especificar permissões para funções do IAM criando uma política em formato JSON. Essas são semelhantes às políticas que você cria para os usuários do IAM. Se você alterar uma função, a alteração será propagada para todas as instâncias.

Ao criar funções do IAM, associe políticas do IAM de privilégio mínimo que restringem o acesso às chamadas de API específicas exigidas pela aplicação.

Você só pode anexar uma função do IAM a uma instância, mas pode anexar a mesma função a muitas instâncias. Para obter mais informações sobre como criar e usar funções do IAM, consulte Funções no Guia do usuário do IAM.

Você pode aplicar permissões em nível de recurso às políticas do IAM para controlar a capacidade de anexar, substituir ou desanexar funções do IAM de uma instância. Para obter mais informações, consulte Permissões no nível do recurso com suporte para ações de API do Amazon EC2 e o seguinte exemplo: Exemplo: trabalhar com funções do IAM.

Perfis de instância

O Amazon EC2 usa um perfil de instância como um contêiner para uma função do IAM. Se você criar uma função do IAM usando o console do IAM o console criará automaticamente um perfil de instância e dará a ele o mesmo nome da função correspondente. Se você usar o console do Amazon EC2 para executar uma instância com uma função do IAM ou anexar uma função do IAM a uma instância, deve escolher a função com base em uma lista de nomes de perfis de instância.

Se você usar a AWS CLI, a API ou um AWS SDK para criar uma função, você cria a função e o perfil da instância como ações separadas, com nomes potencialmente diferentes. Se você usar a AWS CLI, a API ou o AWS SDK para iniciar uma instância com uma função do IAM ou para anexar uma função do IAM a uma instância, especifique o nome do perfil da instância.

Um perfil de instância pode conter somente uma função do IAM. Este limite não pode ser aumentado.

Para obter mais informações, consulte Perfis de instâncias no Guia do usuário do IAM.

Recuperar credenciais de segurança dos metadados da instância

Uma aplicação na instância recupera as credenciais de segurança fornecidas pela função no item iam/security-credentials/role-name dos metadados da instância. A aplicação recebe as permissões para as ações e recursos que você definiu para a função por meio das credenciais de segurança associadas à função. Essas credenciais de segurança são temporárias e são alternadas automaticamente. Tornamos novas credenciais disponíveis pelo menos cinco minutos antes da expiração das credenciais antigas.

Atenção

Se você usar serviços que usam os metadados da instância com funções do IAM, não exponha suas credenciais quando os serviços criarem chamadas HTTP em seu nome. Os tipos de serviços que podem expor suas credenciais incluem proxies HTTP, serviços de validação HTML/CSS e processadores XML que são compatíveis com a inclusão XML.

O comando a seguir recupera as credenciais de segurança para uma função do IAM denominada s3access.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

A seguir está um exemplo de saída.

{ "Code" : "Success", "LastUpdated" : "2012-04-26T16:39:16Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE", "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token" : "token", "Expiration" : "2017-05-17T15:09:54Z" }

Para comandos de aplicações, AWS CLI e Tools for Windows PowerShell que são executados na instância, não é necessário obter as credenciais de segurança temporárias explicitamente – os AWS SDKs, a AWS CLI e o Tools for Windows PowerShell obtêm automaticamente as credenciais do serviço de metadados da instância do EC2 e as usam. Para fazer uma chamada fora da instância usando credenciais de segurança temporárias (por exemplo, para testar as políticas do IAM), você deve fornecer a chave de acesso, a chave secreta e o token da sessão. Para obter mais informações, consulte Usar credenciais de segurança temporárias para solicitar acesso aos recursos da AWS no Manual do usuário do IAM.

Para obter mais informações sobre os metadados da instância, consulte Metadados da instância e dados do usuário. Para obter informações sobre o endereço IP dos metadados da instância, consulte Recuperar metadados da instância.

Conceder uma permissão de usuário do IAM para transmitir uma função do IAM para uma instância

Para permitir que um usuário do IAM inicie uma instância com uma função do IAM ou anexe ou substitua uma função do IAM em uma instância existente, você deve conceder ao usuário permissão para usar as seguintes ações de API.

  • iam:PassRole

  • ec2:AssociateIamInstanceProfile

  • ec2:ReplaceIamInstanceProfileAssociation

A política do IAM a seguir concede permissão aos usuários para iniciar instâncias com uma função do IAM ou para anexar ou substituir uma função do IAM em uma instância existente usando a AWS CLI.

nota

Se quiser que a política conceda aos usuários do IAM acesso a todas as suas funções, especifique o recurso como * na política. No entanto, avalie o princípio de privilégio mínimo como uma prática recomendada.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/DevTeam*" } ] }

Para conceder permissão aos usuários para iniciar instâncias com uma função do IAM ou para anexar ou substituir uma função do IAM para uma instância existente usando o console do Amazon EC2, você deve conceder-lhes permissão para usar iam:ListInstanceProfiles, iam:PassRole, ec2:AssociateIamInstanceProfile e ec2:ReplaceIamInstanceProfileAssociation, além de quaisquer outras permissões necessárias. Para obter exemplos de políticas do , consulte Políticas de exemplo para trabalhar no console do Amazon EC2.

Trabalhar com funções do IAM

Você pode criar uma função do IAM e anexá-la a uma instância durante ou depois da execução. Você também pode substituir ou desanexar uma função do IAM para uma instância.

Criar uma função do IAM

Você deve criar uma função do IAM para poder executar uma instância com essa função ou anexá-la a uma instância.

Para criar uma função do IAM usando o console do IAM

  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, escolha Roles e depois Create Role.

  3. Na página Select role type, escolha EC2 e o caso de uso EC2. Escolha Próximo: Permissões.

  4. Na página Attach permissions policy, selecione uma política gerenciada pela AWS que conceda às suas instâncias acesso aos recursos de que precisam.

  5. Na página Review (Revisão), insira um nome para a função e selecione Create role (Criar função).

Como alternativa, você pode usar a AWS CLI para criar uma função do IAM. O exemplo a seguir cria uma função do IAM com uma política que permite que a função use um bucket do Amazon S3.

Para criar uma função do IAM e um perfil de instância (AWS CLI)

  1. Crie a seguinte política de confiança e salve-a em um arquivo de texto chamado ec2-role-trust-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. Crie a função s3access e especifique a política de confiança que você criou usando o comando create-role.

    aws iam create-role \ --role-name s3access \ --assume-role-policy-document file://ec2-role-trust-policy.json

    Exemplo de resposta

    { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/s3access" } }
  3. Crie uma política de acesso e salve-a em um arquivo de texto chamado ec2-role-access-policy.json. Por exemplo, essa política concede permissões administrativas para o Amazon S3 a aplicações que executam na instância.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
  4. Anexe a política de acesso à função usando o comando put-role-policy.

    aws iam put-role-policy \ --role-name s3access \ --policy-name S3-Permissions \ --policy-document file://ec2-role-access-policy.json
  5. Crie um perfil de instância chamado s3access-profile usando o comando create-instance-profile.

    aws iam create-instance-profile --instance-profile-name s3access-profile

    Exemplo de resposta

    { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/s3access-profile" } }
  6. Adicione a função s3access ao perfil de instância s3access-profile.

    aws iam add-role-to-instance-profile \ --instance-profile-name s3access-profile \ --role-name s3access

Como alternativa, você pode usar os seguintes comandos do AWS Tools for Windows PowerShell:

Executar uma instância com uma função do IAM

Depois de criar uma função do IAM, você pode executar uma instância e associar essa função à instância durante a execução.

Importante

Depois de criar uma função do IAM, pode demorar vários segundos para as permissões serem propagadas. Se sua primeira tentativa de executar uma instância com uma função falhar, aguarde alguns segundos antes de tentar novamente. Para obter mais informações, consulte Como solucionar problemas ao trabalhar com funções no Guia do usuário do IAM.

Para executar uma instância com uma função do IAM (console)

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel, escolha Executar instância.

  3. Selecione um AMI e um tipo de instância e escolha Next: Configure Instance Details.

  4. Na página Configure Instance Details, para IAM role, selecione a função do IAM que você criou.

    nota

    A lista IAM role exibe o nome do perfil da instância que você criou ao criar a função do IAM. Se você tiver criado a função do IAM usando o console, o perfil da instância terá sido criado para você e recebido o mesmo nome da função. Se você tiver criado a função do IAM usando a AWS CLI, a API ou um SDK da AWS, você poderá ter dado um nome diferente para o perfil da instância.

  5. Configure todos os outros detalhes e siga as instruções no restante do assistente, ou escolha Review and Launch para aceitar as configurações padrão e vá diretamente para a página Review Instance Launch.

  6. Reveja as configurações e selecione Launch para escolher um par de chaves e executar a instância.

  7. Se você estiver usando as ações da API do Amazon EC2 em sua aplicação, recupere as credenciais de segurança da AWS disponibilizadas na instância e use-as para assinar as solicitações. O AWS SDK da cuida disso para você.

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

Como alternativa, você pode usar a AWS CLI para associar uma função a uma instância durante a execução. Você deve especificar o perfil da instância no comando.

Para iniciar uma instância com uma função do IAM (AWS CLI)

  1. Use o comando run-instances para executar uma instância usando o perfil da instância. O exemplo a seguir mostra como executar uma instância com o perfil da instância.

    aws ec2 run-instances \ --image-id ami-11aa22bb \ --iam-instance-profile Name="s3access-profile" \ --key-name my-key-pair \ --security-groups my-security-group \ --subnet-id subnet-1a2b3c4d

    Como alternativa, use o comando New-EC2Instance do Tools for Windows PowerShell.

  2. Se você estiver usando as ações da API do Amazon EC2 em sua aplicação, recupere as credenciais de segurança da AWS disponibilizadas na instância e use-as para assinar as solicitações. O AWS SDK da cuida disso para você.

    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

Anexar uma função do IAM a uma instância

Para anexar uma função do IAM a uma instância sem função, a instância pode estar no estado stopped ou running.

New console

Como anexar uma função do IAM a uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions (Ações), Security (Segurança), Modify IAM role (Modificar função do IAM).

  4. Selecione a função do IAM a ser anexada à instância e selecione Save (Salvar).

Old console

Como anexar uma função do IAM a uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions, Instance Settings, Attach/Replace IAM role.

  4. Selecione a função do IAM a ser anexada à instância e escolha Apply (Aplicar).

Para anexar uma função do IAM a uma instância (AWS CLI)

  1. Se necessário, descreva as instâncias para obter o ID da instância à qual anexar a função.

    aws ec2 describe-instances
  2. Use o comando associate-iam-instance-profile para anexar a função do IAM à instância especificando o perfil de instância. Você pode usar o Nome de recursos da Amazon (ARN) do perfil da instância ou o seu nome.

    aws ec2 associate-iam-instance-profile \ --instance-id i-1234567890abcdef0 \ --iam-instance-profile Name="TestRole-1"

    Exemplo de resposta

    { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

Como alternativa, use os seguintes comandos do Tools for Windows PowerShell:

Substituir uma função do IAM

Para substituir a função do IAM em uma instância que já tenha uma função do IAM anexa, a instância deve estar no estado running. Você poderá fazer isso se quiser alterar a função do IAM de uma instância sem desanexar a existente primeiro. Por exemplo, você pode fazer isso para garantir que as ações de API desempenhadas por aplicações executadas na instância não sejam interrompidas.

New console

Como substituir uma função do IAM para uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions (Ações), Security (Segurança), Modify IAM role (Modificar função do IAM).

  4. Selecione a função do IAM a ser anexada à instância e selecione Save (Salvar).

Old console

Como substituir uma função do IAM para uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions, Instance Settings, Attach/Replace IAM role.

  4. Selecione a função do IAM a ser anexada à instância e escolha Apply (Aplicar).

Para substituir uma função do IAM em uma instância (AWS CLI)

  1. Se necessário, descreva as associações do perfil da instância do IAM para obter o ID da associação do perfil da instância do IAM a ser substituído.

    aws ec2 describe-iam-instance-profile-associations
  2. Use o comando replace-iam-instance-profile-association para substituir o perfil de instância do IAM especificando o ID da associação do perfil da instância existente e o ARN ou o nome do perfil da instância que deve substituí-lo.

    aws ec2 replace-iam-instance-profile-association \ --association-id iip-assoc-0044d817db6c0a4ba \ --iam-instance-profile Name="TestRole-2"

    Exemplo de resposta

    { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

Como alternativa, use os seguintes comandos do Tools for Windows PowerShell:

Desanexar uma função do IAM

Você pode desanexar uma função do IAM de uma instância em execução ou parada.

New console

Como desanexar uma função do IAM de uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions (Ações), Security (Segurança), Modify IAM role (Modificar função do IAM).

  4. Em IAM role (Função do IAM), selecione No IAM Role (Nenhuma função do IAM). Escolha Save (Salvar).

  5. Na caixa de diálogo de confirmação, insira Detach (Desanexar) e selecione Detach (Desanexar).

Old console

Como desanexar uma função do IAM de uma instância

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância, escolha Actions, Instance Settings, Attach/Replace IAM role.

  4. Em IAM role, escolha No Role. Escolha Aplicar.

  5. Na caixa de diálogo de confirmação, escolha Sim, separar.

Para desanexar uma função do IAM de uma instância (AWS CLI)

  1. Se necessário, use describe-iam-instance-profile-associations para descrever as associações do perfil da instância do IAM e obter o ID da associação do perfil da instância do IAM a ser desanexado.

    aws ec2 describe-iam-instance-profile-associations

    Exemplo de resposta

    { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. Use o comando disassociate-iam-instance-profile para desanexar o perfil da instância do IAM usando o ID da associação.

    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba

    Exemplo de resposta

    { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

Como alternativa, use os seguintes comandos do Tools for Windows PowerShell:

Gerar uma política para sua função do IAM com base na atividade de acesso

Quando você cria uma função do IAM pela primeira vez para suas aplicações, às vezes você pode conceder permissões além do que é necessário. Antes de iniciar sua aplicação em seu ambiente de produção, você pode gerar uma política do IAM baseada na atividade de acesso para uma função do IAM. O IAM Access Analyzer revisa seus logs do AWS CloudTrail e gera um modelo de política que contém as permissões que foram usadas pela função no intervalo de datas especificado. Você pode usar o modelo para criar uma política gerenciada com permissões refinadas e anexá-la à função do IAM. Dessa forma, você concede apenas as permissões necessárias à interação com os recursos da AWS, de acordo com a especificidade do caso de uso. Isso ajuda você a aderir às melhores práticas de conceder privilégio mínimo. Para saber mais, consulte Gerar políticas com base na atividade de acesso no Guia do usuário do IAM.