全部产品
Search
文档中心

Alibaba Cloud SDK:Kelola kredensial akses

更新时间:Jul 06, 2025

Saat Anda memanggil operasi API untuk mengelola sumber daya cloud dengan menggunakan Alibaba Cloud SDK, Anda harus mengonfigurasi informasi kredensial yang valid. Alat Kredensial dari Alibaba Cloud menyediakan serangkaian fitur yang mudah digunakan dan mendukung berbagai jenis kredensial, termasuk kredensial default, pasangan AccessKey, dan token Layanan Keamanan (STS). Alat ini membantu Anda mendapatkan dan mengelola kredensial. Topik ini menjelaskan cara mengonfigurasi berbagai jenis kredensial serta urutan pengambilan kredensial default oleh alat Kredensial. Anda dapat mengembangkan pemahaman menyeluruh tentang konfigurasi dan pengelolaan kredensial di Alibaba Cloud SDK, memastikan bahwa Anda dapat melakukan operasi pada sumber daya cloud secara efisien dan aman.

Informasi latar belakang

Kredensial adalah sekumpulan informasi yang digunakan untuk membuktikan identitas pengguna. Saat masuk ke sistem, Anda harus menggunakan kredensial yang valid untuk menyelesaikan otentikasi identitas. Jenis-jenis kredensial berikut umumnya digunakan:

  1. Pasangan AccessKey dari akun Alibaba Cloud atau Pengguna Resource Access Management (RAM). Pasangan AccessKey berlaku secara permanen dan terdiri dari ID AccessKey dan Rahasia AccessKey.

  2. Token STS dari Peran RAM. Token STS adalah kredensial sementara. Anda dapat menentukan periode validitas dan izin akses untuk token STS. Untuk informasi lebih lanjut, lihat Apa itu STS?

  3. Token bearer. Ini digunakan untuk otentikasi dan otorisasi identitas.

Prasyarat

  • PHP 5.6 atau versi lebih baru telah diinstal. Kami merekomendasikan agar Anda menginstal cURL 7.16.2 atau versi lebih baru dengan menggunakan Transport Layer Security (TLS) dan mengaktifkan ekstensi cURL.

  • Alibaba Cloud SDK V2.0 telah diinstal.

Instal alat Kredensial

Jika Anda memiliki Composer yang diinstal secara global di sistem Anda, jalankan perintah berikut di direktori proyek Anda untuk menginstal Alibaba Cloud Credentials untuk PHP sebagai dependensi:

composer require alibabacloud/credentials
  • Kami merekomendasikan agar Anda menggunakan versi terbaru dari Alibaba Cloud Credentials untuk PHP. Hal ini memastikan bahwa semua kredensial didukung.

  • Untuk informasi tentang semua versi rilis dari Alibaba Cloud Credentials untuk PHP, lihat CHANGELOG.md.

Parameter dari alat Kredensial

Parameter dari alat Kredensial didefinisikan dalam kelas AlibabaCloud\Credentials\Credential\Config. Jenis kredensial ditentukan oleh parameter type, yang merupakan parameter wajib dalam konfigurasi. Setelah Anda menentukan jenis kredensial, konfigurasikan parameter berdasarkan jenis kredensial tersebut. Tabel berikut menjelaskan nilai-nilai valid dari parameter type dan parameter yang didukung oleh setiap jenis kredensial. Dalam tabel, tanda centang () menunjukkan bahwa parameter tersebut wajib, tanda hubung (-) menunjukkan bahwa parameter tersebut opsional, dan tanda X (×) menunjukkan bahwa parameter tersebut tidak didukung.

Catatan

Kami merekomendasikan agar Anda tidak menggunakan parameter yang tidak terdaftar dalam tabel berikut.

type

access_key

sts

ram_role_arn

ecs_ram_role

oidc_role_arn

credentials_uri

bearer

accessKeyId: ID AccessKey.

×

×

×

×

accessKeySecret: Rahasia AccessKey.

×

×

×

×

securityToken: Token Layanan Keamanan (STS).

×

-

×

×

×

×

roleArn: Nama Sumber Daya Alibaba Cloud (ARN) dari Peran Resource Access Management (RAM).

×

×

×

×

×

roleSessionName: nama sesi kustom. Format defaultnya adalah phpSdkRoleSessionName.

×

×

-

×

-

×

×

roleName: menentukan nama Peran RAM.

×

×

×

-

×

×

×

disableIMDSv1: menentukan apakah akan memaksa menggunakan mode penguatan keamanan (IMDSv2). Jika Anda mengatur parameter ini ke true, mode penguatan keamanan (IMDSv2) digunakan. Nilai default: false.

×

×

×

-

×

×

×

bearerToken: token bearer.

×

×

×

×

×

×

policy: kebijakan kustom.

×

×

-

×

-

×

×

roleSessionExpiration: periode waktu habis sesi. Nilai default: 3600. Unit: detik.

×

×

-

×

-

×

×

oidcProviderArn: ARN dari Penyedia Identitas OpenID Connect (OIDC) (IdP).

×

×

×

×

×

×

oidcTokenFilePath: jalur absolut ke token OIDC.

×

×

×

×

×

×

externalId: ID eksternal dari peran, yang digunakan untuk mencegah masalah deputy yang bingung. Untuk informasi lebih lanjut, lihat Gunakan ID eksternal untuk mencegah masalah deputy yang bingung.

×

×

-

×

×

×

×

credentialsURI: URI dari kredensial.

×

×

×

×

×

×

STSEndpoint: titik akhir STS. Titik akhir VPC dan Internet didukung. Nilai default: sts.aliyuncs.com. Untuk informasi lebih lanjut tentang nilai-nilai yang valid, lihat Titik Akhir.

×

×

-

×

-

×

×

timeout: periode waktu habis permintaan pembacaan HTTP. Nilai default: 5000. Unit: milidetik.

×

×

-

-

-

-

×

connectTimeout: periode waktu habis permintaan koneksi HTTP. Nilai default: 10000. Unit: milidetik.

×

×

-

-

-

-

×

Inisialisasi Klien Kredensial

Anda dapat menggunakan salah satu metode berikut untuk menginisialisasi Klien Kredensial berdasarkan kebutuhan bisnis Anda:

Penting
  • Jika Anda menggunakan pasangan AccessKey teks biasa dalam proyek, pasangan AccessKey tersebut mungkin bocor karena manajemen izin yang tidak tepat pada repositori kode. Hal ini dapat mengancam keamanan semua sumber daya dalam akun tempat pasangan AccessKey tersebut berada. Kami merekomendasikan agar Anda menyimpan pasangan AccessKey dalam variabel lingkungan atau file konfigurasi.

  • Kami merekomendasikan agar Anda menginisialisasi Klien Kredensial dalam mode instansi tunggal. Mode ini tidak hanya mengaktifkan fitur caching kredensial dari SDK, tetapi juga secara efektif mencegah masalah kontrol lalu lintas dan pemborosan sumber daya performa yang disebabkan oleh banyak panggilan API. Untuk informasi lebih lanjut, lihat bagian Mekanisme Pembaruan Otomatis Kredensial Sesi dari topik ini.

Metode 1: Gunakan rantai penyedia kredensial default

Jika Anda tidak menentukan metode untuk menginisialisasi Klien Kredensial, rantai penyedia kredensial default digunakan. Untuk informasi lebih lanjut, lihat Rantai Penyedia Kredensial Default.

<?php

use AlibabaCloud\Credentials\Credential;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Inisialisasi Klien Kredensial tanpa menentukan metode.
$credClient = new Credential();

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari Elastic Compute Service (ECS). Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Gunakan kredensial default untuk menginisialisasi Klien Kredensial SDK. 
$credentialClient = new Credential();
$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credentialClient,
    // Titik akhir layanan cloud.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 2: Gunakan pasangan AccessKey

Metode ini memungkinkan Anda membuat pasangan AccessKey untuk menginisialisasi Klien Kredensial. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.

Peringatan

Akun Alibaba Cloud memiliki izin penuh atas sumber daya dalam akun tersebut. Kebocoran pasangan AccessKey dari akun Alibaba Cloud menimbulkan ancaman serius terhadap sistem.

Oleh karena itu, kami merekomendasikan agar Anda menggunakan pasangan AccessKey dari pengguna RAM yang diberi izin berdasarkan prinsip hak istimewa minimal (PoLP) untuk menginisialisasi Klien Kredensial.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'access_key',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
]);

$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Gunakan pasangan AccessKey untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    'type' => 'access_key',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 3: Gunakan token STS

Metode ini memungkinkan Anda menggunakan token STS statis untuk menginisialisasi Klien Kredensial. Untuk informasi lebih lanjut tentang cara mendapatkan token STS, lihat Apa itu STS?. Contoh berikut menunjukkan cara menginisialisasi Klien Kredensial dengan menggunakan token STS. Contoh ini tidak menunjukkan cara mendapatkan token STS.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'sts',
    // Dapatkan ID AccessKey dari variabel lingkungan.
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    // Dapatkan Rahasia AccessKey dari variabel lingkungan.
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // Dapatkan token STS dari variabel lingkungan.
    'securityToken' => getenv('ALIBABA_CLOUD_SECURITY_TOKEN'),
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP dan STS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\SDK\Sts\V20150401\Models\AssumeRoleRequest;
use AlibabaCloud\SDK\Sts\V20150401\Sts;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Buat klien STS dan panggil operasi AssumeRole untuk mendapatkan token STS. 
$config = new Config([
    // Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Jika variabel lingkungan tidak ditentukan, tentukan mereka. 
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    'endpoint' => 'sts.aliyuncs.com',
]);
$stsClient = new Sts($config);
$request = new AssumeRoleRequest([
    // Tentukan ARN dari peran RAM yang ingin diasumsikan oleh aplikasi Anda dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.  
    'roleArn' => '<RoleArn>',
    // Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.  
    'roleSessionName' => '<RoleSessionName>',
]);
$assumeRoleResp = $stsClient->assumeRole($request);
$assumeRoleCredentials = $assumeRoleResp->body->credentials;

// Gunakan token STS untuk menginisialisasi Klien Kredensial. 
$credentialConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'sts',
    'accessKeyId' => $assumeRoleCredentials->accessKeyId,
    'accessKeySecret' => $assumeRoleCredentials->accessKeySecret,
    'securityToken' => $assumeRoleCredentials->securityToken,
]);
$credentialClient = new Credential($credentialConfig);
$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credentialClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);// Kembalikan kode status.
echo $resp->statusCode;// Dapatkan respons.
var_dump($resp);

Metode 4: Gunakan pasangan AccessKey dan peran RAM

Logika dasar metode ini adalah menggunakan token STS untuk menginisialisasi Klien Kredensial. Setelah Anda menentukan ARN dari peran RAM, alat Kredensial mendapatkan token keamanan dari STS. Anda juga dapat menggunakan parameter policy untuk membatasi izin peran RAM.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'ram_role_arn',
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // Tentukan ARN dari peran RAM yang ingin diasumsikan oleh aplikasi Anda dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Tentukan periode validitas sesi. Unit: detik. Nilai default: 3600.
    'roleSessionExpiration' => 3600,
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Gunakan pasangan AccessKey dan peran RAM untuk menginisialisasi Klien Kredensial. 
$credentialConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'ram_role_arn',
    // Dapatkan ID AccessKey dari variabel lingkungan. 
    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    // Dapatkan Rahasia AccessKey dari variabel lingkungan. 
    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    // Tentukan ARN dari peran RAM yang ingin diasumsikan oleh aplikasi Anda dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Tentukan periode validitas sesi. Unit: detik. Nilai default: 3600.
    'roleSessionExpiration' => 3600,
]);
$credentialClient = new Credential($credentialConfig);

$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credentialClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 5: Gunakan peran RAM dari instance ECS

Instance ECS dan instance kontainer elastis dapat diberi peran RAM. Program yang berjalan pada instance tersebut dapat menggunakan alat Kredensial untuk secara otomatis mendapatkan token STS untuk peran RAM. Token STS tersebut dapat digunakan untuk menginisialisasi Klien Kredensial.

Secara default, alat Kredensial mengakses server metadata ECS dalam mode penguatan keamanan (IMDSv2). Jika terjadi pengecualian, alat Kredensial beralih ke mode normal (IMDSv1). Anda juga dapat mengonfigurasi parameter disableIMDSv1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE untuk menentukan logika penanganan pengecualian. Nilai valid:

  • false (default): Alat Kredensial terus mendapatkan kredensial akses dalam mode normal (IMDSv1).

  • true: Pengecualian dilemparkan dan alat Kredensial terus mendapatkan kredensial akses dalam mode penguatan keamanan (IMDSv2).

Konfigurasi untuk server metadata menentukan apakah server mendukung mode penguatan keamanan (IMDSv2).

Selain itu, Anda dapat menentukan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk menonaktifkan akses dari alat Kredensial ke server metadata ECS.

Catatan
  • Jika Anda mendapatkan token STS dalam mode penguatan keamanan (IMDSv2), pastikan versi alat Kredensial adalah 1.2.0 atau lebih baru.

  • Untuk informasi lebih lanjut tentang metadata instance ECS, lihat Dapatkan Metadata Instance.

  • Untuk informasi lebih lanjut tentang cara melampirkan peran RAM ke instance ECS, lihat bagian "Buat Peran RAM Instance dan Lampirkan Peran RAM Instance ke Instance ECS" dari topik Peran RAM Instance. Untuk informasi lebih lanjut tentang cara melampirkan peran RAM ke instance kontainer elastis, lihat bagian "Tetapkan Peran RAM Instance ke Instance Kontainer Elastis" dari topik Gunakan Peran RAM Instance dengan Memanggil Operasi API.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'ecs_ram_role',
    // Opsional. Tentukan nama peran RAM dari instance ECS dengan menentukan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. Jika Anda tidak menentukan parameter ini, nilainya akan diperoleh secara otomatis. Kami merekomendasikan agar Anda menentukan parameter ini untuk mengurangi jumlah permintaan.
    'roleName' => '<RoleName>',
    # Nilai default: false. Parameter ini opsional. true: Mode penguatan keamanan (IMDSv2) digunakan secara paksa. false: Sistem mencoba mendapatkan kredensial akses dalam mode penguatan keamanan (IMDSv2). Jika upaya gagal, sistem beralih ke mode normal (IMDSv1) untuk mendapatkan kredensial akses.
    // 'disableIMDSv1' => true,
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Gunakan peran RAM dari instance ECS untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    'type' => 'ecs_ram_role',
    // Opsional. Tentukan nama peran RAM dari instance ECS dengan menentukan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. Jika Anda tidak menentukan parameter ini, nilainya akan diperoleh secara otomatis. Kami merekomendasikan agar Anda menentukan parameter ini untuk mengurangi jumlah permintaan.
    'roleName' => '<RoleName>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 6: Gunakan peran RAM dari OIDC IdP

Untuk memastikan keamanan sumber daya cloud dan memungkinkan aplikasi yang tidak tepercaya untuk mendapatkan token STS yang diperlukan secara aman, Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk memberikan izin minimum yang diperlukan kepada aplikasi. ACK membuat dan memasang file token OpenID Connect (OIDC) yang sesuai untuk pod aplikasi yang berbeda, dan meneruskan informasi konfigurasi terkait ke variabel lingkungan. Alat Kredensial mendapatkan informasi konfigurasi dari variabel lingkungan dan memanggil operasi AssumeRoleWithOIDC dari STS untuk mendapatkan token STS untuk peran yang dilampirkan.

Variabel lingkungan berikut disuntikkan ke dalam pod:

ALIBABA_CLOUD_ROLE_ARN: ARN dari peran RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN dari penyedia identitas OIDC (IdP).

ALIBABA_CLOUD_OIDC_TOKEN_FILE: jalur file token OIDC.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Gunakan peran RAM dari OIDC IdP untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'oidc_role_arn',
    // Tentukan ARN dari OIDC IdP dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    'oidcProviderArn' => '<OidcProviderArn>',
    // Tentukan jalur file token OIDC dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // Tentukan ARN dari peran RAM dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Tentukan periode validitas sesi. 
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Gunakan peran RAM dari OIDC IdP untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'oidc_role_arn',
    // Tentukan ARN dari OIDC IdP dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    'oidcProviderArn' => '<OidcProviderArn>',
    // Tentukan jalur file token OIDC dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // Tentukan ARN dari peran RAM dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Tentukan periode validitas sesi. 
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 7: Gunakan URI

Metode ini memungkinkan Anda untuk mengenkapsulasi token STS dalam aplikasi Anda dan menyediakan URI kustom ke sumber daya eksternal. Layanan lain hanya dapat memperoleh token STS melalui URI tersebut. Hal ini meminimalkan risiko paparan AccessKey. Alat Kredensial memungkinkan Anda mendapatkan token STS dengan memanggil URI layanan untuk menginisialisasi Klien Kredensial.

<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

// Gunakan pengenal sumber daya seragam (URI) untuk menginisialisasi Klien Kredensial. 
$credConfig = new Config([
    // Tentukan jenis kredensial. 
    'type' => 'credentials_uri',
    // Dapatkan URI kredensial dalam format http://local_or_remote_uri/ dengan menentukan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
    'credentialsURI' => '<CredentialsUri>',
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getAccessKeyId();
$credential->getAccessKeySecret();
$credential->getSecurityToken();

URI harus memenuhi persyaratan berikut:

  • Permintaan GET didukung.

  • Kode status HTTP 200 dapat dikembalikan.

  • Struktur badan respons berikut digunakan:

    {
      "AccessKeyId": "AccessKeyId",
      "AccessKeySecret": "AccessKeySecret",
      "Expiration": "2021-09-26T03:46:38Z",
      "SecurityToken": "SecurityToken"
    }

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi DescribeRegions dari ECS. Sebelum Anda memanggil operasi ini, Anda harus menginstal ECS SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig; 
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

// Gunakan URI untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'credentials_uri',
    // Dapatkan URI kredensial dalam format http://local_or_remote_uri/ dengan menentukan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
    'credentialsURI' => '<CredentialsUri>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien SDK ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Metode 8: Gunakan token bearer

Hanya Cloud Call Center yang mengizinkan Anda menggunakan token bearer untuk menginisialisasi klien SDK.

<?php

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

$credConfig = new Config([
    'type' => 'bearer',
    // Tentukan token bearer.
    'bearerToken' => '<BearerToken>',
]);
$credClient = new Credential($credConfig);

$credential = $credClient->getCredential();
$credential->getBearerToken();

Contoh

Kode contoh berikut memberikan contoh cara memanggil operasi GetInstance dari Cloud Call Center. Sebelum Anda memanggil operasi ini, Anda harus menginstal Cloud Call Center SDK for PHP.

<?php

namespace AlibabaCloud\SDK\Sample;

// Aktifkan autoloading untuk Composer dengan menggunakan file autoload.php di direktori vendor.
require_once 'vendor/autoload.php';

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig; 
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\CCC\V20200701\CCC;
use AlibabaCloud\SDK\CCC\V20200701\Models\GetInstanceRequest;

// Gunakan token bearer untuk menginisialisasi Klien Kredensial. 
$credConfig = new CredentialConfig([
    // Tentukan jenis kredensial. 
    'type' => 'bearer',
    // Tentukan token bearer.
    'bearerToken' => '<BearerToken>',
]);
$credClient = new Credential($credConfig);

$config = new Config([
    // Gunakan paket SDK Kredensial untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Tentukan titik akhir ECS.
    'endpoint' => 'ccc.cn-shanghai.aliyuncs.com'
]);
$cccClient = new CCC($config);
// Inisialisasi permintaan.
$getInstanceRequest = new GetInstanceRequest([
    "instanceId" => "ccc-test"
]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $cccClient->getInstanceWithOptions($getInstanceRequest, $runtime);
// Kembalikan kode status.
echo $resp->statusCode;
// Dapatkan respons.
var_dump($resp);

Rantai penyedia kredensial default

Jika Anda ingin menggunakan berbagai jenis kredensial di lingkungan pengembangan dan produksi aplikasi Anda, umumnya Anda perlu mendapatkan informasi lingkungan dari kode dan menulis cabang kode untuk mendapatkan kredensial yang berbeda untuk lingkungan pengembangan dan produksi. Rantai penyedia kredensial default dari Alibaba Cloud Credentials for Java memungkinkan Anda menggunakan kode yang sama untuk mendapatkan kredensial untuk lingkungan yang berbeda berdasarkan konfigurasi yang independen dari aplikasi. Jika Anda menggunakan $credential = new Credential(); untuk menginisialisasi Klien Kredensial tanpa menentukan metode inisialisasi, alat Kredensial mendapatkan informasi kredensial dalam urutan berikut:

1. Dapatkan informasi kredensial dari variabel lingkungan

Jika tidak ada informasi kredensial yang ditemukan dalam atribut sistem, Kredensial akan terus memeriksa variabel lingkungan.

  • Jika kedua variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ditentukan, mereka digunakan sebagai kredensial default.

  • Jika ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN ditentukan, token STS digunakan sebagai kredensial default.

2. Dapatkan informasi kredensial dengan menggunakan peran RAM dari OIDC IdP

Jika tidak ada kredensial dengan prioritas lebih tinggi yang ditemukan, alat Kredensial memeriksa variabel lingkungan berikut yang terkait dengan peran RAM dari OIDC IdP:

  • ALIBABA_CLOUD_ROLE_ARN: ARN dari peran RAM.

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN dari OIDC IdP.

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: jalur file token OIDC.

Jika ketiga variabel lingkungan tersebut ditentukan dan valid, alat Kredensial menggunakan variabel lingkungan tersebut untuk memanggil operasi AssumeRoleWithOIDC dari STS untuk mendapatkan token STS sebagai kredensial default.

3. Dapatkan informasi kredensial dari file config.json

Jika tidak ada kredensial dengan prioritas lebih tinggi yang ditemukan, alat Kredensial mencoba memuat file config.json. Jalur file default:

  • Linux: ~/.aliyun/config.json

  • Windows: C:\Users\USER_NAME\.aliyun\config.json

Jangan ubah jalur default di atas. Jika Anda ingin menggunakan metode ini untuk mengonfigurasi kredensial akses, buat file config.json secara manual di jalur yang sesuai. Contoh:

{
	"current": "default",
	"profiles": [
		{
			"name": "default",
			"mode": "AK",
			"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
			"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
		},
		{
			"name": "client",
			"mode": "StsToken",
			"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
			"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
			"sts_token": "<SECURITY_TOKEN>"
		},
		{
			"name":"client1",
			"mode":"RamRoleArn",
			"access_key_id":"<ALIBABA_CLOUD_ACCESS_KEY_ID>",
			"access_key_secret":"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
			"ram_role_arn":"<ROLE_ARN>",
			"ram_session_name":"<ROLE_SESSION_NAME>",
			"expired_seconds":3600
		},
		{
			"name":"client2",
			"mode":"EcsRamRole",
			"ram_role_name":"<RAM_ROLE_ARN>"
		},
		{
			"name":"client3",
			"mode":"OIDC",
			"oidc_provider_arn":"<OIDC_PROVIDER_ARN>",
			"oidc_token_file":"<OIDC_TOKEN_FILE>",
			"ram_role_arn":"<ROLE_ARN>",
			"ram_session_name":"<ROLE_SESSION_NAME>",
			"expired_seconds":3600
		},
		{
			"name":"client4",
			"mode":"ChainableRamRoleArn",
			"source_profile":"<PROFILE_NAME>",
			"ram_role_arn":"<ROLE_ARN>",
			"ram_session_name":"<ROLE_SESSION_NAME>",
			"expired_seconds":3600
		}
	]
}

Dalam file config.json, Anda dapat menggunakan mode untuk menentukan jenis kredensial:

  • AK: menggunakan pasangan AccessKey dari pengguna RAM untuk mendapatkan informasi kredensial.

  • StsToken: menggunakan token STS sebagai informasi kredensial.

  • RamRoleArn: menggunakan ARN dari peran RAM untuk mendapatkan informasi kredensial.

  • EcsRamRole: menggunakan peran RAM yang dilampirkan pada instance ECS untuk mendapatkan informasi kredensial.

  • OIDC: menggunakan ARN dari OIDC IdP dan file token OIDC untuk mendapatkan informasi kredensial.

  • ChainableRamRoleArn: menggunakan rantai peran dan menentukan kredensial akses di file JSON lain untuk mendapatkan informasi kredensial.

Catatan

Tetapkan name ke nama kredensial, dan konfigurasikan parameter lain berdasarkan kebutuhan bisnis Anda.

Setelah Anda menyelesaikan konfigurasi, alat Kredensial memilih kredensial yang ditentukan oleh parameter current dalam file konfigurasi dan menginisialisasi klien. Anda juga dapat menentukan variabel lingkungan ALIBABA_CLOUD_PROFILE untuk menentukan informasi kredensial. Misalnya, Anda dapat menyetel variabel lingkungan ALIBABA_CLOUD_PROFILE ke client1.

4. Dapatkan informasi kredensial dengan menggunakan peran RAM dari instance ECS

Jika tidak ada kredensial dengan prioritas lebih tinggi yang ditemukan, alat Kredensial mencoba menggunakan peran RAM yang ditetapkan ke instance ECS untuk mendapatkan kredensial. Secara default, alat Kredensial mengakses server metadata ECS dalam mode penguatan keamanan (IMDSv2) untuk mendapatkan token STS dari peran RAM yang digunakan oleh instance ECS dan menggunakan token STS sebagai kredensial default. Alat Kredensial secara otomatis mengakses server metadata ECS untuk mendapatkan nama peran RAM (RoleName) dan kemudian mendapatkan kredensial. Dua permintaan dikirim dalam proses ini. Jika Anda ingin mengirim hanya satu permintaan, tambahkan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk menentukan nama peran RAM. Jika terjadi pengecualian dalam mode penguatan keamanan (IMDSv2), alat Kredensial mendapatkan kredensial akses dalam mode normal (IMDSv1). Anda juga dapat mengonfigurasi variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE untuk menentukan logika penanganan pengecualian. Nilai valid:

  1. false: Alat Kredensial terus mendapatkan kredensial akses dalam mode normal (IMDSv1).

  2. true: Pengecualian dilemparkan dan alat Kredensial terus mendapatkan kredensial akses dalam mode penguatan keamanan.

Konfigurasi untuk server metadata menentukan apakah server mendukung mode penguatan keamanan (IMDSv2).

Selain itu, Anda dapat menentukan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk menonaktifkan akses dari alat Kredensial ke server metadata ECS.

Catatan
  • Untuk informasi lebih lanjut tentang metadata instance ECS, lihat Dapatkan Metadata Instance.

  • Untuk informasi lebih lanjut tentang cara melampirkan peran RAM ke instance ECS, lihat bagian "Buat Peran RAM Instance dan Lampirkan Peran RAM Instance ke Instance ECS" dari topik Peran RAM Instance. Untuk informasi lebih lanjut tentang cara melampirkan peran RAM ke instance kontainer elastis, lihat bagian "Tetapkan Peran RAM Instance ke Instance Kontainer Elastis" dari topik Gunakan Peran RAM Instance dengan Memanggil Operasi API.

5. Dapatkan informasi kredensial berdasarkan URI

Jika tidak ada kredensial valid yang diperoleh dengan menggunakan metode sebelumnya, alat Kredensial memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel lingkungan ini ada dan menentukan URI yang valid, alat Kredensial memulai permintaan HTTP untuk mendapatkan token STS sebagai kredensial default.

Rantai penyedia kredensial kustom

Anda dapat menggunakan rantai penyedia kredensial kustom untuk mendapatkan kredensial, atau menulis closure untuk meneruskan penyedia.

<?php

use AlibabaCloud\Credentials\Providers\ChainProvider;

ChainProvider::set(
        ChainProvider::ini(),
        ChainProvider::env(),
        ChainProvider::instance()
);

Mekanisme pembaruan otomatis kredensial sesi

Kredensial sesi mencakup ARN dari peran RAM (RamRoleArn), peran RAM dari instance ECS, peran RAM dari OIDC IdP (OIDCRoleArn), dan URI kredensial. Alat Kredensial menyediakan mekanisme pembaruan otomatis bawaan untuk kredensial sesi. Setelah kredensial diperoleh dari panggilan pertama, alat Kredensial menyimpan kredensial dalam cache. Dalam panggilan berikutnya, kredensial dibaca dari cache selama kredensial belum kedaluwarsa. Jika tidak, alat Kredensial melakukan panggilan untuk mendapatkan kredensial lagi, dan memperbarui kredensial dalam cache.

Catatan

Untuk peran RAM dari instance ECS, alat Kredensial memperbarui kredensial 15 menit sebelum waktu habis cache (TTL) berakhir.

Dalam contoh berikut, Klien Kredensial dibuat dalam mode instansi tunggal dan digunakan untuk menginisialisasi klien layanan cloud. Kemudian, operasi API dipanggil selama periode waktu yang berbeda untuk memeriksa apakah cache internal digunakan dan apakah kredensial diperbarui setelah cache kedaluwarsa.

<?php

namespace Sample;

require_once 'vendor/autoload.php';

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config as CredentialConfig;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
use Darabonba\OpenApi\Models\Config as OpenApiConfig;
use RuntimeException;

class Sample
{
    /**
     * @var Credential|null
     */
    private static $credentialInstance = null;

    /**
     * @return Credential
     * @throws RuntimeException
     */
    private static function getCredentialClient(): Credential
    {
        if (self::$credentialInstance === null) {
            try {
                $config = new CredentialConfig([
                    'type' => 'ram_role_arn',
                    'accessKeyId' => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
                    'accessKeySecret' => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
                    'roleArn' => getenv('ALIBABA_CLOUD_ROLE_ARN'),
                    'roleSessionName' => 'RamRoleArnTest',
                    'roleSessionExpiration' => 3600,
                ]);

                self::$credentialInstance = new Credential($config);
            } catch (\Exception $e) {
                throw new RuntimeException("Inisialisasi Kredensial gagal: " . $e->getMessage(), 0, $e);
            }
        }

        return self::$credentialInstance;
    }

    /**
     * @var Ecs|null
     */
    private static $ecsClientInstance = null;

    /**
     * @return Ecs
     * @throws RuntimeException
     */
    private static function getEcsClient(): Ecs
    {
        if (self::$ecsClientInstance === null) {
            try {
                $config = new OpenApiConfig([
                    'credential' => self::getCredentialClient(),
                    'endpoint' => 'ecs.cn-hangzhou.aliyuncs.com'
                ]);

                self::$ecsClientInstance = new Ecs($config);
            } catch (\Exception $e) {
                throw new RuntimeException("Inisialisasi klien ECS gagal: " . $e->getMessage(), 0, $e);
            }
        }

        return self::$ecsClientInstance;
    }

    public static function main(): void
    {
        $task = function () {
            // Dapatkan dan cetak kredensial.
            $credentialClient = self::getCredentialClient();
            $credential = $credentialClient->getCredential();

            echo date('c') . PHP_EOL;
            echo "AK ID: {$credential->accessKeyId}" . PHP_EOL;
            echo "AK Secret: {$credential->accessKeySecret}" . PHP_EOL;
            echo "STS Token: {$credential->securityToken}" . PHP_EOL;

            // Panggil operasi API ECS untuk menguji apakah kredensial valid.
            $ecsClient = self::getEcsClient();
            $request = new DescribeRegionsRequest();

            try {
                $response = $ecsClient->describeRegions($request);
                echo sprintf("Hasil pemanggilan: %d" . PHP_EOL, $response->statusCode);
            } catch (\Exception $e) {
                throw new RuntimeException("Eksekusi klien ECS gagal: " . $e->getMessage(), 0, $e);
            }
        };

        call_user_func($task); // Segera panggil operasi.

        sleep(600); // Panggil operasi setelah 600 detik.
        call_user_func($task);

        sleep(3600); // Panggil operasi setelah 3.600 detik.
        call_user_func($task);

        sleep(100); // Panggil operasi setelah 100 detik.
        call_user_func($task);
    }
}

// Jalankan fungsi utama.
Sample::main();

image

Analisis Log:

  • Pada pemanggilan pertama, sistem mendapatkan kredensial berdasarkan konfigurasi karena kredensial belum di-cache. Setelah sistem mendapatkan kredensial, kredensial disimpan dalam cache.

  • Pemanggilan kedua menggunakan kredensial yang sama dengan pemanggilan pertama, yang menunjukkan bahwa kredensial diperoleh dari cache.

  • Pada pemanggilan ketiga, kredensial telah kedaluwarsa karena pemanggilan ketiga adalah 4.200 detik setelah pemanggilan pertama sementara TTL kredensial (RoleSessionExpiration) diatur ke 3.600 detik. SDK mendapatkan kredensial lagi berdasarkan mekanisme pembaruan otomatis dan menyimpan kredensial dalam cache.

  • Pemanggilan keempat menggunakan kredensial yang sama dengan pemanggilan ketiga, yang menunjukkan bahwa kredensial diperbarui setelah cache kedaluwarsa.

Referensi