

# Conceda permissões a um usuário para passar um perfil para um serviço da AWS
<a name="id_roles_use_passrole"></a>

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](access_policies-cross-account-resource-access.md).
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 [AWSServiços da que funcionam com o IAM](reference_aws-services-that-work-with-iam.md). 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](reference_policies_elements_condition.md). 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](reference_policies_iam-condition-keys.md#ck_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.

------
#### [ JSON ]

****  

  ```
  {
      "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.

------
#### [ JSON ]

****  

  ```
  {
      "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-`:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iam:GetRole",
                  "iam:PassRole"
              ],
              "Resource": "arn:aws:iam::{{111122223333}}: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 Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Selecione **Funções** e, depois, **Criar função**.

1. 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).

1. Escolha a política de permissões **AmazonRDSEnhancedMonitoringRole**.

1. Escolha **Próximo**.

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

1. (Opcional) Em **Description** (Descrição), insira uma descrição para o nova função.

1. (Opcional) Adicione metadados ao usuário anexando tags como pares de chave-valor. Para obter mais informações sobre como usar tags no IAM, consulte [Tags para recursos do AWS Identity and Access Management](id_tags.md).

1. Revise o perfil 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 que inclua 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
<a name="id_roles_use_passrole_logs"></a>

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