All Products
Search
Document Center

Alibaba Cloud SDK:Mengelola kredensial akses

Last Updated:Jun 09, 2026

Alibaba Cloud SDK menggunakan tool Credentials untuk mengelola kredensial secara terpusat, seperti AccessKey dan STS Token Anda. Topik ini menjelaskan jenis kredensial yang didukung dan cara mengonfigurasinya.

Latar Belakang

Kredensial memverifikasi identitas pengguna saat mengakses layanan Alibaba Cloud. Jenis kredensial umum meliputi:

  1. Pasangan AccessKey menyediakan kredensial permanen untuk Akun Alibaba Cloud atau Pengguna RAM, yang terdiri dari ID AccessKey dan Rahasia AccessKey.

  2. Token STS menyediakan kredensial sementara untuk peran RAM dengan periode validitas dan cakupan izin yang dapat dikonfigurasi. Apa itu STS.

  3. Token bearer digunakan untuk otentikasi dan otorisasi.

Prasyarat

Instal tool Credentials

Jalankan perintah npm berikut untuk menginstal paket tersebut.

npm install @alicloud/credentials

Gunakan versi terbaru untuk memastikan semua jenis kredensial didukung. Releases · aliyun/credentials-nodejs · GitHub.

Parameter kredensial

Konfigurasikan kredensial melalui konstruktor modul @alicloud/credentials menggunakan kelas Config. Parameter type bersifat wajib dan menentukan parameter lain yang berlaku. Tabel berikut mencantumkan nilai type yang valid beserta parameter terkaitnya. = wajib, - = opsional, × = tidak didukung.

Catatan

Hanya jenis kredensial dan parameter yang tercantum di bawah ini yang didukung.

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 RAM.

×

×

×

×

×

roleSessionName: Nama kustom untuk sesi. Format default adalah credentials-nodejs-<timestamp>.

×

×

-

×

-

×

×

roleName: Nama peran RAM.

×

×

×

-

×

×

×

disableIMDSv1: Menentukan apakah akan menerapkan mode penguatan keamanan (IMDSv2). Nilai default: false.

×

×

×

-

×

×

×

bearerToken: Bearer token.

×

×

×

×

×

×

policy: Kebijakan kustom.

×

×

-

×

-

×

×

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

×

×

-

×

-

×

×

oidcProviderArn: ARN penyedia identitas OpenID Connect (OIDC).

×

×

×

×

×

×

oidcTokenFilePath: Jalur ke file token OpenID Connect (OIDC).

×

×

×

×

×

×

externalId: ID eksternal untuk mengurangi risiko confused deputy problem. Gunakan ID eksternal untuk mencegah confused deputy problem.

×

×

-

×

×

×

×

credentialsURI: URI kredensial.

×

×

×

×

×

×

Titik akhir STS. Mendukung titik akhir VPC maupun publik. Titik akhir yang tersedia: Endpoints. Default: sts.aliyuncs.com.

×

×

-

×

-

×

×

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

×

×

-

-

-

-

×

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

×

×

-

-

-

-

×

Inisialisasi klien kredensial

Bagian sebelumnya menjelaskan jenis kredensial dan parameter konfigurasi yang didukung oleh tool Credentials. Bagian berikut memberikan contoh kode tentang cara menggunakan tool tersebut. Pilih metode yang paling sesuai dengan skenario Anda.

Penting
  • Jangan pernah menyimpan AccessKey dalam bentuk teks biasa di kode proyek Anda. Kunci yang terekspos membahayakan seluruh sumber daya di bawah akun tersebut. Simpan di variabel lingkungan atau file konfigurasi sebagai gantinya.

  • Terapkan pola singleton untuk tool credentials. Ini mengaktifkan credential cache bawaan, mencegah rate limiting akibat panggilan API berlebihan. Mekanisme auto-refresh kredensial sesi.

Metode 1: Rantai penyedia kredensial default

Menginisialisasi klien kredensial tanpa parameter akan mengaktifkan Rantai penyedia kredensial default.

const Credential = require('@alicloud/credentials');
// Gunakan rantai penyedia kredensial default
const credentialClient = new Credential.default();
const credential = credentialClient.getCredential();
credential.then(credential => {
    console.log(credential);
});
import Credential from '@alicloud/credentials';
const credential = new Credential();
credential.getCredential().then(credential => {
    console.log(credential);
});

Panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Untuk menjalankan kode, Anda harus menginstal ECS SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    // Inisialisasi klien kredensial dengan kredensial default.
    const credentialClient = new Credential.default();
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Konfigurasikan titik akhir layanan.
        credential: credentialClient, // Tentukan klien kredensial.
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((result) => {
        console.log(JSON.stringify(result.body));
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import Credential from '@alicloud/credentials';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        // Inisialisasi instans kredensial dengan kredensial default.
        let credential = new Credential();
        let config = new $OpenApi.Config({
            credential: credential, // Tentukan instans kredensial.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Konfigurasikan titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 2: Gunakan AccessKey

Tool Credentials menggunakan AccessKey yang Anda berikan sebagai kredensial akses.

Peringatan

Akun Alibaba Cloud (akun root) memiliki hak istimewa penuh atas semua sumber dayanya, sehingga AK yang terekspos menimbulkan risiko keamanan signifikan. Jangan gunakan AK akun root.

Gunakan AK Pengguna RAM dengan izin prinsip hak istimewa minimal.

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    // Jenis kredensial.
    type: 'access_key',
    // ID AccessKey Anda, diambil dari variabel lingkungan.
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // Rahasia AccessKey Anda, diambil dari variabel lingkungan.
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig  = new Config({
    // Jenis kredensial.
    type: 'access_key',
    // ID AccessKey Anda, diambil dari variabel lingkungan.
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // Rahasia AccessKey Anda, diambil dari variabel lingkungan.
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential(credentialsConfig);

Panggilan API

Contoh ini memanggil operasi DescribeRegions ECS. Anda harus menginstal ECS SDK untuk menjalankan kode.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'access_key',
        // ID AccessKey, dibaca dari variabel lingkungan.
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
        // Rahasia AccessKey, dibaca dari variabel lingkungan.
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config();
    ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com'; // Titik akhir layanan.
    ecsConfig.credential = credentialClient; // Klien kredensial untuk otentikasi.
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body.regions);
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            // Jenis kredensial.
            type: 'access_key',
            // ID AccessKey, dibaca dari variabel lingkungan.
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            // Rahasia AccessKey, dibaca dari variabel lingkungan.
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Klien kredensial untuk otentikasi.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 3: Gunakan token STS

Tool Credentials menggunakan token STS statis yang Anda berikan sebagai kredensial akses.

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'sts',
    // ID AccessKey Anda, diambil dari variabel lingkungan.
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // Rahasia AccessKey Anda, diambil dari variabel lingkungan.
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // Token keamanan Anda, diambil dari variabel lingkungan.
    securityToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN,
});
const cred = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    // Jenis kredensial.
    type: 'access_key',
    // ID AccessKey Anda, diambil dari variabel lingkungan.
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // Rahasia AccessKey Anda, diambil dari variabel lingkungan.
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // Token keamanan Anda, diambil dari variabel lingkungan.
    securityToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN,
});
const credentialClient = new Credential(credentialsConfig);

Panggilan API

Contoh ini memanggil operasi DescribeRegions ECS. Untuk menjalankan kode ini, Anda harus menginstal ECS SDK dan Security Token Service SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const Sts20150401 = require('@alicloud/sts20150401');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function assumeRole() {
    // Buat klien STS untuk mendapatkan token STS.
    const stsConfig = new OpenApi.Config({
        endpoint: 'sts.cn-hangzhou.aliyuncs.com', // Titik akhir Layanan Token Keamanan (STS).
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Dapatkan ID AccessKey dari variabel lingkungan.
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // Dapatkan rahasia AccessKey dari variabel lingkungan.
    });
    const stsClient = new Sts20150401.default(stsConfig);
    const assumeRoleRequest = new Sts20150401.AssumeRoleRequest({
        durationSeconds: 3600, // Periode validitas token STS.
        roleArn: '<RoleArn>', // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Ini dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. 
        roleSessionName: '<RoleSessionName>', // Nama kustom untuk sesi peran. Ini dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME. 
        policy: '', // Opsional. Kebijakan RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    });
    try {
        const assumeRoleResponsePromise = await stsClient.assumeRole(assumeRoleRequest);
        const assumeRoleResponseBodyCredentials = assumeRoleResponsePromise.body.credentials;
        return {
            accessKeyId: assumeRoleResponseBodyCredentials.accessKeyId,
            accessKeySecret: assumeRoleResponseBodyCredentials.accessKeySecret,
            securityToken: assumeRoleResponseBodyCredentials.securityToken,
        };
    } catch (error) {
        console.error('Permintaan AssumeRole gagal:', error);
        throw error;
    }
}
async function main() {
    const stsToken = await assumeRole()
    const credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'sts',
        accessKeyId: stsToken.accessKeyId,
        accessKeySecret: stsToken.accessKeySecret,
        securityToken: stsToken.securityToken,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan cloud.
        credential: credentialClient, // Kredensial otentikasi.
    })
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // Panggil operasi DescribeRegions.
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body.regions);
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Sts20150401, * as $Sts20150401 from '@alicloud/sts20150401';
import OpenApi, { Config } from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import Credential, { Config as CredentialConfig } from '@alicloud/credentials';
async function assumeRole() {
    // Buat klien STS untuk mendapatkan token STS.
    const stsConfig = new Config({
        endpoint: 'sts.cn-hangzhou.aliyuncs.com', // Titik akhir Layanan Token Keamanan (STS).
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Dapatkan ID AccessKey dari variabel lingkungan.
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // Dapatkan rahasia AccessKey dari variabel lingkungan.
    });
    const stsClient = new Sts20150401(stsConfig);
    const assumeRoleRequest = new $Sts20150401.AssumeRoleRequest({
        durationSeconds: 3600, // Periode validitas token STS.
        roleArn: '<RoleArn>', // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Ini dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.  
        roleSessionName: '<RoleSessionName>', // Nama kustom untuk sesi peran. Ini dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME. 
        policy: '', // Opsional. Kebijakan RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    });
    try {
        const assumeRoleResponsePromise = await stsClient.assumeRole(assumeRoleRequest);
        const assumeRoleResponseBodyCredentials = assumeRoleResponsePromise.body?.credentials;
        return {
            accessKeyId: assumeRoleResponseBodyCredentials?.accessKeyId,
            accessKeySecret: assumeRoleResponseBodyCredentials?.accessKeySecret,
            securityToken: assumeRoleResponseBodyCredentials?.securityToken,
        };
    } catch (error) {
        console.error('Permintaan AssumeRole gagal:', error);
        throw error;
    }
}
async function main() {
    const stsToken = await assumeRole()
    const credentialsConfig = new CredentialConfig({
        // Jenis kredensial.
        type: 'sts',
        accessKeyId: stsToken.accessKeyId,
        accessKeySecret: stsToken.accessKeySecret,
        securityToken: stsToken.securityToken,
    });
    const credentialClient = new Credential(credentialsConfig);
    const ecsConfig = new Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan cloud.
        credential: credentialClient, // Kredensial otentikasi.
    })
    const ecsClient = new Ecs20140526(ecsConfig);
    const describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest();
    const runtime = new $Util.RuntimeOptions();
    // Panggil operasi DescribeRegions.
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body?.regions);
    });
}
main().catch(console.error);

Metode 4: AccessKey dan ARN Peran RAM

Metode ini menggunakan STS secara internal. Saat Anda menentukan ARN peran RAM, tool Credentials memperoleh token STS dari STS. Anda dapat menggunakan parameter policy untuk membatasi lebih lanjut izin peran tersebut.

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'ram_role_arn',
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Ini juga dapat diatur menggunakan variabel lingkungan `ALIBABA_CLOUD_ROLE_ARN`.
    roleArn: '<RoleArn>',
    // Nama sesi peran kustom. Ini juga dapat diatur menggunakan variabel lingkungan `ALIBABA_CLOUD_ROLE_SESSION_NAME`.
    roleSessionName: '<RoleSessionName>',
    // Opsional. Kebijakan inline untuk membatasi izin peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    roleSessionExpiration: 3600,
});
const cred = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'ram_role_arn',
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Ini juga dapat diatur menggunakan variabel lingkungan `ALIBABA_CLOUD_ROLE_ARN`.
    roleArn: '<RoleArn>',
    // Nama sesi peran kustom. Ini juga dapat diatur menggunakan variabel lingkungan `ALIBABA_CLOUD_ROLE_SESSION_NAME`.
    roleSessionName: '<RoleSessionName>',
    // Opsional. Kebijakan inline untuk membatasi izin peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    roleSessionExpiration: 3600,
});
const credentialClient = new Credential(credentialsConfig);

Metode panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Untuk menjalankan kode, Anda harus menginstal ECS SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // Menentukan jenis kredensial.
        type: 'ram_role_arn',
        // ID AccessKey Anda.
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
        // Rahasia AccessKey Anda.
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
        // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        roleArn: '<RoleArn>',
        // Nama kustom untuk sesi peran. Anda dapat mengatur ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        roleSessionName: '<RoleSessionName>',
        // Opsional. Kebijakan inline yang membatasi izin untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy: '<Policy>',
        roleSessionExpiration: 3600,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        credential: credentialClient, // Menentukan kredensial yang akan digunakan.
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // Panggil operasi DescribeRegions.
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'ram_role_arn',
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
            // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
            roleArn: '<RoleArn>',
            // Nama kustom untuk sesi peran. Anda dapat mengatur ini dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
            roleSessionName: '<RoleSessionName>',
            // Opsional. Kebijakan inline yang membatasi izin untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy: '<Policy>',
            roleSessionExpiration: 3600,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Menentukan kredensial yang akan digunakan.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 5: Peran RAM instans ECS

Lampirkan peran RAM instans ke instans ECS atau instans kontainer elastis. Aplikasi pada instans tersebut kemudian dapat menggunakan tool Credentials untuk secara otomatis memperoleh token STS untuk peran tersebut.

Secara default, tool Credentials mengakses server metadata ECS dalam mode penguatan keamanan (IMDSv2). Jika terjadi kesalahan, sistem akan kembali ke mode normal. Kendalikan perilaku ini dengan parameter disableIMDSv1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE:

  • false (default): Kembali ke mode normal jika gagal.

  • true: Hanya menggunakan mode penguatan keamanan dan melempar pengecualian jika gagal.

Dukungan IMDSv2 bergantung pada konfigurasi server Anda.

Anda juga dapat menonaktifkan akses kredensial melalui metadata ECS dengan mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.

Catatan
const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'ecs_ram_role',
    // Opsional. Nama peran RAM ECS. Jika tidak ditentukan, sistem mengambilnya secara otomatis. Disarankan menentukan nama untuk mengurangi permintaan. Ini juga dapat diatur melalui variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
    roleName: '<RoleName>',
    // Opsional. Default: false. Jika true, menerapkan mode penguatan keamanan. Jika false, sistem mencoba mode penguatan keamanan terlebih dahulu, lalu kembali ke mode normal (IMDSv1) jika gagal.
    // disableIMDSv1: true,
});
const cred = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'ecs_ram_role',
    // Opsional. Nama peran RAM ECS. Jika tidak ditentukan, sistem mengambilnya secara otomatis. Disarankan menentukan nama untuk mengurangi permintaan. Ini juga dapat diatur melalui variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
    roleName: '<RoleName>',
    // Opsional. Default: false. Jika true, menerapkan mode penguatan keamanan. Jika false, sistem mencoba mode penguatan keamanan terlebih dahulu, lalu kembali ke mode normal (IMDSv1) jika gagal.
    // disableIMDSv1: true,
});
const credentialClient = new Credential(credentialsConfig);

Panggilan API

Contoh ini memanggil operasi DescribeRegions ECS. Untuk menjalankan kode, pertama-tama instal ECS SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'ecs_ram_role',
        // Opsional. Nama peran RAM ECS. Kami menyarankan menentukan ini untuk mengurangi permintaan. Jika dihilangkan, sistem mengambilnya secara otomatis. Anda juga dapat mengatur parameter roleName dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
        roleName: '<RoleName>',
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        credential: credentialClient, // Kredensial yang digunakan untuk otentikasi.
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // Panggil operasi DescribeRegions dan dapatkan respons.
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'ecs_ram_role',
            // Opsional. Nama peran RAM ECS. Kami menyarankan menentukan ini untuk mengurangi permintaan. Jika dihilangkan, sistem mengambilnya secara otomatis. Anda juga dapat mengatur parameter roleName dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
            roleName: '<RoleName>',
            // Opsional. Default ke `false`. Mengatur ini ke `true` menerapkan mode penguatan keamanan. Jika parameter ini diatur ke false, sistem pertama-tama mencoba mendapatkan kredensial dalam mode penguatan keamanan dan kembali ke mode normal (IMDSv1) jika upaya tersebut gagal.
            // disableIMDSv1: true,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Kredensial yang digunakan untuk otentikasi.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 6: Gunakan OIDCRoleArn

Jika Anda menggunakan OIDC dan telah membuat peran RAM untuk penyedia OIDC, berikan ARN penyedia OIDC, token OIDC, dan ARN peran RAM ke SDK Credentials. SDK memanggil operasi AssumeRoleWithOIDC untuk memperoleh token STS. Kredensial ini mendukung refresh otomatis. Mekanisme auto-refresh untuk kredensial sesi. Sebagai contoh, dalam kluster ACK dengan RRSA diaktifkan, SDK membaca konfigurasi OIDC dari variabel lingkungan Pod dan memperoleh token STS untuk mengakses layanan Alibaba Cloud.

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'oidc_role_arn',
    // ARN peran RAM yang akan diasumsikan. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
    roleArn: '<RoleArn>',
    // ARN Penyedia Identitas OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    oidcProviderArn: '<OidcProviderArn>',
    // Jalur file token OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    oidcTokenFilePath: '<OidcTokenFilePath>',
    // Nama sesi peran kustom. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    roleSessionName: '<RoleSessionName>',
    // Opsional. Kebijakan untuk mempersempit izin sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    // Durasi sesi dalam detik.
    roleSessionExpiration: 3600,
});
const credentialClient = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'oidc_role_arn',
    // ARN peran RAM yang akan diasumsikan. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
    roleArn: '<RoleArn>',
    // ARN Penyedia Identitas OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
    oidcProviderArn: '<OidcProviderArn>',
    // Jalur file token OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
    oidcTokenFilePath: '<OidcTokenFilePath>',
    // Nama sesi peran kustom. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
    roleSessionName: '<RoleSessionName>',
    // Opsional. Kebijakan untuk mempersempit izin sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    // Durasi sesi dalam detik.
    roleSessionExpiration: 3600,
});
const credentialClient = new Credential(credentialsConfig);

Panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Untuk menjalankan kode, instal ECS SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'oidc_role_arn',
        // ARN peran RAM yang akan diasumsikan. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        roleArn: '<RoleArn>',
        // ARN penyedia OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
        oidcProviderArn: '<OidcProviderArn>',
        // Jalur file token OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
        oidcTokenFilePath: '<OidcTokenFilePath>',
        // Nama sesi peran kustom. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        roleSessionName: '<RoleSessionName>',
        // Opsional. Kebijakan yang membatasi izin untuk sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy: '<Policy>',
        // Kedaluwarsa sesi dalam detik.
        roleSessionExpiration: 3600,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        credential: credentialClient, // Kredensial otentikasi.
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // Panggil operasi DescribeRegions.
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'oidc_role_arn',
            // ARN peran RAM yang akan diasumsikan. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
            roleArn: '<RoleArn>',
            // ARN penyedia OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
            oidcProviderArn: '<OidcProviderArn>',
            // Jalur file token OIDC. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
            oidcTokenFilePath: '<OidcTokenFilePath>',
            // Nama sesi peran kustom. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
            roleSessionName: '<RoleSessionName>',
            // Opsional. Kebijakan yang membatasi izin untuk sesi. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy: '<Policy>',
            // Kedaluwarsa sesi dalam detik.
            roleSessionExpiration: 3600,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Kredensial otentikasi.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 7: Kredensial URI

Ekspos layanan STS melalui URI sehingga layanan eksternal dapat memperoleh token STS tanpa menangani pasangan AccessKey secara langsung. Tool Credentials mengambil token STS dari URI yang ditentukan dan menggunakannya sebagai kredensial akses, dengan dukungan refresh otomatis. Mekanisme refresh otomatis untuk kredensial tipe sesi.

const Credential = require('@alicloud/credentials');
const config = new Credential.Config({
    type: 'credentials_uri',
    // Titik akhir untuk mengambil kredensial, misalnya, http://local_or_remote_uri/. Ini juga dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
    credentialsURI: '<CredentialsUri>',
});
const credentialClient = new Credential(config);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'credentials_uri',
    // Titik akhir untuk mengambil kredensial, misalnya, http://local_or_remote_uri/. Ini juga dapat diatur dengan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
    credentialsURI: '<CredentialsUri>',
});
const credentialClient = new Credential(credentialsConfig);

Respons URI harus memenuhi persyaratan berikut:

  • Kode status adalah 200.

  • Format isi respons:

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

Panggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum menjalankan kode, instal ECS SDK.

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'credentials_uri',
        // URI untuk memperoleh kredensial, diformat sebagai http://local_or_remote_uri/. Atau, atur variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
        credentialsURI: '<CredentialsUri>',
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        credential: credentialClient, // Klien kredensial untuk otentikasi.
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // Memanggil operasi DescribeRegions.
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        let credentialsConfig = new Config({
            type: 'credentials_uri',
            // URI untuk memperoleh kredensial, diformat sebagai http://local_or_remote_uri/. Atau, atur variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
            credentialsURI: '<CredentialsUri>',
        });
        let credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Klien kredensial untuk otentikasi.
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // Titik akhir layanan.
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Metode 8: Gunakan token bearer

Saat ini, hanya Alibaba Cloud Call Center (CCC) yang mendukung otentikasi token bearer.

const Credential = require('@alicloud/credentials');
const config = new Credential.Config({
    type: 'bearer',
    // Ganti dengan token bearer Anda.
    bearerToken: '<BearerToken>',
});
const credentialClient = new Credential(config);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'bearer',
    // Ganti dengan token bearer Anda.
    bearerToken: '<BearerToken>',
});
const credentialClient = new Credential(credentialsConfig);

Panggilan API

Contoh ini menunjukkan cara memanggil operasi GetInstance Cloud Call Center (CCC). Untuk menjalankan kode, instal Cloud Call Center SDK.

const CCC20200701 = require('@alicloud/ccc20200701');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    let credentialsConfig = new Credential.Config({
        // Jenis kredensial.
        type: 'bearer',
        // Tentukan token bearer Anda.
        bearerToken: '<BearerToken>',
    });
    let credentialClient = new Credential.default(credentialsConfig);
    let config = new OpenApi.Config({
        endpoint: 'ccc.cn-shanghai.aliyuncs.com',
        credential: credentialClient
    });
    let client = new CCC20200701.default(config);
    let getInstanceRequest = new CCC20200701.GetInstanceRequest({
        instanceId: 'ccc-test',
    });
    let runtime = new Util.RuntimeOptions({});
    let response = client.getInstanceWithOptions(getInstanceRequest, runtime);
    console.log((await response).body);
}
main().catch(console.error);
import ccc20200701, * as $ccc20200701 from '@alicloud/ccc20200701';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$ccc20200701.GetInstanceResponse> {
        let credentialsConfig = new Config({
            type: 'bearer',
            // Tentukan token bearer Anda.
            bearerToken: '<BearerToken>',
        });
        let credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // Tentukan kredensial.
            endpoint: 'ccc.cn-shanghai.aliyuncs.com', // Tentukan titik akhir.
        });
        let client = new ccc20200701(config);
        let GetInstanceRequest = new $ccc20200701.GetInstanceRequest({
            instanceId: 'ccc-test',
        });
        let runtime = new $Util.RuntimeOptions({});
        return await client.getInstanceWithOptions(GetInstanceRequest, runtime);
    }
}
let response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

Rantai penyedia kredensial default

Rantai penyedia kredensial default memungkinkan Anda menggunakan kode yang sama di berbagai lingkungan dan mengontrol pengambilan kredensial melalui konfigurasi eksternal. Saat Anda memanggil new Credential() tanpa parameter, SDK mencari kredensial dalam urutan berikut.

1. Menggunakan variabel lingkungan

Jika tidak ditemukan kredensial dalam properti sistem, rantai penyedia kemudian memeriksa variabel lingkungan.

  • Jika ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET keduanya ada dan tidak kosong, rantai penyedia menggunakannya sebagai kredensial default.

  • Jika ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN juga diatur, rantai penyedia menggunakan token STS sebagai kredensial default.

2. Peran RAM OIDC

Jika belum ditemukan kredensial, rantai penyedia memeriksa variabel lingkungan berikut yang terkait dengan peran RAM OIDC:

  • ALIBABA_CLOUD_ROLE_ARN: ARN peran RAM.

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN penyedia OIDC.

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: Jalur file token OIDC.

Jika ketiga variabel lingkungan tersebut ada dan tidak kosong, rantai penyedia menggunakan nilai-nilai ini untuk memanggil API AssumeRoleWithOIDC Layanan Token Keamanan (STS) untuk memperoleh token STS.

3. Config.json

Jika belum ditemukan kredensial, rantai penyedia mencoba memuat file kredensial bersama, config.json, dari lokasi defaultnya dan menggunakan kredensial yang ditentukan dalam file tersebut.

  • Linux/macOS: ~/.aliyun/config.json

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

Untuk mengonfigurasi kredensial dengan cara ini, Anda dapat menggunakan Alibaba Cloud CLI atau membuat file config.json secara manual di jalur yang sesuai. Contoh berikut menunjukkan format isinya:

{
  "current": "<PROFILE_NAME>",
  "profiles": [
    {
      "name": "<PROFILE_NAME>",
      "mode": "AK",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
    },
    {
      "name": "<PROFILE_NAME1>",
      "mode": "StsToken",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "sts_token": "<SECURITY_TOKEN>"
    },
    {
      "name":"<PROFILE_NAME2>",
      "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":"<PROFILE_NAME3>",
      "mode":"EcsRamRole",
      "ram_role_name":"<RAM_ROLE_ARN>"
    },
    {
      "name":"<PROFILE_NAME4>",
      "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":"<PROFILE_NAME5>",
      "mode":"ChainableRamRoleArn",
      "source_profile":"<PROFILE_NAME>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    }
  ]
}

Parameter

Deskripsi

current

Tentukan nama kredensial untuk mengambil konfigurasi kredensial yang sesuai. Nama kredensial adalah nilai parameter name dalam profiles. Secara default, sistem memberikan prioritas pada nama kredensial yang ditentukan oleh variabel lingkungan ALIBABA_CLOUD_PROFILE . Jika variabel lingkungan ini tidak dikonfigurasi, sistem menggunakan nama kredensial yang ditentukan oleh current.

profiles

Berisi kumpulan konfigurasi kredensial. Parameter mode menentukan jenis kredensial:

  • AK: Menggunakan AccessKey Pengguna RAM sebagai kredensial.

  • StsToken: Menggunakan token STS sebagai kredensial.

  • RamRoleArn: Mengasumsikan peran RAM dengan menggunakan kredensial Pengguna RAM untuk memperoleh kredensial sementara.

  • EcsRamRole: Memperoleh kredensial dari metadata instans.

  • OIDC: Memperoleh kredensial dengan menggunakan ARN penyedia OIDC, token OIDC, dan ARN peran RAM.

  • ChainableRamRoleArn: Menggunakan perantai peran untuk memperoleh kredensial baru, menggunakan kredensial awal dari profiles yang ditentukan oleh parameter source_profile.

4. Peran RAM instans ECS

Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, SDK mengambil kredensial dari peran RAM instans ECS. SDK mengakses layanan metadata instans dalam mode ditingkatkan (IMDSv2) untuk mendapatkan token STS. Ini memerlukan dua permintaan: satu untuk nama peran, satu lagi untuk kredensial. Untuk menguranginya menjadi satu permintaan, atur nama peran dalam variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. Jika mode ditingkatkan gagal, proses akan kembali ke mode normal. Kendalikan ini dengan ALIBABA_CLOUD_IMDSV1_DISABLE:

  1. false: Kembali ke mode normal jika gagal.

  2. true: Hanya menggunakan mode ditingkatkan dan melempar pengecualian jika gagal.

Dukungan IMDSv2 bergantung pada konfigurasi layanan metadata instans Anda.

Untuk menonaktifkan pengambilan kredensial dari metadata instans ECS, atur ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.

Catatan

5. URI Kredensial

Jika belum ditemukan kredensial, rantai penyedia memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel ini diatur dan mengarah ke URI yang valid, rantai mengakses URI tersebut untuk mengambil token STS.

Auto-refresh untuk kredensial sesi

Kredensial sesi (ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri) mencakup auto-refresh bawaan. Saat pengambilan pertama, tool credentials menyimpan kredensial dalam cache. Permintaan berikutnya mengembalikan nilai yang di-cache hingga kedaluwarsa, lalu kredensial baru diambil secara otomatis.

Catatan

Untuk kredensial ecs_ram_role, tool credentials melakukan refresh proaktif 15 menit sebelum kedaluwarsa.

Contoh berikut menggunakan pola singleton untuk membuat klien kredensial, memverifikasi auto-refresh dengan mengambil kredensial pada interval berbeda dan mengonfirmasi validitasnya melalui panggilan OpenAPI.

const Credential = require('@alicloud/credentials');
const Ecs20140526 = require('@alicloud/ecs20140526');
const { Config } = require('@alicloud/openapi-client');
const { RuntimeOptions } = require('@alicloud/tea-util');
// Dapatkan variabel lingkungan.
const accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
const accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
const roleArn = process.env.ALIBABA_CLOUD_ROLE_ARN;
/**
 * Kelas singleton Credential mengelola instans kredensial Alibaba Cloud.
 */
class CredentialClient {
    constructor() {
        if (!CredentialClient.instance) {
            var credentialsConfig = new Credential.Config({
                type: 'ram_role_arn',
                accessKeyId: accessKeyId,
                accessKeySecret: accessKeySecret,
                roleArn: roleArn,
                roleSessionName: 'RoleSessionNameTest',
                roleSessionExpiration: 3600,
            });
            this.credentialsClient = new Credential.default(credentialsConfig);
            CredentialClient.instance = this;
        }
        return CredentialClient.instance;
    }
    static getInstance() {
        return new CredentialClient().credentialsClient;
    }
}
/**
 * Kelas singleton ECS Client mengelola instans klien ECS.
 */
class EcsClient {
    constructor(credentialClient) {
        if (!EcsClient.instance) {
            const config = new Config({
                endpoint: 'ecs.cn-hangzhou.aliyuncs.com',
                credential: credentialClient
            });
            this.ecsClient = new Ecs20140526.default(config);
            EcsClient.instance = this;
        }
        return EcsClient.instance;
    }
    static getInstance(credentialClient) {
        return new EcsClient(credentialClient).ecsClient;
    }
}
/**
 * Jalankan logika tugas.
 */
async function executeTask() {
    try {
        const credentialClient = CredentialClient.getInstance();
        const credential = await credentialClient.getCredential();
        console.log(new Date());
        console.log(`AK ID: ${credential.accessKeyId}`);
        console.log(`AK Secret: ${credential.accessKeySecret}`);
        console.log(`STS Token: ${credential.securityToken}`);
        // Contoh ini memanggil operasi API ECS untuk memverifikasi validitas kredensial. Ubah sesuai kebutuhan.
        const ecsClient = EcsClient.getInstance(credentialClient);
        const request = new Ecs20140526.DescribeRegionsRequest();
        const runtime = new RuntimeOptions({});
        const response = await ecsClient.describeRegionsWithOptions(request, runtime);
        console.log(`Hasil pemanggilan: ${response.statusCode}`);
    } catch (error) {
        throw new Error(`Eksekusi klien ECS gagal: ${error.message}`, { cause: error });
    }
}
/**
 * Jadwalkan eksekusi tugas menggunakan timer.
 */
function scheduleTasks() {
    // Jalankan tugas segera sekali.
    executeTask();
    // Atur penundaan untuk tugas berikutnya.
    setTimeout(executeTask, 600 * 1000); // Eksekusi kedua: setelah 600 detik.
    setTimeout(executeTask, 4200 * 1000); // Eksekusi ketiga: setelah 4.200 detik.
    setTimeout(executeTask, 4300 * 1000); // Eksekusi keempat: setelah 4.300 detik.
}
// Mulai penjadwalan tugas.
scheduleTasks();
import Credential, { Config as CredentialsConfig }  from '@alicloud/credentials';
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import { Config } from '@alicloud/openapi-client';
import { RuntimeOptions } from '@alicloud/tea-util';
// Dapatkan variabel lingkungan.
const accessKeyId: string | undefined = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
const accessKeySecret: string | undefined = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
const roleArn: string | undefined = process.env.ALIBABA_CLOUD_ROLE_ARN;
if (!accessKeyId || !accessKeySecret || !roleArn) {
    throw new Error('Variabel lingkungan wajib tidak ditemukan.');
}
/**
 * Kelas singleton Credential mengelola instans kredensial Alibaba Cloud.
 */
class CredentialClient {
    private static instance: CredentialClient;
    private readonly credentialsClient: InstanceType<typeof Credential>;
    private constructor() {
        const credentialsConfig = new CredentialsConfig({
            type: 'ram_role_arn',
            accessKeyId,
            accessKeySecret,
            roleArn,
            roleSessionName: 'RoleSessionNameTest',
            roleSessionExpiration: 3600,
        });
        this.credentialsClient = new Credential(credentialsConfig);
    }
    static getInstance(): InstanceType<typeof Credential> {
        if (!CredentialClient.instance) {
            CredentialClient.instance = new CredentialClient();
        }
        return CredentialClient.instance.credentialsClient;
    }
}
/**
 * Kelas singleton ECS Client mengelola instans klien ECS.
 */
class EcsClient {
    private static instance: EcsClient;
    private readonly ecsClient: InstanceType<typeof Ecs20140526>;
    private constructor(credentialClient: InstanceType<typeof Credential>) {
        const config = new Config({
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com',
            credential: credentialClient
        });
        this.ecsClient = new Ecs20140526(config);
    }
    static getInstance(credentialClient: InstanceType<typeof Credential>): InstanceType<typeof Ecs20140526> {
        if (!EcsClient.instance) {
            EcsClient.instance = new EcsClient(credentialClient);
        }
        return EcsClient.instance.ecsClient;
    }
}
/**
 * Jalankan logika tugas.
 */
async function executeTask(): Promise<void> {
    try {
        const credentialClient = CredentialClient.getInstance();
        const credential = await credentialClient.getCredential();
        console.log(new Date());
        console.log(`AK ID: ${credential.accessKeyId}`);
        console.log(`AK Secret: ${credential.accessKeySecret}`);
        console.log(`STS Token: ${credential.securityToken}`);
        // Contoh ini memanggil operasi API ECS untuk memverifikasi validitas kredensial. Ubah sesuai kebutuhan.
        const ecsClient = EcsClient.getInstance(credentialClient);
        const request = new $Ecs20140526.DescribeRegionsRequest();
        const runtime = new RuntimeOptions({});
        const response = await ecsClient.describeRegionsWithOptions(request, runtime);
        console.log(`Hasil pemanggilan: ${response.statusCode}`);
    } catch (error) {
        throw new Error(`Eksekusi klien ECS gagal: ${error}`);
    }
}
/**
 * Jadwalkan eksekusi tugas menggunakan timer.
 */
function scheduleTasks(): void {
    // Jalankan tugas segera sekali.
    executeTask();
    // Atur penundaan untuk tugas berikutnya.
    setTimeout(executeTask, 600 * 1000); // Eksekusi kedua: setelah 600 detik.
    setTimeout(executeTask, 4200 * 1000); // Eksekusi ketiga: setelah 4.200 detik.
    setTimeout(executeTask, 4300 * 1000); // Eksekusi keempat: setelah 4.300 detik.
}
// Mulai penjadwalan tugas.
scheduleTasks();
2025-05-28T09:22:29.584Z
AK ID: STS.NVS9xxx7DRbao
AK Secret: 9SoQxxxmVjVsED9ad47rcgMaw5XyQyXx
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5Xmcu/irrxq0pWvU0PZhvVtS7hovafKjTz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4xc1LGed0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOiIqKOsk1MdI9Cywly2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/JHusVmo7LiTxqAARdkoKCeYBvLk0ZFWccCiM0ZvdnRtv0VDOUfD1zQELQGL+xB5NrBmdzq2ePjFJbrkBGmy5EXD714jknyzM4lFic2dUQMi14NCHMVDVjGAf0qUs
F+PQW58jGb32fmFxxxTXOx82sdRQqW0/vTd2KQmIAA=
Invoke result: 200
2025-05-28T09:32:28.137Z
AK ID: STS.NVS9xxx7DRbao
AK Secret: 9SoQxxxmVjVsED9ad47rcgMaw5XyQyXx
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5Xmcu/irrxq0pWvU0PZhvVtS7hovafKjTz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4xc1LGed0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOiIqKOsk1MdI9Cywly2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/JHusVmo7LiTxqAARdkoKCeYBvLk0ZFWccCiM0ZvdnRtv0VDOUfD1zQELQGL+xB5NrBmdzq2ePjFJbrkBGmy5EXD714jknyzM4lFic2dUQMi14NCHMVDVjGAf0qUs
F+PQW58jGb32fmFxxxTXOx82sdRQqW0/vTd2KQmIAA=
Invoke result: 200
2025-05-28T10:32:29.771Z
AK ID: STS.NVuaxxxLFiPw8
AK Secret: 5dsoxxxpA5pCzfrek4KforS8MnJ6qHR9
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5XAKsjd241w4PqgY1P2gDUvb8NqhpXc2jz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4yVKL2Gd0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOjIqKOsk+Mdk9CiWv2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/KpUoQEo7LiTxqAAUyV7F+kpLHRG/yHw3JaVz14hqSj2hmxxkwgczUWIkpBLKHLeW0iI3sp2LNQO6iEAImLpSE0nRVBbcutIqxEuFzAs607jgOjHakTF7UZNoKVV
wb42xR4s4ThGd2PxxxqoUsrKfCq5lHiUiDq6L1VIAA=
Invoke result: 200
2025-05-28T10:34:08.130Z
AK ID: STS.NVuaxxxLFiPw8
AK Secret: 5dsoxxxpA5pCzfrek4KforS8MnJ6qHR9
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5XAKsjd241w4PqgY1P2gDUvb8NqhpXc2jz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4yVKL2Gd0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOjIqKOsk+Mdk9CiWv2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/KpUoQEo7LiTxqAAUyV7F+kpLHRG/yHw3JaVz14hqSj2hmxxkwgczUWIkpBLKHLeW0iI3sp2LNQO6iEAImLpSE0nRVBbcutIqxEuFzAs607jgOjHakTF7UZNoKVV
wb42xR4s4ThGd2PxxxqoUsrKfCq5lHiUiDq6L1VIAA=
Invoke result: 200

Analisis berdasarkan output log:

  • Pada pemanggilan pertama, cache kosong. Sistem mengambil kredensial berdasarkan konfigurasi Anda lalu menyimpannya dalam cache.

  • Pemanggilan kedua menggunakan kredensial yang sama dengan yang pertama, menunjukkan bahwa kredensial tersebut diambil dari cache.

  • Pada pemanggilan ketiga, kredensial yang di-cache telah kedaluwarsa. Waktu kedaluwarsanya (RoleSessionExpiration) adalah 3.600 detik, tetapi pemanggilan ini dilakukan 4.200 detik setelah yang pertama. Akibatnya, mekanisme refresh otomatis SDK mengambil kredensial baru dan memperbarui cache.

  • Pemanggilan keempat menggunakan kredensial yang sama dengan yang ketiga, mengonfirmasi bahwa cache telah diperbarui.

Dokumen terkait