

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Assumez un rôle IAM à l'aide de la AWS SDK pour PHP version 3
<a name="guide_credentials_assume_role"></a>

## Utilisation de rôles IAM pour les informations d'identification variables d'instance Amazon EC2
<a name="instance-profile-credentials"></a>

Si vous exécutez votre application sur une instance Amazon EC2, la méthode préférée pour fournir des informations d'identification pour les appels AWS consiste à utiliser un [rôle IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) pour obtenir des informations de sécurité temporaires.

Lorsque vous utilisez des rôles IAM, vous n'avez pas à vous soucier de la gestion des informations d'identification depuis votre application. Ils permettent à une instance d' « assumer » un rôle en récupérant des informations d'identification temporaires depuis le serveur de métadonnées de l'instance Amazon EC2.

Les informations d'identification temporaires, souvent appelées **informations d'identification du profil d'instance**, permettent d'accéder aux actions et aux ressources autorisées par la politique du rôle. Amazon EC2 se charge de l'authentification sécurisée des instances auprès du service IAM pour qu'elles assument le rôle et de l'actualisation périodique des informations d'identification de rôle récupérées. Ceci permet de sécuriser l'application presque sans effort de votre part. Pour une liste des services prenant en charge les informations d’identification de sécurité temporaires, consultez [Services AWS qui fonctionnent avec IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) dans le *Guide de l’utilisateur IAM*.

**Note**  
Pour éviter d'accéder au service de métadonnées chaque fois, vous pouvez transmettre une instance `Aws\CacheInterface` en tant qu'option `'credentials'` à un constructeur client. Ceci permet au kit SDK d'utiliser des informations d'identification du profil d'instance mises en cache à la place. Pour plus de détails, voir [Configuration pour la AWS SDK pour PHP version 3](guide_configuration.md).

*Pour plus d'informations sur le développement d'applications Amazon EC2 à l'aide de SDKs, consultez la section [Utilisation des rôles IAM pour les instances Amazon EC2](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) dans le AWS SDKs guide de référence and Tools.*

### Création et attribution d'un rôle IAM à une instance Amazon EC2
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

1. Créez un client IAM.

    **Importations** 

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

    **Exemple de code** 

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

1. Créez un rôle IAM avec les autorisations nécessaires pour les actions et les ressources que vous utiliserez.

    **Exemple de code** 

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

1. Créez un profil d'instance IAM et stockez le nom de ressource Amazon (ARN) à partir du résultat.
**Note**  
Si vous utilisez la console IAM au lieu de AWS SDK pour PHP, la console crée automatiquement un profil d'instance et lui donne le même nom que le rôle auquel il correspond.  
 **Exemple de code**   

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

1. Créez un client Amazon EC2.

    **Importations** 

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

    **Exemple de code** 

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

1. Ajoutez le profil d'instance à une instance Amazon EC2 en cours d'exécution ou arrêtée. Utilisez le nom du profil d'instance de votre rôle IAM.

    **Exemple de code** 

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

Pour de plus amples informations sur les rôles IAM, veuillez consulter [Rôles IAM pour Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) dans le *Guide de l'utilisateur Amazon EC2*.

## Utilisation de rôles IAM pour les tâches Amazon ECS
<a name="ecs-credentials"></a>

Une tâche dans Amazon Elastic Container Service (Amazon ECS) peut assumer un rôle IAM pour AWS effectuer des appels d'API. Il s'agit d'une stratégie de gestion des informations d'identification à utiliser par vos applications, similaire à la manière dont les profils d'instance Amazon EC2 fournissent des informations d'identification aux instances Amazon EC2.

[Au lieu de créer et de distribuer des AWS informations d'identification à long terme aux conteneurs ou d'utiliser le rôle de l'instance Amazon EC2, vous pouvez associer un rôle IAM qui utilise des informations d'identification temporaires à une définition de tâche ECS ou `RunTask` à une opération d'API.](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 

Pour plus d'informations sur l'utilisation des rôles IAM que les tâches de conteneur peuvent assumer, consultez la rubrique relative au [rôle IAM des tâches](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) dans le manuel *Amazon ECS Developer Guide*. Pour des exemples d'utilisation du rôle IAM de tâche sous la forme d'une `taskRoleArn` définition de tâche, consultez la section [Exemples de définitions de tâches](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) également dans le manuel *Amazon ECS Developer Guide*.

## Assumer un rôle IAM dans un autre Compte AWS
<a name="assuming-an-iam-role-in-another-aws-account"></a>

Lorsque vous travaillez dans un Compte AWS (compte A) et que vous souhaitez assumer un rôle dans un autre compte (compte B), vous devez d'abord créer un rôle IAM dans le compte B. Ce rôle permet aux entités de votre compte (compte A) d'effectuer des actions spécifiques dans le compte B. Pour plus d'informations sur l'accès entre comptes, voir [Tutoriel : déléguer l'accès entre AWS comptes à l'aide de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html).

Une fois que vous avez créé un rôle dans le compte B, enregistrez l'ARN de rôle. Vous utiliserez cet ARN lorsque vous assumerez le rôle depuis le compte A. Vous assumez le rôle en utilisant les AWS informations d'identification associées à votre entité dans le compte A.

Créez un AWS STS client avec des informations d'identification pour votre Compte AWS. Dans ce qui suit, nous avons utilisé un profil d'informations d'identification, mais vous pouvez utiliser n'importe quelle méthode. Avec le client AWS STS que vous venez de créer, appelez la commande assume-role et fournissez un élément sessionName personnalisé. Récupérez les nouvelles informations d'identification temporaires à partir du résultat. Les informations d'identification durent une heure par défaut.

 **Exemple de code** 

```
$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']
    ]
]);
```

Pour plus d'informations, consultez la section [Utilisation des rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) ou consultez le Guide [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole)de référence de l' AWS SDK pour PHP API.

## Utilisation d'un rôle IAM avec une identité Web
<a name="using-an-iam-role-with-web-identity"></a>

La Fédération des identités Web permet aux clients d'utiliser des fournisseurs d'identité tiers pour s'authentifier lorsqu'ils accèdent aux AWS ressources. Pour pouvoir assumer un rôle avec la fédération d'identité web, vous devez créer un rôle IAM et configurer un fournisseur d'identité web (IdP). Pour de plus amples informations, veuillez consulter [Création d'un rôle pour la fédération d'identité web ou OpenID Connect Federation (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html).

Après avoir [créé un fournisseur d'identité](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) et [créé un rôle pour votre identité Web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html), utilisez un AWS STS client pour authentifier un utilisateur. Indiquez le webIdentityToken et ProviderId pour votre identité, et l'ARN du rôle IAM avec des autorisations pour l'utilisateur.

 **Exemple de code** 

```
$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']
    ]
]);
```

Pour plus d'informations, consultez [AssumeRoleWithWebIdentity—Federation via un fournisseur d'identité basé sur le 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)dans le manuel de référence des AWS SDK pour PHP API.

## Assumer un rôle avec un profil
<a name="assume-role-with-profile"></a>

### Définissez les profils dans `~/.aws/credentials`
<a name="assume-role-profile-credentials-file"></a>

Vous pouvez configurer le AWS SDK pour PHP pour utiliser un rôle IAM en définissant un profil dans`~/.aws/credentials`.

Créez un nouveau profil avec le `role_arn` paramètre correspondant au rôle que vous souhaitez assumer. Incluez également le `source_profile` paramètre d'un autre profil avec des informations d'identification autorisées à assumer le rôle IAM. Pour plus de détails sur ces paramètres de configuration, consultez la section [Assumer les informations d'identification du rôle](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) dans le *guide de référence AWS SDKs et Tools*.

Par exemple, dans ce qui suit`~/.aws/credentials`, le `project1` profil définit `role_arn` et spécifie le `default` profil comme source des informations d'identification afin de vérifier que l'entité qui leur est associée peut assumer le rôle.

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

Si vous définissez la variable d'`AWS_PROFILE`environnement ou si vous utilisez un `profile` paramètre lorsque vous instanciez un client de service, le rôle spécifié dans `project1` est assumé, en utilisant le `default` profil comme informations d'identification source.

L'extrait suivant montre l'utilisation du `profile` paramètre dans un `S3Client` constructeur. Ils `S3Client` auront les autorisations associées au rôle associé au `project1` profil.

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

### Définissez les profils dans `~/.aws/config`
<a name="assume-role-profile-config-file"></a>

Le `~/.aws/config` fichier peut également contenir les profils que vous souhaitez faire passer pour acquis. Si vous définissez la variable d'environnement`AWS_SDK_LOAD_NONDEFAULT_CONFIG`, le SDK for PHP charge les profils depuis `config` le fichier. Lorsque cette `AWS_SDK_LOAD_NONDEFAULT_CONFIG` option est définie, le SDK charge les profils à la fois depuis `~/.aws/config` et`~/.aws/credentials`. Les profils de `~/.aws/credentials` sont chargés en dernier et ont priorité sur un profil du `~/.aws/config` même nom. Les profils définis dans ces emplacements peuvent être utilisés en tant que `source_profile` ou que profil à assumer.

L'exemple suivant utilise le `project1` profil défini dans le `config` fichier et le `default` profil dans le `credentials` fichier. Le `AWS_SDK_LOAD_NONDEFAULT_CONFIG` est également défini.

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

Lorsque le `S3Client` constructeur exécute l'extrait de code suivant, le rôle défini dans le `project1` profil sera assumé à l'aide des informations d'identification associées au profil. `default`

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