Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan penyedia kredensi
Penyedia kredensi adalah fungsi yang mengembalikan a GuzzleHttp\Promise\PromiseInterface
yang dipenuhi dengan Aws\Credentials\CredentialsInterface
instance atau ditolak dengan. Aws\Exception\CredentialsException
Anda dapat menggunakan penyedia kredensi untuk mengimplementasikan logika kustom Anda sendiri untuk membuat kredensional atau untuk mengoptimalkan pemuatan kredenal.
Penyedia kredensi diteruskan ke opsi konstruktor credentials
klien. Penyedia kredensi bersifat asinkron, yang memaksa mereka untuk dievaluasi secara malas setiap kali operasi API dipanggil. Dengan demikian, meneruskan fungsi penyedia kredensi ke konstruktor klien SDK tidak segera memvalidasi kredensialnya. Jika penyedia kredensi tidak mengembalikan objek kredensial, operasi API akan ditolak dengan file. 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 ]);
Penyedia Bawaan di SDK
SDK menyediakan beberapa penyedia bawaan yang dapat Anda gabungkan dengan penyedia kustom apa pun. Untuk informasi selengkapnya tentang mengonfigurasi penyedia standar dan rantai penyedia kredensi di SDK, lihat Penyedia kredensi terstandarisasi di Panduan Referensi AWS SDK dan Alat.AWS
penting
Penyedia kredensi dipanggil setiap kali operasi API dilakukan. Jika memuat kredensi adalah tugas yang mahal (misalnya, memuat dari disk atau sumber daya jaringan), atau jika kredensil tidak di-cache oleh penyedia Anda, pertimbangkan untuk membungkus penyedia kredensi Anda dalam suatu fungsi. Aws\Credentials\CredentialProvider::memoize
Penyedia kredensi default yang digunakan oleh SDK secara otomatis memoisasi.
Penyedia AssumeRole
Jika Anda menggunakan Aws\Credentials\AssumeRoleCredentialProvider
untuk membuat kredensil dengan mengambil peran, Anda perlu memberikan 'client'
informasi dengan StsClient
objek dan 'assume_role_params'
detail, seperti yang ditunjukkan.
catatan
Untuk menghindari pengambilan AWS STS kredensil yang tidak perlu pada setiap operasi API, Anda dapat menggunakan memoize
fungsi tersebut untuk menangani penyegaran kredenal secara otomatis saat kredensialnya kedaluwarsa. Lihat kode berikut sebagai contoh.
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 ]);
Untuk informasi lebih lanjut mengenai'assume_role_params'
, lihat AssumeRole.
Penyedia SSO
Aws\Credentials\CredentialProvider::sso
adalah penyedia kredensi masuk tunggal. Penyedia ini juga dikenal sebagai penyedia AWS IAM Identity Center kredensi.
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 ]);
Jika Anda menggunakan profil bernama, ganti nama profil Anda dengan 'default
' pada contoh sebelumnya. Untuk mempelajari selengkapnya tentang menyiapkan profil bernama, lihat Berbagi config
dan credentials
file di Panduan Referensi AWS SDK dan Alat. Atau, Anda dapat menggunakan variabel AWS_PROFILE
lingkungan untuk menentukan pengaturan profil mana yang akan digunakan.
Untuk memahami lebih lanjut cara kerja penyedia Pusat Identitas IAM, lihat Memahami autentikasi Pusat Identitas IAM di Panduan Referensi AWS SDK dan Alat.
Penyedia rantai
Anda dapat menghubungkan penyedia kredensi dengan menggunakan Aws\Credentials\CredentialProvider::chain()
fungsi tersebut. Fungsi ini menerima sejumlah argumen variadik, yang masing-masing merupakan fungsi penyedia kredensi. Fungsi ini kemudian mengembalikan fungsi baru yang merupakan komposisi fungsi yang disediakan, sehingga mereka dipanggil satu demi satu sampai salah satu penyedia mengembalikan janji yang berhasil dipenuhi.
defaultProvider
Menggunakan komposisi ini untuk memeriksa beberapa penyedia sebelum gagal. Sumber defaultProvider
menunjukkan penggunaan chain
fungsi.
// 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) ) ); }
Membuat penyedia kustom
Penyedia kredensi hanyalah fungsi yang ketika dipanggil mengembalikan promise (GuzzleHttp\Promise\PromiseInterface
) yang dipenuhi dengan Aws\Credentials\CredentialsInterface
objek atau ditolak dengan. Aws\Exception\CredentialsException
Praktik terbaik untuk membuat penyedia adalah membuat fungsi yang dipanggil untuk membuat penyedia kredensi yang sebenarnya. Sebagai contoh, inilah sumber env
penyedia (sedikit dimodifikasi untuk tujuan contoh). Perhatikan bahwa itu adalah fungsi yang mengembalikan fungsi penyedia yang sebenarnya. Ini memungkinkan Anda untuk dengan mudah membuat penyedia kredensi dan menyebarkannya sebagai nilai.
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)); }; }
Penyedia DefaultProvider
Aws\Credentials\CredentialProvider::defaultProvider
adalah penyedia kredensi default. Penyedia ini digunakan jika Anda menghilangkan credentials
opsi saat membuat klien. Ini pertama kali mencoba memuat kredensil dari variabel lingkungan, kemudian dari file.ini (file pertama, diikuti oleh .aws/credentials
.aws/config
file), dan kemudian dari profil instance (EcsCredentials
pertama, diikuti oleh Ec2
metadata).
catatan
Hasil dari penyedia default secara otomatis memoisasi.
Penyedia EcScredentials
Aws\Credentials\CredentialProvider::ecsCredentials
mencoba memuat kredensil dengan GET
permintaan, yang URI ditentukan oleh variabel lingkungan AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
dalam wadah.
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 ]);
penyedia env
Aws\Credentials\CredentialProvider::env
mencoba memuat kredensi dari variabel lingkungan.
use Aws\Credentials\CredentialProvider; use Aws\S3\S3Client; $client = new S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', 'credentials' => CredentialProvider::env() ]);
assumeRoleWithWebIdentityCredentialProvider penyedia
Aws\Credentials\CredentialProvider::assumeRoleWithWebIdentityCredentialProvider
mencoba memuat kredensional dengan mengasumsikan peran. Jika variabel lingkungan AWS_ROLE_ARN
dan AWS_WEB_IDENTITY_TOKEN_FILE
ada, penyedia akan mencoba untuk mengambil peran yang ditentukan saat AWS_ROLE_ARN
menggunakan token pada disk pada jalur lengkap yang ditentukan dalamAWS_WEB_IDENTITY_TOKEN_FILE
. Jika variabel lingkungan digunakan, penyedia akan mencoba untuk mengatur sesi dari variabel AWS_ROLE_SESSION_NAME
lingkungan.
Jika variabel lingkungan tidak disetel, penyedia akan menggunakan profil default, atau yang ditetapkan sebagaiAWS_PROFILE
. Penyedia membaca profil dari ~/.aws/credentials
dan secara ~/.aws/config
default, dan dapat membaca dari profil yang ditentukan dalam opsi filename
konfigurasi. Penyedia akan mengambil peran dalam role_arn
profil, membaca token dari jalur lengkap yang ditetapkanweb_identity_token_file
. role_session_name
akan digunakan jika diatur pada profil.
Penyedia disebut sebagai bagian dari rantai default dan dapat dipanggil secara langsung.
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 ]);
Secara default, penyedia kredensi ini akan mewarisi wilayah yang dikonfigurasi yang akan digunakan oleh StsClient untuk mengambil peran. Secara opsional, penuh StsClient dapat disediakan. Kredensi harus ditetapkan seperti false
pada apa pun yang disediakan. 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 ]);
penyedia ini
Aws\Credentials\CredentialProvider::ini
mencoba memuat kredensi dari file kredensi ini. Secara default, SDK mencoba memuat profil “default” dari AWS credentials
file bersama yang terletak di~/.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 ]);
Anda dapat menggunakan profil kustom atau lokasi file.ini dengan memberikan argumen ke fungsi yang membuat penyedia.
$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 ]);
penyedia proses
Aws\Credentials\CredentialProvider::process
mencoba memuat kredensi dari credential_process yang ditentukan dalam file kredensi ini. Secara default, SDK mencoba memuat profil “default” dari AWS credentials
file bersama yang terletak di~/.aws/credentials
. SDK akan memanggil perintah credential_process persis seperti yang diberikan dan kemudian membaca data JSON dari stdout. Credential_process harus menulis kredensi ke stdout dalam format berikut:
{ "Version": 1, "AccessKeyId": "", "SecretAccessKey": "", "SessionToken": "", "Expiration": "" }
SessionToken
dan Expiration
bersifat opsional. Jika ada, kredensialnya akan diperlakukan sebagai sementara.
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 ]);
Anda dapat menggunakan profil kustom atau lokasi file.ini dengan memberikan argumen ke fungsi yang membuat penyedia.
$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 ]);
Penyedia InstanceProfile
Aws\Credentials\CredentialProvider::instanceProfile
mencoba memuat kredensional dari profil instans 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 ]);
Secara default, penyedia mencoba lagi mengambil kredensi hingga tiga kali. Jumlah percobaan ulang dapat diatur dengan retries
opsi, dan dinonaktifkan sepenuhnya dengan mengatur opsi ke0
.
use Aws\Credentials\CredentialProvider; $provider = CredentialProvider::instanceProfile([ 'retries' => 0 ]); $memoizedProvider = CredentialProvider::memoize($provider);
catatan
Anda dapat menonaktifkan upaya pemuatan ini dari profil instans Amazon EC2 dengan menyetel variabel AWS_EC2_METADATA_DISABLED
lingkungan ke. true
Memoisasi kredensi
Terkadang Anda mungkin perlu membuat penyedia kredensi yang mengingat nilai pengembalian sebelumnya. Ini dapat berguna untuk kinerja saat memuat kredensil adalah operasi yang mahal atau saat menggunakan Aws\Sdk
kelas untuk berbagi penyedia kredensi di beberapa klien. Anda dapat menambahkan memoisasi ke penyedia kredensi dengan membungkus fungsi penyedia kredensi dalam suatu fungsi. 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());
Saat kredensil yang dimemoisasi kedaluwarsa, pembungkus memoize memanggil penyedia yang dibungkus dalam upaya untuk menyegarkan kredensil.