All Products
Search
Document Center

Alibaba Cloud SDK:Manage access credentials

Last Updated:Apr 11, 2026

Alibaba Cloud SDK for Java menggunakan library penyedia kredensial untuk menyederhanakan proses otentikasi. Topik ini menjelaskan cara menginstal dan mengonfigurasi penyedia kredensial guna mengelola secara aman Pasangan Kunci Akses, Token Layanan Keamanan (STS), serta jenis kredensial lainnya untuk aplikasi Anda.

Latar Belakang

Kredensial adalah sekumpulan informasi yang memverifikasi identitas pengguna. Untuk masuk ke sistem, pengguna harus memberikan kredensial yang valid. Jenis kredensial umum meliputi:

  1. AccessKey (AK), yaitu kredensial permanen untuk Akun Alibaba Cloud atau Pengguna RAM, merupakan pasangan kunci yang terdiri dari ID AccessKey dan Rahasia AccessKey.

  2. Token STS adalah kredensial keamanan sementara untuk Peran RAM Alibaba Cloud. Anda dapat menyesuaikan periode validitas dan izin aksesnya. Untuk informasi selengkapnya, lihat Apa itu STS.

  3. Bearer token adalah jenis token yang digunakan untuk autentikasi dan otorisasi.

Prasyarat

  • Tool kredensial memerlukan PHP 5.6 atau versi lebih baru. Kami sangat menyarankan menggunakan ekstensi cURL dan mengompilasi cURL 7.16.2 atau versi lebih baru dengan backend TLS.

  • Diperlukan Alibaba Cloud SDK V2.0.

Instal kredensial

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

composer require alibabacloud/credentials
  • Gunakan rilis terbaru dependensi untuk memastikan dukungan terhadap semua jenis kredensial.

  • Lihat CHANGELOG.md untuk daftar semua versi yang telah dirilis.

Parameter tool kredensial

Parameter konfigurasi untuk tool Credentials didefinisikan dalam AlibabaCloud\Credentials\Credential\Config. Jenis kredensial ditentukan oleh parameter yang diperlukan type. Setelah Anda menentukan jenis kredensial, Anda harus memilih parameter yang sesuai. Tabel berikut menjelaskan nilai yang mungkin untuk type dan parameter yang didukung oleh setiap jenis kredensial. Dalam tabel ini, menunjukkan parameter yang diperlukan, - menunjukkan parameter opsional, dan × menunjukkan parameter yang tidak didukung.

Catatan

Jangan gunakan jenis kredensial atau parameter yang tidak tercantum dalam tabel.

Parameter

access_key

sts

ram_role_arn

ecs_ram_role

oidc_role_arn

credentials_uri

bearer

accessKeyId: ID Access Key.

×

×

×

×

accessKeySecret: Rahasia Access Key.

×

×

×

×

securityToken: Token Security Token Service (STS).

×

-

×

×

×

×

roleArn: Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM.

×

×

×

×

×

roleSessionName: Nama sesi kustom. Nilai default adalah phpSdkRoleSessionName.

×

×

-

×

-

×

×

roleName: Nama peran RAM.

×

×

×

-

×

×

×

disableIMDSv1: Menentukan apakah akan menerapkan mode penguatan keamanan. Nilai default adalah false.

×

×

×

-

×

×

×

bearerToken: Bearer token.

×

×

×

×

×

×

policy: Kebijakan kustom.

×

×

-

×

-

×

×

roleSessionExpiration: Waktu kedaluwarsa sesi dalam detik. Nilai default adalah 3600.

×

×

-

×

-

×

×

oidcProviderArn: Nama Sumber Daya Alibaba Cloud (ARN) dari penyedia identitas OIDC.

×

×

×

×

×

×

oidcTokenFilePath: Jalur file token OIDC.

×

×

×

×

×

×

externalId: ID eksternal dari peran RAM. Parameter ini mencegah masalah confused deputy. Untuk informasi selengkapnya, lihat Gunakan external ID untuk mencegah masalah confused deputy.

×

×

-

×

×

×

×

credentialsURI: URI kredensial.

×

×

×

×

×

×

STSEndpoint: Titik akhir untuk Security Token Service (STS). Titik akhir publik dan VPC didukung. Untuk daftar nilai yang valid, lihat Endpoints. Nilai default adalah sts.aliyuncs.com.

×

×

-

×

-

×

×

timeout: Timeout baca HTTP dalam milidetik. Nilai default adalah 5000.

×

×

-

-

-

-

×

connectTimeout: Timeout koneksi HTTP dalam milidetik. Nilai default adalah 10000.

×

×

-

-

-

-

×

Inisialisasi klien kredensial

Penting
  • Menyimpan AccessKey dalam teks biasa di dalam proyek merupakan risiko keamanan. Jika izin repositori kode dikonfigurasi secara salah, AccessKey dapat terekspos, sehingga membahayakan semua resource dalam akun tersebut. Simpan AccessKey Anda dalam variabel lingkungan atau file konfigurasi sebagai gantinya.

  • Saat menggunakan tool Credentials, gunakan pola singleton. Hal ini mengaktifkan cache kredensial bawaan tool, yang membantu mencegah pembatasan kecepatan akibat panggilan API yang terlalu sering dan menghindari pemborosan resource karena pembuatan banyak instans. Untuk informasi selengkapnya, lihat Mekanisme refresh otomatis untuk kredensial Sesi.

Metode 1: Menggunakan rantai penyedia kredensial default

graph TD A[Start] --> B{Check for environment variable}; B -->|Yes| C[Get credentials from environment variables]; B -->|No| D{Check for system property}; D -->|Yes| E[Get credentials from system properties]; D -->|No| F{Check for profile file}; F -->|Yes| G[Get credentials from profile file]; F -->|No| H{Check for instance RAM role}; H -->|Yes| I[Get instance RAM role]; H -->|No| J[Exception]; C --> K[End]; E --> K; G --> K; I --> K; J --> K;

Klien Credentials yang diinisialisasi tanpa parameter menggunakan rantai penyedia kredensial default. Lihat rantai penyedia kredensial default untuk mempelajari cara memuat kredensial.

<?php

use AlibabaCloud\Credentials\Credential;

// Gunakan autoloader Composer dengan memanggil file autoload.php dari direktori vendor.
require_once 'vendor/autoload.php';

// Tidak ada parameter yang ditentukan.
$credClient = new Credential();

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

Contoh panggilan API

Contoh ini menunjukkan cara memanggil API DescribeRegions dari ECS. Sebelum memulai, instal ECS SDK untuk 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 Composer melalui file vendor/autoload.php.
require_once 'vendor/autoload.php';

// Inisialisasi klien dengan kredensial default.
$credentialClient = new Credential();
$ecsConfig = new Config([
    // Tetapkan kredensial untuk konfigurasi klien.
    'credential' => $credentialClient,
    // Tentukan titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi objek permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi opsi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status HTTP.
echo $resp->statusCode;
// Cetak objek respons.
var_dump($resp);

Metode 2: Gunakan AccessKey

Peringatan
<?php

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

// Aktifkan autoloader Composer.
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 API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dan mengharuskan Anda menginstal ECS SDK terlebih dahulu.

<?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';

// Inisialisasi objek kredensial dengan pasangan AccessKey.
$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([
    // Tetapkan kredensial untuk konfigurasi.
    'credential' => $credClient,
    // Tentukan titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi objek permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Metode 3: Gunakan token STS

<?php

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

// Sertakan 'vendor/autoload.php' untuk mengaktifkan autoloading Composer.
require_once 'vendor/autoload.php';

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

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

Contoh API

Contoh ini memanggil operasi DescribeRegions dari ECS. Pertama, instal ECS SDK dan STS SDK.

<?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 kredensial sementara.
$config = new Config([
    // Ambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Pastikan variabel ini telah disetel sebelum menjalankan kode.
    '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([
    // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat menyetel ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.  
    'roleArn' => '<RoleArn>',
    // Nama sesi peran. Anda dapat menyetel ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.  
    'roleSessionName' => '<RoleSessionName>',
]);
$assumeRoleResp = $stsClient->assumeRole($request);
$assumeRoleCredentials = $assumeRoleResp->body->credentials;

// Inisialisasi klien Credential dengan kredensial sementara yang diperoleh.
$credentialConfig = new CredentialConfig([
    // Jenis kredensial.
    'type' => 'sts',
    'accessKeyId' => $assumeRoleCredentials->accessKeyId,
    'accessKeySecret' => $assumeRoleCredentials->accessKeySecret,
    'securityToken' => $assumeRoleCredentials->securityToken,
]);
$credentialClient = new Credential($credentialConfig);
$ecsConfig = new Config([
    // Gunakan klien Credential untuk autentikasi.
    'credential' => $credentialClient,
    // Titik akhir layanan untuk ECS.
    'endpoint' => 'ecs.aliyuncs.com'
]);// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);// Inisialisasi opsi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);// Cetak kode status.
echo $resp->statusCode;// Cetak respons.
var_dump($resp);

Metode 4: Menggunakan AK dan RamRoleArn

Secara internal, metode ini menggunakan token STS. Tool kredensial mengambil token ini dari STS dengan menggunakan Nama Sumber Daya Alibaba Cloud (ARN) dari Peran RAM. Anda juga dapat menetapkan policy untuk membatasi izin sesi yang dihasilkan.

<?php

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

// Sertakan autoloader Composer.
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'),
    // ARN untuk peran RAM yang akan diasumsikan. Dapat disetel dengan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Nama sesi peran kustom. Dapat disetel dengan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Kebijakan yang membatasi lebih lanjut izin sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Kedaluwarsa sesi dalam detik. Nilai default: 3600.
    'roleSessionExpiration' => 3600,
]);
$credClient = new Credential($credConfig);

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

Contoh panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Anda harus menginstal ECS SDK terlebih dahulu.

<?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 pasangan AccessKey dan ARN peran RAM untuk menginisialisasi klien Credentials.
$credentialConfig = new CredentialConfig([
    // 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'),
    // ARN dari peran RAM yang akan diasumsikan. Anda juga dapat menyetel ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole
    'roleArn' => '<RoleArn>',
    // Nama sesi peran kustom. Anda juga dapat menyetel ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Kebijakan untuk membatasi lebih lanjut izin sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    'policy' => '<Policy>',
    // Opsional. Kedaluwarsa sesi, dalam detik. Default: 3600.
    'roleSessionExpiration' => 3600,
]);
$credentialClient = new Credential($credentialConfig);

$ecsConfig = new Config([
    // Kredensial yang digunakan untuk autentikasi.
    'credential' => $credentialClient,
    // Titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi objek permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi opsi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Metode 5: Gunakan peran RAM instans ECS

Anda dapat menyambungkan peran RAM instans ke instans ECS dan ECI. Aplikasi yang berjalan pada instans ini kemudian dapat menggunakan tool Credentials untuk secara otomatis mengambil token STS untuk peran tersebut dan menginisialisasi klien Credentials.

Secara default, tool Credentials pertama-tama mencoba mengakses layanan metadata ECS dalam mode penguatan keamanan (IMDSv2). Jika upaya ini gagal, tool akan kembali ke mode normal untuk mengambil kredensial akses. Anda dapat menyesuaikan perilaku fallback ini dengan menyetel parameter disableIMDSv1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE:

  • Jika disetel ke false (default), tool akan kembali ke mode normal saat terjadi kegagalan.

  • Jika disetel ke true, tool hanya menggunakan mode penguatan keamanan dan melemparkan exception saat terjadi kegagalan tanpa melakukan fallback.

Konfigurasi sisi server Anda menentukan apakah server mendukung IMDSv2.

Untuk menonaktifkan akses kredensial dari metadata ECS, tetapkan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.

Catatan
<?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. Nama peran RAM ECS. Jika tidak ditentukan, nama peran akan diambil secara otomatis. Menentukan parameter ini mengurangi jumlah permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
    'roleName' => '<RoleName>',
    // Opsional. Default ke false. Saat disetel ke true, ini menerapkan mode penguatan keamanan. Saat false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan dan kembali ke mode normal (IMDSv1) jika gagal.
    // 'disableIMDSv1' => true,
]);
$credClient = new Credential($credConfig);

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

Panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Anda harus menginstal ECS SDK untuk menjalankan contoh ini.

<?php

namespace AlibabaCloud\SDK\Sample;

// Gunakan mekanisme autoload Composer dengan memanggil 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;

// Inisialisasi klien Credentials dengan peran RAM instans ECS.
$credConfig = new CredentialConfig([
    'type' => 'ecs_ram_role',
    // Opsional. Nama peran RAM instans ECS. Jika dihilangkan, nama peran diambil secara otomatis. Menentukan parameter ini mengurangi panggilan API. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
    'roleName' => '<RoleName>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Gunakan klien Credential untuk mengonfigurasi kredensial.
    'credential' => $credClient,
    // Titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi objek permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi opsi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Metode 6: Gunakan OIDCRoleArn

Jika Anda menggunakan protokol autentikasi OIDC dan telah membuat peran RAM untuk penyedia identitas OIDC, berikan ARN penyedia identitas OIDC, token OIDC, dan ARN peran RAM ke tool kredensial. Tool ini secara otomatis memanggil API AssumeRoleWithOIDC untuk mendapatkan token STS untuk peran RAM dan menggunakannya sebagai kredensial akses. Kredensial ini mendukung refresh otomatis. Untuk informasi selengkapnya, lihat Mekanisme refresh otomatis untuk kredensial sesi. Misalnya, ketika aplikasi Anda berjalan di kluster ACK dengan RRSA diaktifkan, tool kredensial membaca konfigurasi OIDC dari variabel lingkungan Pod dan memanggil API AssumeRoleWithOIDC untuk mendapatkan token STS untuk peran layanan. Hal ini memungkinkan aplikasi Anda mengakses layanan Alibaba Cloud.

<?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';

// Inisialisasi klien kredensial untuk mengasumsikan peran RAM melalui Penyedia Identitas OIDC.
$credConfig = new CredentialConfig([
    // Jenis kredensial.
    'type' => 'oidc_role_arn',
    // ARN penyedia OIDC. Juga dapat disetel melalui variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    'oidcProviderArn' => '<OidcProviderArn>',
    // Jalur file token OIDC. Juga dapat disetel melalui variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // ARN peran RAM yang akan diasumsikan. Juga dapat disetel melalui variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Nama sesi peran kustom. Juga dapat disetel melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Kebijakan sesi yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Kedaluwarsa sesi, dalam detik.
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

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

Contoh panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Sebelum memulai, instal ECS SDK untuk 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;

// Inisialisasi klien Credential untuk menggunakan peran RAM berbasis OIDC.
$credConfig = new CredentialConfig([
    // Jenis kredensial.
    'type' => 'oidc_role_arn',
    // ARN penyedia OIDC. Anda dapat menyetel ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    'oidcProviderArn' => '<OidcProviderArn>',
    // Jalur file token OIDC. Anda dapat menyetel ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    'oidcTokenFilePath' => '<OidcTokenFilePath>',
    // ARN peran RAM yang akan diasumsikan. Anda dapat menyetel ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole.
    'roleArn' => '<RoleArn>',
    // Nama sesi peran kustom. Anda dapat menyetel ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    'roleSessionName' => '<RoleSessionName>',
    // Opsional. Kebijakan sesi yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
    'policy' => '<Policy>',
    // Opsional. Kedaluwarsa sesi, dalam detik.
    'roleSessionExpiration' => 3600,
]);

$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Kredensial autentikasi.
    'credential' => $credClient,
    // Titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi objek permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Metode 7: Kredensial URI

Dengan mengenkapsulasi layanan STS dan mengekspos URI-nya, layanan eksternal dapat memperoleh token STS. Metode ini mengurangi risiko mengekspos informasi sensitif, seperti AK. Tool kredensial mengambil token STS dari URI yang Anda berikan dan menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung refresh otomatis. Untuk informasi selengkapnya, lihat Refresh otomatis untuk kredensial jenis sesi.

<?php

namespace AlibabaCloud\SDK\Sample;

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

// Aktifkan autoloading Composer dengan menyertakan file vendor/autoload.php.
require_once 'vendor/autoload.php';

// Gunakan kredensial URI untuk menginisialisasi klien kredensial.
$credConfig = new Config([
    // Jenis kredensial.
    'type' => 'credentials_uri',
    // URI kredensial, misalnya, http://local_or_remote_uri/. Atau, tetapkan 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:

  • Mendukung permintaan GET.

  • Mengembalikan kode status 200.

  • Badan respons berupa objek JSON dengan bidang-bidang berikut:

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

Panggilan API

Untuk menggunakan contoh ini guna memanggil API DescribeRegions dari ECS, Anda harus menginstal ECS SDK terlebih dahulu.

<?php

namespace AlibabaCloud\SDK\Sample;

// Sertakan autoloader Composer.
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;

// Inisialisasi klien Credentials dengan kredensial URI.
$credConfig = new CredentialConfig([
    // Jenis kredensial.
    'type' => 'credentials_uri',
    // URI kredensial, seperti http://local_or_remote_uri/. Ini juga dapat disetel dengan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
    'credentialsURI' => '<CredentialsUri>',
]);
$credClient = new Credential($credConfig);

$ecsConfig = new Config([
    // Objek kredensial untuk autentikasi.
    'credential' => $credClient,
    // Titik akhir layanan.
    'endpoint' => 'ecs.aliyuncs.com'
]);
// Inisialisasi klien ECS.
$ecsClient = new Ecs($ecsConfig);
// Inisialisasi permintaan.
$describeRegionsRequest = new DescribeRegionsRequest([]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $ecsClient->describeRegionsWithOptions($describeRegionsRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Metode 8: Gunakan bearer token

<?php

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

// Muat autoloader Composer.
require_once 'vendor/autoload.php';

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

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

Contoh API

Contoh ini menunjukkan cara memanggil operasi GetInstance untuk Cloud Call Center (CCC). Anda harus menginstal CCC SDK terlebih dahulu.

<?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 bearer token untuk menginisialisasi kredensial.
$credConfig = new CredentialConfig([
    // Jenis kredensial.
    'type' => 'bearer',
    // Tentukan bearer token.
    'bearerToken' => '<BearerToken>',
]);
$credClient = new Credential($credConfig);

$config = new Config([
    // Kredensial yang digunakan untuk autentikasi.
    'credential' => $credClient,
    // Titik akhir layanan.
    'endpoint' => 'ccc.cn-shanghai.aliyuncs.com'
]);
$cccClient = new CCC($config);
// Inisialisasi objek permintaan.
$getInstanceRequest = new GetInstanceRequest([
    "instanceId" => "ccc-test"
]);
// Inisialisasi konfigurasi runtime.
$runtime = new RuntimeOptions([]);
$resp = $cccClient->getInstanceWithOptions($getInstanceRequest, $runtime);
// Cetak kode status.
echo $resp->statusCode;
// Cetak respons.
var_dump($resp);

Rantai penyedia kredensial default

Saat lingkungan pengembangan dan produksi Anda menggunakan jenis kredensial yang berbeda, Anda biasanya perlu menulis kode kondisional untuk menangani setiap lingkungan. Rantai penyedia kredensial default menyederhanakan hal ini, memungkinkan Anda menggunakan satu basis kode dan mengontrol pengambilan kredensial melalui konfigurasi eksternal. Saat Anda menginisialisasi klien kredensial dengan menggunakan $credential = new Credential(); tanpa meneruskan parameter apa pun, Alibaba Cloud SDK mencari kredensial dari sumber-sumber berikut secara berurutan:

1. Variabel lingkungan

2. Peran RAM untuk Penyedia Identitas OIDC

3. File config.json

4. Peran RAM instans ECS

Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, SDK mencoba memperoleh kredensial dari peran RAM yang dilampirkan ke instans ECS. Secara default, SDK mengakses layanan metadata ECS dalam mode ditingkatkan (IMDSv2) untuk memperoleh token STS untuk peran RAM instans ECS. Proses ini melibatkan dua permintaan: SDK pertama-tama menanyakan layanan metadata untuk mendapatkan nama peran, lalu mengambil kredensialnya. Untuk mengurangi ini menjadi satu permintaan, Anda dapat langsung menentukan nama peran RAM instans dengan menyetel variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. Jika terjadi kesalahan saat menggunakan mode ditingkatkan, SDK akan kembali ke mode normal. Anda juga dapat menyetel variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE untuk mengontrol perilaku fallback ini:

  1. Saat disetel ke false, SDK kembali ke mode normal untuk mengambil kredensial.

  2. Saat disetel ke true, hanya mode ditingkatkan yang digunakan, dan exception dilemparkan saat terjadi kegagalan.

Dukungan untuk IMDSv2 bergantung pada konfigurasi server Anda.

Untuk menonaktifkan akses kredensial dari metadata ECS, tetapkan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED ke true.

Catatan

5. URI Kredensial

Rantai penyedia kredensial kustom

Anda dapat mengganti urutan pencarian default dengan menggunakan rantai penyedia kredensial kustom. Anda juga dapat meneruskan penyedia sebagai closure.

<?php

use AlibabaCloud\Credentials\Providers\ChainProvider;

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

Refresh otomatis untuk kredensial sesi

Tool Credentials menyediakan mekanisme refresh otomatis bawaan untuk kredensial sesi, termasuk jenis seperti ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri. Saat klien kredensial pertama kali memperoleh kredensial, tool Credentials menyimpannya dalam cache. Untuk operasi selanjutnya, klien mengambil kredensial dari cache. Jika kredensial yang di-cache kedaluwarsa, klien secara otomatis mengambil kredensial baru dan memperbarui cache.

Catatan

Untuk kredensial ecs_ram_role, tool Credentials secara proaktif merefresh kredensial 15 menit sebelum kedaluwarsa.

Contoh ini membuat klien kredensial menggunakan pola singleton. Untuk menunjukkan mekanisme refresh otomatis, contoh ini mengambil kredensial pada interval waktu berbeda dan melakukan panggilan OpenAPI untuk memverifikasi validitasnya.

<?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 () {
            // Peroleh dan cetak kredensial.
            $credentialClient = self::getCredentialClient();
            $credential = $credentialClient->getCredential();

            echo date('c') . PHP_EOL;
            echo "ID AK: {$credential->accessKeyId}" . PHP_EOL;
            echo "Rahasia AK: {$credential->accessKeySecret}" . PHP_EOL;
            echo "Token STS: {$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