Assumez un IAM rôle - AWS SDK for PHP

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 IAM rôle

Utilisation de IAM rôles pour les informations d'identification variables d'EC2instance Amazon

Si vous exécutez votre application sur une EC2 instance Amazon, la méthode préférée pour fournir des informations d'identification pour les appels AWS consiste à utiliser un IAMrôle pour obtenir des informations de sécurité temporaires.

Lorsque vous utilisez IAM des rôles, 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 auprès du serveur de métadonnées de l'EC2instance Amazon.

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 se EC2 charge de l'authentification sécurisée des instances auprès du IAM service 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 obtenir la liste des services qui acceptent les informations d'identification de sécurité temporaires, consultez la section AWS Services compatibles IAM dans le Guide de IAM l'utilisateur.

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. Cela permet d'SDKutiliser les informations d'identification du profil d'instance mises en cache à la place. Pour plus de détails, voir Configuration pour la AWS SDK for PHP version 3.

Pour plus d'informations sur le développement d'EC2applications Amazon à l'aide deSDKs, consultez la section Utilisation IAM des rôles pour EC2 les instances Amazon dans le guide de référence AWS SDKs and Tools.

Création et attribution d'un IAM rôle à une EC2 instance Amazon

  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' ]);
  2. Créez un IAM rôle 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 ]);
  3. Créez un profil d'IAMinstance et stockez le nom de ressource Amazon (ARN) à partir du résultat.

    Note

    Si vous utilisez la IAM console au lieu de AWS SDK for 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'];
  4. Créez un EC2 client Amazon.

    Importations

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

    Exemple de code

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Ajoutez le profil d'instance à une EC2 instance Amazon en cours d'exécution ou arrêtée. Utilisez le nom du profil d'instance de votre IAM rôle.

    Exemple de code

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

Pour plus d'informations, consultez la section IAMRôles pour Amazon EC2 dans le guide de EC2 l'utilisateur Amazon.

Utilisation de IAM rôles pour les ECS tâches Amazon

Une tâche dans Amazon Elastic Container Service (AmazonECS) peut jouer IAM le rôle de passer des AWS API appels. 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'EC2instance Amazon fournissent des informations d'identification aux EC2 instances Amazon.

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'EC2instance Amazon, vous pouvez associer un IAM rôle utilisant des informations d'identification temporaires à une définition ou à une RunTask APIopération de ECS tâche.

Pour plus d'informations sur l'utilisation IAM des rôles que les tâches de conteneur peuvent assumer, consultez la rubrique relative aux IAMrôles des tâches dans le manuel Amazon ECS Developer Guide. Pour des exemples d'utilisation du IAM rôle de tâche sous la forme d'un rôle taskRoleArn dans les définitions de tâches, consultez également les exemples de définitions de tâches dans le manuel Amazon ECS Developer Guide.

Assumer un IAM rôle dans un autre Compte AWS

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 IAM rôle 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 IAM rôles.

Après avoir créé un rôle dans le compte B, enregistrez-leARN. Vous l'utiliserez 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 AWS STS client nouvellement créé, appelez assume-role et fournissez une personnalisation. sessionName 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 IAM des rôles ou AssumeRoledans la AWS SDK for PHP API référence.

Utilisation d'un IAM rôle associé à une identité Web

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. Avant de pouvoir assumer un rôle avec l'identité Web, vous devez créer un IAM rôle 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).

Après avoir créé un fournisseur d'identité et créé un rôle pour votre identité Web, utilisez un AWS STS client pour authentifier un utilisateur. Indiquez le webIdentityToken et ProviderId pour votre identité, et le rôle ARN pour le IAM rôle 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, voir AssumeRoleWithWebIdentity—Fédération via un fournisseur d'identité basé sur le Web ou AssumeRoleWithWebIdentitydans le manuel de AWS SDK for PHP API référence.

Assumer un rôle avec un profil

Définissez les profils dans ~/.aws/credentials

Vous pouvez configurer le AWS SDK for PHP pour utiliser un IAM rôle 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 IAM rôle. Pour plus de détails sur ces paramètres de configuration, consultez la section Assumer les informations d'identification du rôle 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_PROFILEenvironnement 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

Le ~/.aws/config fichier peut également contenir les profils que vous souhaitez faire passer pour acquis. Si vous définissez la variable d'environnementAWS_SDK_LOAD_NONDEFAULT_CONFIG, le SDK for PHP charge les profils à partir du config fichier. Lorsqu'il AWS_SDK_LOAD_NONDEFAULT_CONFIG est défini, les profils de SDK charge proviennent à la fois de ~/.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' ]);