Verwenden eines Anmeldeinformationsanbieters - AWS SDK for PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden eines Anmeldeinformationsanbieters

Ein Anmeldeinformationsanbieter ist eine Funktion, die eine GuzzleHttp\Promise\PromiseInterface zurückgibt, die mit einer Aws\Credentials\CredentialsInterface-Instance erfüllt oder mit einer Aws\Exception\CredentialsException abgelehnt wird. Sie können Anmeldeinformationsanbieter verwenden, um Ihre eigene benutzerdefinierte Logik für das Erstellen von Anmeldeinformationen zu implementieren, oder zum Optimieren der Ladezeit von Anmeldeinformationen.

Anmeldeinformationsanbieter werden in der credentials-Option des Client-Konstruktors übergeben. Anmeldeinformationsanbieter sind asynchron, sodass sie jedes Mal, wenn eine API-Operation aufgerufen wird, langsam ausgewertet werden. Die Übergabe einer Anmeldeinformationsanbieter-Funktion an einen SDK-Client-Konstruktor führt daher nicht sofort zur Validierung der Anmeldeinformationen. Wenn der Anmeldeinformationsanbieter kein Anmeldeinformationsobjekt zurückgibt, wird eine API-Operation mit einer Aws\Exception\CredentialsException abgelehnt.

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 ]);

Integrierte Anbieter im SDK

Das SDK bietet mehrere integrierte Anbieter, die mit beliebigen benutzerdefinierten Anbietern kombiniert werden können. Weitere Informationen zur Konfiguration der standardisierten Anbieter und der Anbieterkette für Anmeldeinformationen in - AWS SDKs finden Sie unter Standardisierte Anbieter von Anmeldeinformationen im AWS Referenzhandbuch für -SDKs und Tools.

Wichtig

Anmeldeinformationsanbieter werden jedes Mal aufgerufen, wenn eine API-Operation ausgeführt wird. Wenn das Laden von Anmeldeinformationen eine teure Aufgabe ist (z. B. das Laden von Festplatten oder eine Netzwerkressource), oder wenn Anmeldeinformationen von Ihrem Anbieter nicht im Cache gespeichert werden, sollten Sie in Betracht ziehen, Ihren Anmeldeinformationsanbieter in eine Aws\Credentials\CredentialProvider::memoize-Funktion zu verpacken. Das SDK merkt sich den Standard-Anmeldeinformationsanbieter automatisch.

assumeRole provider

Wenn Sie Aws\Credentials\AssumeRoleCredentialProvider zum Erstellen von Anmeldeinformationen verwenden, indem Sie eine Rolle annehmen, müssen Sie 'client'-Informationen mit einem StsClient-Objekt und 'assume_role_params'-Details bereitstellen, wie dargestellt.

Anmerkung

Um zu vermeiden, dass AWS STS Anmeldeinformationen bei jedem API-Vorgang unnötig abgerufen werden, können Sie die memoize Funktion verwenden, um die Anmeldeinformationen automatisch zu aktualisieren, wenn sie ablaufen. Nachfolgend finden Sie ein Codebeispiel.

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 ]);

Weitere Informationen zu finden Sie 'assume_role_params'unter AssumeRole.

SSO-Anbieter

Aws\Credentials\CredentialProvider::sso ist der Anbieter von Single-Sign-On-Anmeldeinformationen. Dieser Anbieter wird auch als Anbieter von AWS IAM Identity Center Anmeldeinformationen bezeichnet.

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 ]);

Wenn Sie ein benanntes Profil verwenden, ersetzen Sie den Namen Ihres Profils durch „default“ im vorherigen Beispiel. Weitere Informationen zum Einrichten benannter Profile finden Sie unter Freigegebene - config und -credentialsDateien im Referenzhandbuch für -SDKs und Tools. AWS SDKs Alternativ können Sie die AWS_PROFILE Umgebungsvariable verwenden, um anzugeben, welche Profileinstellungen verwendet werden sollen.

Weitere Informationen zur Funktionsweise des IAM-Identity-Center-Anbieters finden Sie unter Grundlegendes zur IAM-Identity-Center-Authentifizierung im AWS Referenzhandbuch zu -SDKs und Tools.

Verkettungsanbieter

Sie können Anmeldeinformationsanbieter mit der Funktion Aws\Credentials\CredentialProvider::chain() verketten. Diese Funktion akzeptiert eine variable Anzahl von Argumenten, wobei es sich jeweils um Anmeldeinformationsanbieter-Funktionen handelt. Diese Funktion gibt dann eine neue Funktion zurück, die eine Zusammensetzung der bereitgestellten Funktionen ist, sodass sie nacheinander aufgerufen werden, bis einer der Anbieter ein Promise zurückgibt, das erfolgreich erfüllt wurde.

Der defaultProvider verwendet diese Zusammenstellung, um mehrere Anbieter zu überprüfen, bevor ein Fehler zurückgegeben wird. Die Quelle des defaultProvider demonstriert die Nutzung der chain-Funktion.

// 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) ) ); }

Erstellen eines benutzerdefinierten Anbieters

Anmeldeinformationsanbieter sind einfach Funktionen, die beim Aufrufen ein Promise (GuzzleHttp\Promise\PromiseInterface) zurückgeben, das mit einem Aws\Credentials\CredentialsInterface-Objekt erfüllt oder mit einer Aws\Exception\CredentialsException abgelehnt wird.

Eine gute Vorgehensweise zum Erstellen von Anbietern ist es, eine Funktion zu erstellen, die aufgerufen wird, um den eigentlichen Anmeldeinformationsanbieter zu erstellen. Als Beispiel finden Sie hier die Quelle des env-Anbieters (für Beispielzwecke leicht abgeändert). Beachten Sie, dass es sich um eine Funktion handelt, die die eigentliche Anbieter-Funktion zurückgibt. Auf diese Weise können Sie problemlos die Anmeldeinformationsanbieter erstellen und sie als Werte übergeben.

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)); }; }

defaultProvider provider

Aws\Credentials\CredentialProvider::defaultProvider ist der standardmäßige Anmeldeinformationsanbieter. Dieser Anbieter wird verwendet, wenn Sie bei der Erstellung eines Clients die credentials-Option nicht angeben. Er versucht zuerst, Anmeldeinformationen aus Umgebungsvariablen zu laden, dann aus einer .ini-Datei (zuerst aus der Datei .aws/credentials, dann aus der Datei .aws/config) und dann von einem Instance-Profil (zuerst aus EcsCredentials-, dann aus Ec2-Metadaten).

Anmerkung

Das Ergebnis des Standard-Anbieters wird automatisch gespeichert.

ecsCredentials provider

Aws\Credentials\CredentialProvider::ecsCredentials versucht, Anmeldeinformationen über eine GET-Anforderung zu laden, deren URI durch die Umgebungsvariable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI im Container angegeben ist.

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 provider

Aws\Credentials\CredentialProvider::env versucht, Anmeldeinformationen aus Umgebungsvariablen zu laden.

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

assumeRoleWithWebIdentityCredentialProvider Anbieter

Aws\Credentials\CredentialProvider::assumeRoleWithWebIdentityCredentialProvider versucht Anmeldeinformationen durch Übernehmen einer Rolle zu laden. Wenn die Umgebungsvariablen AWS_ROLE_ARN und AWS_WEB_IDENTITY_TOKEN_FILE vorhanden sind, versucht der Anbieter, die mit AWS_ROLE_ARN angegebene Rolle unter Verwendung des Tokens auf dem Datenträger in dem mit AWS_WEB_IDENTITY_TOKEN_FILE angegebenen vollständigen Pfad zu übernehmen. Wenn Umgebungsvariablen verwendet werden, versucht der Anbieter, die Sitzung mit der Umgebungsvariablen AWS_ROLE_SESSION_NAME einzurichten.

Wenn keine Umgebungsvariablen festgelegt wurden, verwendet der Anbieter das Standardprofil oder das als AWS_PROFILE festgelegte Profil. Der Anbieter liest Profile standardmäßig in ~/.aws/credentials und ~/.aws/config und kann Profile lesen, die in der Konfigurationsoption filename angegeben sind. Der Anbieter übernimmt die in role_arn des Profils angegebene Rolle, indem ein Token in dem in web_identity_token_file angegebenen vollständigen Pfad gelesen wird. role_session_name wird verwendet, wenn dies im Profil festgelegt ist.

Der Anbieter wird als Teil der Standardkette aufgerufen und kann direkt aufgerufen werden.

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 ]);

Standardmäßig erbt dieser Anbieter von Anmeldeinformationen die konfigurierte Region, die vom verwendet wird, StsClient um die Rolle zu übernehmen. Optional StsClient kann ein vollständiger bereitgestellt werden. Anmeldeinformationen sollten false für alle bereitgestellten als festgelegt werden 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 ]);

ini provider

Aws\Credentials\CredentialProvider::ini versucht, Anmeldeinformationen aus einer ini-Anmeldeinformationsdatei zu laden. Standardmäßig versucht das SDK, das „Standard“-Profil aus der AWS credentials freigegebenen Datei unter zu laden~/.aws/credentials.

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 ]);

Sie können ein benutzerdefiniertes Profil oder einen .ini-Dateispeicherort verwenden, indem Sie der Funktion Argumente übergeben, die den Anbieter erstellt.

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

Prozessanbieter

Aws\Credentials\CredentialProvider::process versucht, Anmeldeinformationen aus einem credential_process zu laden, der in einer ini-Anmeldeinformationsdatei angegeben ist. Standardmäßig versucht das SDK, das „Standard“-Profil aus der AWS credentials freigegebenen Datei unter zu laden~/.aws/credentials. Das SDK ruft den Befehl „credential_process“ genau wie vorgegeben auf und liest dann JSON-Daten aus stdout. Der credential_process muss Anmeldeinformationen im folgenden Format in stdout schreiben:

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

SessionToken und Expiration sind optional. Falls vorhanden, werden die Anmeldeinformationen als temporär behandelt.

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 ]);

Sie können ein benutzerdefiniertes Profil oder einen .ini-Dateispeicherort verwenden, indem Sie der Funktion Argumente übergeben, die den Anbieter erstellt.

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

instanceProfile provider

Aws\Credentials\CredentialProvider::instanceProfile versucht, Anmeldeinformationen aus Amazon EC2-Instance-Profilen zu laden.

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 ]);

Standardmäßig versucht der Anbieter bis zu drei Mal, die Anmeldeinformationen abzurufen. Die Anzahl der Wiederholungsversuche kann mit der Option retries festgelegt werden. Wird der Option 0 zugewiesen, erfolgen keine Abrufversuche.

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

Sie können diesen Ladeversuch aus Amazon EC2-Instance-Profilen deaktivieren, indem Sie die AWS_EC2_METADATA_DISABLED Umgebungsvariable auf setzentrue.

Identifizierung von Anmeldeinformationen

Manchmal ist es notwendig, einen Anmeldeinformationsanbieter zu erstellen, der sich den vorherigen Rückgabewert merkt. Dies kann für die Performance nützlich sein, wenn das Laden von Anmeldeinformationen eine teure Operation ist oder wenn die KlasseAws\Sdk verwendet wird, um einen Anmeldeinformationsanbieter für mehrere Clients freizugeben. Sie können einem Anmeldeinformationsanbieter das Speichern hinzufügen, indem Sie die Anmeldeinformationsanbieter-Funktion in eine memoize-Funktion verpacken.

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());

Wenn die gespeicherten Anmeldeinformationen abgelaufen sind, ruft der Memorize-Wrapper den verpackten Anbieter auf, um die Anmeldeinformationen zu aktualisieren.