Utiliser un fournisseur d'informations d'identification - 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.

Utiliser un fournisseur d'informations d'identification

Un fournisseur d'informations d'identification est une fonction qui renvoie un GuzzleHttp\Promise\PromiseInterface qui est exécutée avec une instance Aws\Credentials\CredentialsInterface ou rejetée avec une Aws\Exception\CredentialsException. Vous pouvez utiliser des fournisseurs d'informations d'identification pour mettre en œuvre votre propre logique personnalisée pour créer des informations d'identification ou pour optimiser le chargement des informations d'identification.

Les fournisseurs d'informations d'identification sont transmis à l'option constructeur client credentials. Les fournisseurs d'informations d'identification sont asynchrones, ce qui les oblige à être lentement évalués chaque fois qu'une opération d'API est appelée. À ce titre, la transmission d'une fonction de fournisseur d'informations d'identification à un constructeur client SDK ne valide pas immédiatement les informations d'identification. Si le fournisseur d'informations d'identification ne renvoie pas l'objet des informations d'identification, une opération d'API sera rejetée avec une Aws\Exception\CredentialsException.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; // Use the default credential provider $provider = CredentialProvider::defaultProvider(); // Pass the provider to the client $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

Fournisseurs intégrés dans le kit SDK

Le kit SDK fournit plusieurs fournisseurs intégrés que vous pouvez combiner avec des fournisseurs personnalisés. Pour plus d'informations sur la configuration des fournisseurs standardisés et de la chaîne de fournisseurs d'informations d'identification dans AWS les SDK, consultez la section Fournisseurs d'informations d'identification standardisés dans le Guide de référence AWS des SDK et des outils.

Important

Les fournisseurs d'informations d'identification sont appelés chaque fois qu'une opération d'API est effectuée. Si le chargement d'informations d'identification est une tâche coûteuse (par exemple, le chargement à partir d'un disque ou d'une ressource réseau) ou si les informations d'identification ne sont pas mises en cache par le fournisseur, envisagez d'encapsuler votre fournisseur d'informations d'identification dans une fonction Aws\Credentials\CredentialProvider::memoize. Le fournisseur d'informations d'identification par défaut utilisé par le kit SDK est automatiquement mémoïsé.

fournisseur assumeRole

Si vous utilisez Aws\Credentials\AssumeRoleCredentialProvider pour créer des informations d'identification en assumant un rôle, vous devez fournir les informations 'client' avec un objet StsClient et des détails 'assume_role_params' comme illustré.

Note

Pour éviter de récupérer inutilement les informations AWS STS d'identification à chaque opération d'API, vous pouvez utiliser cette memoize fonction pour gérer l'actualisation automatique des informations d'identification lorsqu'elles expirent. Consultez le code suivant pour obtenir un exemple.

use Aws\Credentials\CredentialProvider; use Aws\Credentials\InstanceProfileProvider; use Aws\Credentials\AssumeRoleCredentialProvider; use Aws\S3\S3Client; use Aws\Sts\StsClient; // Passing Aws\Credentials\AssumeRoleCredentialProvider options directly $profile = new InstanceProfileProvider(); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $assumeRoleCredentials = new AssumeRoleCredentialProvider([ 'client' => new StsClient([ 'region' => 'us-east-2', 'version' => '2011-06-15', 'credentials' => $profile ]), 'assume_role_params' => [ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ], ]); // To avoid unnecessarily fetching STS credentials on every API operation, // the memoize function handles automatically refreshing the credentials when they expire $provider = CredentialProvider::memoize($assumeRoleCredentials); $client = new S3Client([ 'region' => 'us-east-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

Pour plus d'informations concernant'assume_role_params', voir AssumeRole.

fournisseur SSO

Aws\Credentials\CredentialProvider::ssoest le fournisseur d'identifiants de connexion unique. Ce fournisseur est également connu sous le nom de fournisseur d' AWS IAM Identity Center informations d'identification.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $credentials = new Aws\CredentialProvider::sso('profile default'); $s3 = new Aws\S3\S3Client([ 'version' => 'latest', 'region' => 'us-west-2', 'credentials' => $credentials ]);

Si vous utilisez un profil nommé, remplacez le nom de votre profil par « default » dans l'exemple précédent. Pour en savoir plus sur la configuration de profils nommés, consultez la section Partage config et credentials fichiers dans le Guide de référence AWS des SDK et des outils. Vous pouvez également utiliser la variable d'AWS_PROFILEenvironnement pour spécifier les paramètres du profil à utiliser.

Pour en savoir plus sur le fonctionnement du fournisseur IAM Identity Center, voir Comprendre l'authentification IAM Identity Center dans le Guide de référence AWS des SDK et des outils.

Enchaînement des fournisseurs

Vous pouvez chaîner des fournisseurs d'informations d'identification à l'aide de la fonction Aws\Credentials\CredentialProvider::chain(). Cette fonction accepte un nombre d'arguments variadique, chacun d'entre eux étant une fonction de fournisseur d'informations d'identification. Cette fonction renvoie ensuite une nouvelle fonction qui est la composition des fonctions fournies, de façon à ce qu'elles soient appelées les unes après les autres jusqu'à ce que l'un des fournisseurs renvoie une promesse tenue.

Le defaultProvider utilise cette composition pour vérifier plusieurs fournisseurs avant un échec. La source du defaultProvider illustre l'utilisation de la fonction chain.

// This function returns a provider public static function defaultProvider(array $config = []) { // This function is the provider, which is actually the composition // of multiple providers. Notice that we are also memoizing the result by // default. return self::memoize( self::chain( self::env(), self::ini(), self::instanceProfile($config) ) ); }

Création d'un fournisseur personnalisé

Les fournisseurs d'informations d'identification sont simplement des fonctions qui, lorsqu'elles sont appelées, renvoient une promesse (GuzzleHttp\Promise\PromiseInterface) tenue grâce à un objet Aws\Credentials\CredentialsInterface ou rejetée via une Aws\Exception\CredentialsException.

Une bonne pratique pour créer des fournisseurs consiste à créer une fonction qui est appelée pour créer le véritable fournisseur d'informations d'identification. Par exemple, voici la source du fournisseur env (légèrement modifiée pour cet exemple). Notez qu'il s'agit d'une fonction qui renvoie la fonction du véritable fournisseur. Ceci vous permet de composer facilement des fournisseurs d'informations d'identification et de les transmettre comme valeurs.

use GuzzleHttp\Promise; use GuzzleHttp\Promise\RejectedPromise; // This function CREATES a credential provider public static function env() { // This function IS the credential provider return function () { // Use credentials from environment variables, if available $key = getenv(self::ENV_KEY); $secret = getenv(self::ENV_SECRET); if ($key && $secret) { return Promise\promise_for( new Credentials($key, $secret, getenv(self::ENV_SESSION)) ); } $msg = 'Could not find environment variable ' . 'credentials in ' . self::ENV_KEY . '/' . self::ENV_SECRET; return new RejectedPromise(new CredentialsException($msg)); }; }

fournisseur defaultProvider

Aws\Credentials\CredentialProvider::defaultProvider est le fournisseur d'informations d'identification par défaut. Ce fournisseur est utilisé si vous omettez une option credentials lors de la création d'un client. Il tente de charger les informations d'identification à partir des variables d'environnement, puis à partir d'un fichier .ini (d'abord d'un fichier .aws/credentials, puis d'un fichier .aws/config), et enfin, à partir d'un profil d'instance (d'abord EcsCredentials, puis de métadonnées Ec2).

Note

Le résultat du fournisseur par défaut est automatiquement mémoïsé.

fournisseur ecsCredentials

Aws\Credentials\CredentialProvider::ecsCredentials tente de charger les informations d'identification via une demande GET, dont l'URI est spécifié par la variable d'environnement AWS_CONTAINER_CREDENTIALS_RELATIVE_URI dans le conteneur.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $provider = CredentialProvider::ecsCredentials(); // Be sure to memoize the credentials $memoizedProvider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $memoizedProvider ]);

env. fournisseur

Aws\Credentials\CredentialProvider::env tente de charger les informations d'identification à partir des variables d'environnement.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => CredentialProvider::env() ]);

assumeRoleWithWebIdentityCredentialProvider fournisseur

Aws\Credentials\CredentialProvider::assumeRoleWithWebIdentityCredentialProvider tente de charger les informations d'identification en endossant un rôle. Si les variables d'environnement AWS_ROLE_ARN et AWS_WEB_IDENTITY_TOKEN_FILE sont présentes, le fournisseur tentera d'endosser le rôle spécifié à AWS_ROLE_ARN à l’aide du jeton sur le disque au chemin d'accès complet spécifié dans AWS_WEB_IDENTITY_TOKEN_FILE. Si les variables d'environnement sont utilisées, le fournisseur tentera de définir la session à partir de la variable d'environnement AWS_ROLE_SESSION_NAME.

Si les variables d'environnement ne sont pas définies, le fournisseur utilise le profil par défaut, ou celui défini en tant que AWS_PROFILE. Le fournisseur lit les profils à partir de ~/.aws/credentials et ~/.aws/config par défaut, et peut lire depuis des profils spécifiés dans l'option de configuration filename. Le fournisseur va endosser le rôle dans role_arn du profil, la lecture d'un jeton envoyé à partir du chemin d'accès complet défini dans web_identity_token_file. role_session_name sera utilisée si elle est définie sur le profil.

Le fournisseur est appelé dans le cadre de la chaîne par défaut et peut être appelé directement.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $provider = CredentialProvider::assumeRoleWithWebIdentityCredentialProvider(); // Cache the results in a memoize function to avoid loading and parsing // the ini file on every API operation $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

Par défaut, ce fournisseur d'informations d'identification héritera de la région configurée qui sera utilisée par le StsClient pour assumer le rôle. En option, une version complète StsClient peut être fournie. Les informations d'identification doivent être définies comme false sur toutes celles fournies StsClient.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; use Aws\Sts\StsClient; $stsClient = new StsClient([ 'region' => 'us-west-2', 'version' => 'latest', 'credentials' => false ]) $provider = CredentialProvider::assumeRoleWithWebIdentityCredentialProvider([ 'stsClient' => $stsClient ]); // Cache the results in a memoize function to avoid loading and parsing // the ini file on every API operation $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

fournisseur ini

Aws\Credentials\CredentialProvider::ini tente de charger les informations d’identification à partir d’un fichier d’informations d’identification ini. Par défaut, le SDK tente de charger le profil « par défaut » à partir du AWS credentials fichier partagé situé ~/.aws/credentials dans.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $provider = CredentialProvider::ini(); // Cache the results in a memoize function to avoid loading and parsing // the ini file on every API operation $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

Vous pouvez utiliser un profil personnalisé ou un emplacement de fichier .ini en fournissant des arguments à la fonction qui crée le fournisseur.

$profile = 'production'; $path = '/full/path/to/credentials.ini'; $provider = CredentialProvider::ini($profile, $path); $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

fournisseur de processus

Aws\Credentials\CredentialProvider::process tente de charger des informations d'identification à partir d'un credential_process spécifié dans un fichier d'informations d'identification ini. Par défaut, le SDK tente de charger le profil « par défaut » à partir du AWS credentials fichier partagé situé ~/.aws/credentials dans. Le kit SDK appellera la commande credential_process exactement telle que fournie, puis lira les données JSON à partir de stdout. Le credential_process doit écrire les informations d'identification vers stdout au format suivant :

{ "Version": 1, "AccessKeyId": "", "SecretAccessKey": "", "SessionToken": "", "Expiration": "" }

SessionToken et Expiration sont facultatifs. Le cas échéant, les informations d'identification seront traitées comme temporaires.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $provider = CredentialProvider::process(); // Cache the results in a memoize function to avoid loading and parsing // the ini file on every API operation $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

Vous pouvez utiliser un profil personnalisé ou un emplacement de fichier .ini en fournissant des arguments à la fonction qui crée le fournisseur.

$profile = 'production'; $path = '/full/path/to/credentials.ini'; $provider = CredentialProvider::process($profile, $path); $provider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $provider ]);

fournisseur instanceProfile

Aws\Credentials\CredentialProvider::instanceProfiletente de charger des informations d'identification à partir des profils d'instance Amazon EC2.

use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $provider = CredentialProvider::instanceProfile(); // Be sure to memoize the credentials $memoizedProvider = CredentialProvider::memoize($provider); $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => $memoizedProvider ]);

Par défaut, le fournisseur réessaie de récupérer les informations d'identification jusqu'à trois fois. Le nombre de nouvelles tentatives peut être défini avec l'option retries et totalement désactivé en définissant l'option sur 0.

use Aws\Credentials\CredentialProvider; $provider = CredentialProvider::instanceProfile([ 'retries' => 0 ]); $memoizedProvider = CredentialProvider::memoize($provider);
Note

Vous pouvez désactiver cette tentative de chargement à partir des profils d'instance Amazon EC2 en définissant la variable d'AWS_EC2_METADATA_DISABLEDenvironnement sur. true

Mémorisation des informations d'identification

Il est parfois nécessaire de créer un fournisseur d'informations d'identification qui se souvient de la dernière valeur renvoyée. Ceci peut être utile aux performances lorsque le chargement des informations d'identification est une opération coûteuse ou lors de l'usage de la classe Aws\Sdk pour partager un fournisseur d'informations d'identification entre plusieurs clients. Vous pouvez ajouter la mémoïsation à un fournisseur d'informations d'identification en encapsulant la fonction du fournisseur d'informations d'identification dans une fonction memoize.

use Aws\Credentials\CredentialProvider; $provider = CredentialProvider::instanceProfile(); // Wrap the actual provider in a memoize function $provider = CredentialProvider::memoize($provider); // Pass the provider into the Sdk class and share the provider // across multiple clients. Each time a new client is constructed, // it will use the previously returned credentials as long as // they haven't yet expired. $sdk = new Aws\Sdk(['credentials' => $provider]); $s3 = $sdk->getS3(['region' => 'us-west-2', 'version' => 'latest']); $ec2 = $sdk->getEc2(['region' => 'us-west-2', 'version' => 'latest']); assert($s3->getCredentials() === $ec2->getCredentials());

Lorsque les informations d'identification mémoïsées expirent, l'habillage mémoïsé appelle le fournisseur habillé dans une tentative de rafraîchissement des informations d'identification.