

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Assuma uma função do IAM usando a AWS SDK para PHP versão 3
<a name="guide_credentials_assume_role"></a>

## Uso de perfis do IAM para credenciais variáveis da instância do Amazon EC2
<a name="instance-profile-credentials"></a>

Se você estiver executando seu aplicativo em uma instância do Amazon EC2, a forma preferida de fornecer credenciais para fazer chamadas AWS é usar uma [função do IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) para obter credenciais de segurança temporárias.

Quando você usa perfis do IAM, não há a necessidade de se preocupar com o gerenciamento de credenciais na aplicação. Eles permitem que uma instância “assuma” um perfil recuperando credenciais temporárias do servidor de metadados da instância do Amazon EC2.

As credenciais temporárias, geralmente conhecidas como **credenciais de perfil de instância**, permitem acesso a ações e recursos que a política do perfil permite. O Amazon EC2 controla todo o trabalho de autenticação de instâncias com segurança para que o serviço IAM assuma o perfil e, periodicamente, atualiza as credenciais dos perfis recuperadas. Isso mantém o aplicativo seguro com praticamente nenhum trabalho de sua parte. Para obter uma lista de serviços que aceitam credenciais de segurança temporárias, consulte os [serviços da AWS que funcionam com o IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) no *Guia do usuário do IAM*.

**nota**  
Para evitar acessar o serviço de metadados sempre, é possível passar uma instância de `Aws\CacheInterface` como a opção `'credentials'` para um construtor de cliente. Isso permite que o SDK use credenciais de perfil de instância em cache no lugar. Para obter detalhes, consulte [Configuração do AWS SDK para PHP Versão 3](guide_configuration.md).

Para obter mais informações sobre o desenvolvimento de aplicativos do Amazon EC2 usando o SDKs, consulte [Usando funções do IAM para instâncias do Amazon EC2 AWS](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) *SDKs no* Guia de referência de ferramentas.

### Criar e atribuir o perfil do IAM a uma instância do Amazon EC2
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

1. Crie um cliente do IAM.

    **Importações** 

   ```
   require 'vendor/autoload.php';
   
   use Aws\Iam\IamClient;
   ```

    **Código de exemplo** 

   ```
   $client = new IamClient([
       'region' => 'us-west-2',
       'version' => '2010-05-08'
   ]);
   ```

1. Crie um perfil do IAM com as permissões das ações e dos recursos que você usará.

    **Código de exemplo** 

   ```
   $result = $client->createRole([
       'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED
       'Description' => 'Description of Role',
       'RoleName' => 'RoleName', // REQUIRED
   ]);
   ```

1. Crie um perfil de instância do IAM e armazene o nome do recurso da Amazon (ARN) do resultado.
**nota**  
Se você usar o console do IAM em vez do AWS SDK para PHP, o console cria um perfil de instância automaticamente e dá a ele o mesmo nome da função à qual ele corresponde.  
 **Código de exemplo**   

   ```
   $IPN = 'InstanceProfileName';
   
   $result = $client->createInstanceProfile([
       'InstanceProfileName' => $IPN ,
   ]);
   
   $ARN = $result['Arn'];
   $InstanceID =  $result['InstanceProfileId'];
   ```

1. Crie um cliente do Amazon EC2.

    **Importações** 

   ```
   require 'vendor/autoload.php';
   
   use Aws\Ec2\Ec2Client;
   ```

    **Código de exemplo** 

   ```
   $ec2Client = new Ec2Client([
       'region' => 'us-west-2',
       'version' => '2016-11-15',
   ]);
   ```

1. Adicione o perfil de instância a uma instância do Amazon EC2 em execução ou interrompida. Use o nome do perfil de instância do seu perfil do IAM.

    **Código de exemplo** 

   ```
    $result = $ec2Client->associateIamInstanceProfile([
       'IamInstanceProfile' => [
           'Arn' => $ARN,
           'Name' => $IPN,
       ],
       'InstanceId' => $InstanceID
   ]);
   ```

Para obter mais informações, consulte [Funções do IAM para o Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) no *Guia do usuário do Amazon EC2*.

## Usar perfis do IAM para tarefas do Amazon ECS
<a name="ecs-credentials"></a>

Uma tarefa no Amazon Elastic Container Service (Amazon ECS) pode assumir uma função do IAM para AWS fazer chamadas de API. Essa é uma estratégia de gerenciar credenciais para as aplicações usarem, semelhante à forma como os perfis de instância do Amazon EC2 fornecem credenciais para instâncias do Amazon EC2.

[Em vez de criar e distribuir AWS credenciais de longo prazo para contêineres ou usar a função da instância do Amazon EC2, você pode associar uma função do IAM que usa credenciais temporárias a uma definição de tarefa ou operação de API do ECS. `RunTask`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 

Para obter mais informações sobre o uso dos perfis do IAM que as tarefas de contêiner podem assumir, consulte o tópico da [Perfil do IAM de tarefa](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) no *Guia do desenvolvedor do Amazon ECS*. Para obter exemplos de uso do perfil do IAM da tarefa na forma de um `taskRoleArn` nas definições de tarefas, consulte [Exemplos de definições de tarefas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) também no *Guia do desenvolvedor do Amazon ECS*.

## Assumindo uma função do IAM em outra Conta da AWS
<a name="assuming-an-iam-role-in-another-aws-account"></a>

Quando você trabalha em uma Conta da AWS (Conta A) e quer assumir uma função em outra conta (Conta B), você deve primeiro criar uma função do IAM na Conta B. Essa função permite que entidades na sua conta (Conta A) realizem ações específicas na Conta B. Para obter mais informações sobre o acesso entre contas, consulte [Tutorial: Delegar acesso entre AWS contas usando funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html).

Depois de criar um perfil na Conta B, registre o ARN do perfil. Você usará esse ARN ao assumir a função da Conta A. Você assume a função usando as AWS credenciais associadas à sua entidade na Conta A.

Crie um AWS STS cliente com credenciais para o seu Conta da AWS. No exemplo a seguir, usamos um perfil de credenciais, mas é possível usar qualquer método. Com o cliente AWS STS recém-criado, chame assume-role e forneça um sessionName personalizado. Recupere as novas credenciais temporárias do resultado. Por padrão, as credenciais duram uma hora.

 **Código de exemplo** 

```
$stsClient = new Aws\Sts\StsClient([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2011-06-15'
]);

$ARN = "arn:aws:iam::123456789012:role/xaccounts3access";
$sessionName = "s3-access-example";

$result = $stsClient->AssumeRole([
      'RoleArn' => $ARN,
      'RoleSessionName' => $sessionName,
]);

 $s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' =>  [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

Para obter mais informações, consulte [Como usar funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) ou [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole)na Referência AWS SDK para PHP da API.

## Usar um perfil do IAM com identidade da web
<a name="using-an-iam-role-with-web-identity"></a>

O Web Identity Federation permite que os clientes usem provedores de identidade terceirizados para autenticação ao acessar AWS recursos. Antes de assumir um perfil com identidade da web, você deve criar um perfil do IAM e configurar um provedor de identidades (IdP) da web. Para obter mais informações, consulte [Criar uma função para identidades da web ou federação do OpenID Connect (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html).

Depois de [criar um provedor de identidade](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) e [criar uma função para sua identidade na web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html), use um AWS STS cliente para autenticar um usuário. Forneça o webIdentityToken e ProviderId para sua identidade e o ARN da função do IAM com permissões para o usuário.

 **Código de exemplo** 

```
$stsClient = new Aws\Sts\StsClient([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2011-06-15'
]);

$ARN = "arn:aws:iam::123456789012:role/xaccounts3access";
$sessionName = "s3-access-example";
$duration = 3600;

$result = $stsClient->AssumeRoleWithWebIdentity([
      'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN",
      'ProviderId' => "graph.facebook.com",
      'RoleArn' => $ARN,
      'RoleSessionName' => $sessionName,
]);

 $s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' =>  [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

Para obter mais informações, consulte [AssumeRoleWithWebIdentity—Federação por meio de um provedor de identidade baseado na Web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity.html) ou [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerolewithwebidentity)na Referência da AWS SDK para PHP API.

## Assumir função com perfil
<a name="assume-role-with-profile"></a>

### Definir perfis em `~/.aws/credentials`
<a name="assume-role-profile-credentials-file"></a>

Você pode configurar o AWS SDK para PHP para usar uma função do IAM definindo um perfil em`~/.aws/credentials`.

Crie um perfil com a configuração do `role_arn` para o perfil que você assumirá. Inclua também a configuração `source_profile` para um perfil com credenciais que tenham permissões para assumir o perfil do IAM. Para obter mais detalhes sobre essas configurações, consulte [Assumir credenciais de função](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) no *Guia de referência de ferramentas AWS SDKs e ferramentas*.

Por exemplo, no `~/.aws/credentials` seguinte, o perfil `project1` define o `role_arn` e especifica o perfil `default` como a fonte das credenciais para verificar se a entidade associada a elas pode assumir o perfil.

```
[project1]
role_arn = arn:aws:iam::123456789012:role/testing
source_profile = default
role_session_name = OPTIONAL_SESSION_NAME

[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
aws_session_token= YOUR_AWS_SESSION_TOKEN
```

Ao definir a variável de ambiente `AWS_PROFILE` ou usar o parâmetro `profile` ao instanciar um cliente de serviço, o perfil especificado em `project1` será assumido, usando o perfil `default` como as credenciais de origem.

O trecho a seguir mostra o uso do parâmetro `profile` em um construtor do `S3Client`. O `S3Client` terá as permissões associadas à função associada ao perfil `project1`.

```
$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-1',
    'version' => '2006-03-01',
    'profile' => 'project1'
]);
```

### Definir perfis em `~/.aws/config`
<a name="assume-role-profile-config-file"></a>

O arquivo `~/.aws/config` também pode conter perfis que você deseja que sejam assumidos. Se você definir a variável de ambiente `AWS_SDK_LOAD_NONDEFAULT_CONFIG`, o SDK for PHP carregará perfis do arquivo `config`. Quando `AWS_SDK_LOAD_NONDEFAULT_CONFIG` estiver configurado, o SDK carrega perfis de `~/.aws/config` e `~/.aws/credentials`. Os perfis de `~/.aws/credentials` são carregados por último e têm precedência sobre um perfil de `~/.aws/config` com o mesmo nome. Perfis de qualquer um desses locais podem servir como o `source_profile` ou o perfil a ser assumido.

O exemplo a seguir usa o perfil `project1` definido no arquivo `config` e o perfil `default` no arquivo `credentials`. O `AWS_SDK_LOAD_NONDEFAULT_CONFIG` também está definido.

```
# Profile in ~/.aws/config.

[profile project1]
role_arn = arn:aws:iam::123456789012:role/testing
source_profile = default
role_session_name = OPTIONAL_SESSION_NAME
```

```
# Profile in ~/.aws/credentials.

[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
aws_session_token= YOUR_AWS_SESSION_TOKEN
```

Quando o construtor do `S3Client` executa o trecho a seguir, a função definida no perfil `project1` será assumida usando as credenciais associadas ao perfil `default`.

```
$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-1',
    'version' => '2006-03-01',
    'profile' => 'project1'
]);
```