Conceder permissões a um usuário para passar uma função para um serviço da AWS - AWS Identity and Access Management

Conceder permissões a um usuário para passar uma função para um serviço da AWS

Para configurar muitos produtos da AWS é necessário passar uma função do IAM para o serviço. Isso permite que o serviço assuma a função posteriormente e realize ações em seu nome. Para a maioria dos serviços, você só precisa passar a função para o serviço uma vez durante a configuração, não toda vez que o serviço assumir a função. Por exemplo, suponha que você tenha uma aplicação em execução em uma instância do Amazon EC2. Esse aplicativo requer credenciais temporárias para autenticação, além de permissões para autorizar o aplicativo a executar ações na AWS. Ao configurar a aplicação, você deve passar uma função para o Amazon EC2 usar com a instância que fornece essas credenciais. Defina as permissões para as aplicações em execução na instância anexando uma política do IAM à função. O aplicativo assume a função sempre que necessário para executar as ações que são permitidas pela função.

Para transmitir uma função (e suas permissões) para um serviço da AWS, um usuário deve ter permissões para transmitir a função para o serviço. Isso ajuda os administradores a garantir que apenas usuários aprovados possam configurar um serviço com uma função que concede permissões. Para permitir que um usuário passe uma função para um produto da AWS, você deve conceder a permissão PassRole ao usuário, à função ou ao grupo do IAM do usuário.

Atenção
  • A permissão PassRole só pode ser usada para passar um perfil do IAM para um serviço que compartilha a mesma conta da AWS. Para passar um perfil na Conta A para um serviço na Conta B, primeiro é necessário criar um perfil do IAM na Conta B que possa assumir o perfil da Conta A. Em seguida, o perfil na Conta B pode ser passado para o serviço. Para obter detalhes, consulte Acesso a recursos entre contas no IAM.

  • Não tente controlar quem pode passar por uma função marcando a função e, em seguida, usando a chave de condição ResourceTag em uma política com a ação iam:PassRole. Os resultados dessa abordagem não são confiáveis.

Ao definir a permissão PassRole, é necessário garantir que um usuário não passe um perfil em que o perfil tenha mais permissões do que você deseja que o usuário tenha. Por exemplo, Alice pode não ter permissão para realizar nenhuma ação do Amazon S3. Se Alice pudesse passar um perfil para um serviço que permite ações do Amazon S3, o serviço poderia realizar ações do Amazon S3 em nome de Alice ao executar o trabalho.

Ao especificar um perfil vinculado ao serviço, você também precisa ter permissão para atribuir o perfil ao serviço. Alguns serviços criam automaticamente uma função vinculada ao serviço na sua conta quando você executa uma ação nesse serviço. Por exemplo, o Amazon EC2 Auto Scaling cria a função vinculada ao serviço AWSServiceRoleForAutoScaling quando você cria um grupo do Auto Scaling pela primeira vez. Se tentar especificar o perfil vinculado ao serviço ao criar um grupo do Auto Scaling e não tiver a permissão iam:PassRole, você receberá um erro. Se você não especificar explicitamente o perfil, a permissão iam:PassRole não será necessária, e o padrão é usar o perfil AWSServiceRoleForAutoScaling para todas as operações executadas no grupo. Para saber quais serviços dão suporte a funções vinculadas ao serviço, consulte Serviços da AWS que funcionam com o IAM. Para saber quais serviços criam automaticamente uma função vinculada quando você executa uma ação no serviço, escolha o link Sim e visualize a documentação das funções vinculadas a serviços para o serviço.

Um usuário pode transmitir um ARN da função como um parâmetro em qualquer operação da API que usa a função para atribuir permissões ao serviço. Em seguida, o serviço verifica se esse usuário tem a permissão iam:PassRole. Para limitar o usuário a passar apenas as funções aprovadas, filtre a permissão iam:PassRole com o elemento Resources da instrução de política do IAM.

Você pode usar o elemento Condition em uma política JSON para testar o valor das chaves incluídas no contexto de solicitação de todas as solicitações da AWS. Para saber mais sobre como usar chaves de condição em uma política, consulte Elementos de política JSON do IAM: Condition. A chave de condição iam:PassedToService pode ser usada para especificar o principal de serviço do serviço para o qual uma função pode ser passada. Para saber mais sobre como usar a chave de iam:PassedToService condição em uma política, consulte iam:PassedToService.

Exemplo 1

Suponha que você deseja conceder a um usuário a capacidade de transmitir qualquer função de um conjunto de funções aprovadas para o serviço Amazon EC2 ao executar uma instância. Três elementos são necessários:

  • Uma política de permissões do IAM anexada à função que determina o que a função pode fazer. Defina as permissões para apenas as ações que a função deve realizar e os recursos que a função precisa para essas ações. Você pode usar a política de permissões do IAM gerenciada pela AWS ou criada para o cliente.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "A list of the permissions the role is allowed to use" ], "Resource": [ "A list of the resources the role is allowed to access" ] } }
  • Uma política de confiança para a função que permite que o serviço assuma a função. Por exemplo, você pode anexar a seguinte política de confiança à função com a ação UpdateAssumeRolePolicy. Essa política de confiança permite que o Amazon EC2 use a função e as permissões anexadas à função.

    { "Version": "2012-10-17", "Statement": { "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  • Uma política de permissões do IAM anexada ao usuário do IAM que permite que o usuário transmita apenas as funções aprovadas. Geralmente iam:GetRole é adicionada a iam:PassRole para que o usuário possa obter os detalhes da função a ser transmitida. Neste exemplo, o usuário pode transmitir apenas funções que existam na conta especificada com nomes começando com EC2-roles-for-XYZ-:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/EC2-roles-for-XYZ-*" }] }

Agora o usuário pode iniciar uma instância do Amazon EC2 com uma função atribuída. Os aplicativos em execução na instância podem acessar credenciais temporárias para a função por meio de metadados do perfil da instância. As políticas de permissões anexadas à função determinam o que a instância pode fazer.

Exemplo 2

O Amazon Relational Database Service (Amazon RDS) é compatível com um recurso chamado Monitoramento aprimorado. Este recurso permite que o Amazon RDS monitore uma instância de banco de dados usando um agente. Ele também permite que o Amazon RDS registre métricas de log no Amazon CloudWatch Logs. Para habilitar esse recurso, você deve criar uma função de serviço para conceder ao Amazon RDS permissões para monitorar e gravar métricas em seus logs.

Para criar uma função para o monitoramento aprimorado do Amazon RDS
  1. Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. Selecione Funções e, em seguida, Criar função.

  3. Escolha o tipo de perfil Serviço da AWS e, em Casos de uso para outros Serviços da AWS, escolha o serviço RDS. Escolha RDS – Enhanced Monitoring (RDS: monitoramento aprimorado) e, em seguida Next (Avançar).

  4. Escolha a política de permissões AmazonRDSEnhancedMonitoringRole.

  5. Escolha Próximo.

  6. Em Role name (Nome da função), insira um nome de função que ajude a identificar a finalidade da função. Os nomes de função devem ser exclusivos em sua Conta da AWS. Ao ser usado em uma política ou como parte de um ARN, o nome de perfil diferencia maiúsculas de minúsculas. Quando exibida para os clientes no console, por exemplo, como durante o processo de login, o nome de função não diferencia maiúsculas de minúsculas. Como várias entidades podem fazer referência à função, não é possível editar o nome da função depois de criada.

  7. (Opcional) Para Descrição da função, insira uma descrição para a nova função.

  8. (Opcional) Adicione metadados ao usuário anexando tags como pares de chave-valor. Para obter mais informações sobre como usar etiquetas no IAM, consulte Recursos de etiquetas do IAM.

  9. Revise a função e escolha Criar perfil.

A função obtém, automaticamente, uma política de confiança que concede as permissões de serviço monitoring.rds.amazonaws.com para assumir a função. Depois disso, o Amazon RDS pode executar todas as ações que a política AmazonRDSEnhancedMonitoringRole permite.

O usuário que você deseja que acesse o monitoramento aprimorado precisa de uma política com uma declaração que permita que o usuário liste os perfis do RDS e uma declaração que permita ao usuário transmitir a função, como apresentado a seguir. Use o número da sua conta e substitua o nome do perfil pelo nome fornecido na etapa 6.

{ "Sid": "PolicyStatementToAllowUserToListRoles", "Effect": "Allow", "Action": ["iam:ListRoles"], "Resource": "*" }, { "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/RDS-Monitoring-Role" }

Você pode combinar esta instrução com instruções em outra política ou colocá-la em sua própria política. Em vez de especificar que o usuário pode passar qualquer função que comece com RDS-, é possível substituir o nome da função no ARN do recurso por um curinga, por exemplo:

"Resource": "arn:aws:iam::account-id:role/RDS-*"

Ações iam:PassRole em logs do AWS CloudTrail

PassRole não é uma chamada de API. PassRole é uma permissão, o que significa que nenhum log do CloudTrail é gerado para o PassRole do IAM. Para analisar quais perfis são transferidos para quais Serviços da AWS no CloudTrail, é necessário analisar o log do CloudTrail que criou ou modificou o recurso da AWS que recebeu o perfil. Por exemplo, um perfil é transferido para uma função do AWS Lambda ao ser criado. O log da ação CreateFunction mostra um registro do perfil que foi transferido para a função.