Utilizar um IAM função para conceder permissões às aplicações em execução Amazon EC2 instâncias - AWS Identity and Access Management

Se fornecermos uma tradução da versão em inglês do guia, a versão em inglês prevalecerá caso haja qualquer conflito entre as versões. A tradução é fornecida com o uso de tradução por máquina.

Utilizar um IAM função para conceder permissões às aplicações em execução Amazon EC2 instâncias

Os aplicativos que são executados na instância do EC2 devem incluir credenciais da AWS em suas solicitações da API da AWS. Você poderia fazer com que os desenvolvedores armazenassem as credenciais da AWS diretamente na instância do EC2 e permitissem que os aplicativos nessa instância usassem essas credenciais. No entanto, os desenvolvedores teriam que gerenciar as credenciais e garantir que elas fossem transmitidas com segurança as credenciais para cada instância e atualizassem cada instância do EC2 na hora certa para fazer a rotação das credenciais. Isso é muito trabalho adicional.

Em vez disso, você pode e deve usar uma função do IAM para gerenciar temporariamente as credenciais para os aplicativos que são executados em uma instância do EC2. Quando você usa uma função, não precisa distribuir credenciais de longo prazo (como um nome de usuário e uma senha ou chaves de acesso) para uma instância do EC2. Em vez disso, a função fornece permissões temporárias que os aplicativos podem usar ao fazer chamadas para outros recursos da AWS. Quando executa uma instância do EC2, você especifica uma função do IAM para associar à instância. Os aplicativos que são executados na instância, por sua vez, usam as credenciais temporárias fornecidas pela função para assinar solicitações da API.

Usar funções para conceder permissões para aplicativos que são executados em instâncias do EC2 exige configuração extra. Um aplicativo em execução em uma instância do EC2 é abstraído da AWS pelo sistema operacional virtualizado. Devido a essa separação, uma etapa adicional é necessária para atribuir uma função da AWS e suas permissões associadas a uma instância do EC2 e torná-las disponíveis para seus aplicativos. Essa etapa adicional é a criação de um perfil da instância que está anexado à instância. O perfil da instância contém a função e pode fornecer as credenciais temporárias da função para um aplicativo que é executado na instância. Essas credenciais temporárias podem ser usadas em chamadas da API do aplicativo para acessar recursos e limitar o acesso apenas aos recursos que a função especifica. Observe que apenas uma função pode ser atribuída a uma instância do EC2 por vez, e todos os aplicativos na instância compartilham a mesma função e permissões.

Usar funções dessa forma tem vários benefícios. Como as credenciais de função são temporárias e alteradas automaticamente, não é necessário gerenciar credenciais, e você não precisa se preocupar com os riscos de segurança de longo prazo. Além disso, se você usar uma única função para várias instâncias, você pode fazer uma alteração para essa função e a alteração é propagada automaticamente para todas as instâncias.

nota

Embora uma função geralmente seja atribuída a uma instância do EC2 quando você a executa, uma função também pode ser anexada a uma instância do EC2 que já esteja em execução. Para saber como anexar uma função a uma instância em execução, consulte Funções do IAM do Amazon EC2.

Como funcionam as funções para instâncias EC2?

Na figura seguinte, um programador executa uma aplicação numa instância EC2 que requer acesso ao conjunto S3 nomeado photos. Um administrador cria o Get-pics função de serviço e anexa a função à instância EC2. A função inclui uma política de permissões que concede acesso somente leitura ao bucket do S3 especificado. Ele também inclui uma política de confiança que permite que a instância do EC2 assuma a função e recupere as credenciais temporárias. Quando o aplicativo é executado na instância, ele pode usar as credenciais temporárias da função para acessar o bucket de fotos. O administrador não precisa conceder ao desenvolvedor permissão para acessar o bucket de fotos, e o desenvolvedor nunca precisa compartilhar nem gerenciar as credenciais.


        Aplicativo em uma instância do EC2 acessando um recurso da AWS
  1. O administrador usa o IAM para criar a função Get-pics. Na política de confiança da função, o administrador especifica que apenas as instâncias do EC2 podem assumir a função. Na política de permissões da função, o administrador especifica a permissão somente leitura para o bucket de photos.

  2. Um desenvolvedor executa uma instância do EC2 e atribui a função Get-pics para essa instância.

    nota

    Se você usar o console do IAM, o perfil da instância será gerenciado para você e, sobretudo, será transparente para você. No entanto, se você usar a AWS CLI ou a API para criar e gerenciar a função e a instância do EC2, será necessário criar o perfil da instância e atribuir a função a ele em etapas separadas. Assim, quando você executar a instância, será necessário especificar o nome de perfil da instância em vez do nome da função.

  3. Quando o aplicativo é executado, ele obtém as credenciais de segurança temporárias nos metadados da instância do Amazon EC2, conforme descrito em Recuperação de credenciais de segurança de metadados da instância. Essas são as credenciais de segurança temporárias que representam a função e são válidas por um período limitado.

    Com alguns SDKs da AWS, o desenvolvedor pode usar um provedor que gerencia as credenciais de segurança temporárias de forma transparente. (A documentação para SDKs individuais da AWS descreve os recursos suportados pelo SDK para o gerenciamento de credenciais.)

    Como alternativa, o aplicativo pode obter as credenciais temporárias diretamente dos metadados da instância do EC2. Credenciais e valores relacionados estão disponíveis na iam/security-credentials/role-name categoria (nesse caso, iam/security-credentials/Get-pics) dos metadados. Se o aplicativo obtiver as credenciais dos metadados da instância, ele poderá armazenar as credenciais em cache.

  4. Ao usar as credenciais temporárias recuperadas, o aplicativo acessa o bucket de fotos. Devido a política anexada à função Get-pics, o aplicativo tem permissões somente leitura.

    As credenciais de segurança temporárias que estão disponíveis na instância são automaticamente mudadas antes que expirem, de forma que um conjunto válido esteja sempre disponível. O aplicativo só precisa se certificar de receber um novo conjunto de credenciais dos metadados da instância antes que as atuais expirem. Se o SDK da AWS gerenciar as credenciais, o aplicativo não precisará incluir lógica adicional para atualizar as credenciais. No entanto, se o aplicativo receber credenciais de segurança temporárias dos metadados da instância e os tiver armazenados em cache, ele deverá obter um conjunto de credenciais atualizadas a cada hora, ou pelo menos 15 minutos antes de o conjunto atual expirar. O tempo de expiração está incluído na informações que são retornadas na categoria iam/security-credentials/role-name.

Permissões necessárias para utilizar funções com Amazon EC2

Para executar uma instância com uma função, o desenvolvedor deve ter permissão para executar instâncias do EC2 e para transmitir funções do IAM.

A política de exemplo a seguir permite que os usuários usem o Console de gerenciamento da AWS para executar uma instância com uma função. A política inclui caracteres curinga (*) para permitir que um usuário transmita qualquer função e execute todas as ações do Amazon EC2. A ação ListInstanceProfiles permite que os usuários visualizem todas as funções que estão disponíveis na conta da AWS.

exemplo Política de exemplo que concede autorização ao utilizador para utilizar o Amazon EC2 para iniciar uma instância com qualquer função

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }] }

Restringir quais as funções que podem ser passadas para instâncias EC2 (utilizando a função de transferência)

Use a permissão PassRole para restringir quais funções um usuário pode transmitir a uma instância do EC2 quando o usuário executa a instância. Isso ajuda a evitar que o usuário execute aplicativos que tenham mais permissões do que o usuário recebeu — ou seja, de poder obter privilégios elevados. Por exemplo, imagine que a usuária Alice tenha permissões apenas para ativar as instâncias do EC2 e trabalhar com os buckets do Amazon S3, mas a função que ela transmite para uma instância do EC2 tem permissão para trabalhar com o IAM e com o Amazon DynamoDB. Nesse caso, a Alice pode ser capaz de ativar a instância, fazer login, obter credenciais de segurança temporárias e então executar as ações do IAM ou do DynamoDB para as quais ela não tem autorização.

Para restringir quais funções um usuário pode transmitir para uma instância do EC2, crie uma política que permita a ação PassRole. Em seguida, anexe a política ao usuário (ou a um grupo do IAM a qual pertence o usuário) que executará as instâncias do EC2. No elemento Resource da política, liste a função ou funções que o usuário tem permissão para transmitir para instâncias do EC2. Quando o usuário executa uma instância e associa uma função a ela, o Amazon EC2 verifica se o usuário tem permissão para transmitir essa função. Naturalmente, você também deve garantir que a função que o usuário pode transmitir não inclua mais permissões do que o usuário deve ter.

nota

PassRole não é uma ação da API da forma que RunInstances ou ListInstanceProfiles é. Em vez disso, é uma permissão que a AWS verifica sempre que um ARN da função é transmitido como um parâmetro para uma API (ou o console faz isso em nome do usuário). Ele ajuda um administrador a controlar quais funções podem ser transmitidas por quais usuários. Nesse caso, ele garante que o usuário tenha permissão para anexar uma função específica a uma instância do Amazon EC2.

exemplo Exemplo de política que concede uma permissão de utilizador para lançar um caso EC2 com uma função específica

A política de exemplo a seguir permite que os usuários usem a API do Amazon EC2 para executar uma instância com uma função. O elemento Resource especifica o nome de recurso da Amazon (ARN) de uma função. Ao especificar o ARN, a política concede ao usuário a permissão para transmitir apenas a função Get-pics. Se o usuário tentar especificar uma função diferente ao executar uma instância, a ação falhará. O usuário não tem permissões para executar qualquer instância, independentemente de ele transmitir uma função.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/Get-pics" } ] }

Permitir uma função de perfil de instância para mudar para uma função noutra conta

Você pode permitir que um aplicativo em execução em uma instância do Amazon EC2 para executar comandos em outra conta. Para fazer isso, é necessário permitir que a função de instância do EC2 na primeira conta alterne para uma função na segunda conta.

Imagine que você está usando duas contas da AWS e deseja permitir que um aplicativo em execução em uma instância do Amazon EC2 execute comandos da AWS CLI em ambas as contas. Assuma que existe a instância EC2 na conta 111111111111. Essa instância inclui o abcd função de perfil de instância que permite que a aplicação realize apenas de leitura Amazon S3 tarefas no my-bucket-1 balde dentro do mesmo 111111111111 conta. No entanto, o aplicativo também deve ter permissão para assumir a função entre contas efgh para acessar o bucket my-bucket-2 do Amazon S3 na conta 222222222222.

A função de perfil de instância do EC2 abcd deve ter a seguinte política de permissões para permitir que o aplicativo acesse o bucket my-bucket-1 do Amazon S3:

Conta 111111111111 abcd Política de Permissões de Função

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:HeadBucket" ], "Resource": "*" }, { "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" } ] }

A função abcd deve confiar no serviço do Amazon EC2 para assumir a função. Para fazer isso, a função abcd deve ter a seguinte política de confiança:

Conta 111111111111 abcd Política de Confiança da Função

{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

Vamos supor que a função entre contas efgh permita tarefas do Amazon S3 somente leitura 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:

Conta 222222222222 efgh Política de Permissões de Função

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:HeadBucket" ], "Resource": "*" }, { "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 confiar na função de perfil de instância abcd para assumi-la. Para fazer isso, a função efgh deve ter a seguinte política de confiança:

Conta 222222222222 efgh Política de Confiança da Função

{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

Como faço para começar?

Para entender como as funções funcionam com as instâncias do EC2, é necessário usar o console do IAM para criar uma função, executar uma instância do EC2 que usa essa função e, em seguida, examinar a instância em execução. Examine os metadados da instância para ver como as credenciais temporárias da função são disponibilizadas para uma instância. Você também pode ver como um aplicativo que é executado em uma instância pode usar a função. Use os recursos a seguir para saber mais.

Para obter mais informações sobre a criação de funções ou funções para instâncias do EC2, consulte as seguintes informações: