全部产品
Search
文档中心

Alibaba Cloud SDK:Kelola kredensial akses

更新时间:Dec 19, 2025

Saat menggunakan Alibaba Cloud SDK, informasi kredensial seperti pasangan AccessKey dan token Security Token Service (STS) dikelola oleh tool Credentials. Topik ini menjelaskan jenis kredensial yang didukung oleh tool Credentials serta cara mengonfigurasinya.

Prasyarat

  • .NET Framework 4.5 atau versi yang lebih baru.

  • .NET Standard 2.0 atau versi yang lebih baru.

  • C# 4.0 atau versi yang lebih baru.

  • Alibaba Cloud SDK untuk .NET V2.0.

Instal tool Credentials

Jika Anda telah menginstal tool .NET Credentials, langkah ini dapat dilewati. Pastikan Anda menggunakan versi terbaru dari paket dependensi Credentials agar semua jenis kredensial didukung. Untuk informasi selengkapnya mengenai semua versi yang telah dirilis, lihat ChangeLog.md.

Anda dapat menginstal tool Credentials dengan salah satu cara berikut:

  • Metode 1: Instal tool menggunakan command-line interface (CLI) .NET.

    dotnet add package Aliyun.Credentials
  • Metode 2: Instal tool menggunakan NuGet package manager.

    1. Pada panel Solution Explorer, klik kanan proyek Anda lalu pilih Manage NuGet Packages.

    2. Pada panel NuGet Package Manager, klik tab Browse lalu masukkan Aliyun.Credentials.

    3. Pada daftar yang muncul, pilih paket resmi dengan nilai Authors adalah Alibaba Cloud, lalu klik Install.

Setelah instalasi berhasil, Anda dapat menjalankan perintah berikut. Output-nya mencakup Aliyun.Credentials beserta nomor versinya:

dotnet list package

Parameter tool Credentials

Parameter konfigurasi untuk tool Credentials didefinisikan dalam Aliyun.Credentials.Models.Config. Gunakan parameter yang diperlukan type untuk menentukan jenis kredensial. Setelah jenis kredensial ditentukan, pilih parameter yang sesuai. Tabel berikut mencantumkan nilai valid untuk type dan parameter yang didukung oleh setiap jenis kredensial. Tanda centang () menunjukkan parameter yang diperlukan, tanda hubung (-) menunjukkan parameter opsional, dan tanda silang (×) menunjukkan parameter yang tidak didukung.

Catatan

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

Type

access_key

sts

ram_role_arn

ecs_ram_role

oidc_role_arn

credentials_uri

bearer

AccessKeyId: ID AccessKey.

×

×

×

×

AccessKeySecret: Rahasia AccessKey.

×

×

×

×

SecurityToken: Token STS.

×

-

×

×

×

×

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

×

×

×

×

×

RoleSessionName: Nama sesi kustom. Format default adalah credentials-csharp-current_timestamp.

×

×

-

×

-

×

×

RoleName: Nama peran RAM.

×

×

×

-

×

×

×

DisableIMDSv1: Menentukan apakah akan memaksa menggunakan mode penguatan keamanan. Nilai default: false.

×

×

×

-

×

×

×

BearerToken: Token bearer.

×

×

×

×

×

×

Policy: Kebijakan izin kustom.

×

×

-

×

-

×

×

RoleSessionExpiration: Waktu hidup (TTL) sesi. Nilai default: 3600 detik.

×

×

-

×

-

×

×

OidcProviderArn: ARN dari Penyedia Identitas OIDC.

×

×

×

×

×

×

OidcTokenFilePath: Jalur ke file token OIDC.

×

×

×

×

×

×

ExternalId: ID eksternal peran. Fitur ini mencegah masalah confused deputy. Untuk informasi selengkapnya, lihat Gunakan ID eksternal untuk mencegah masalah confused deputy.

×

×

-

×

×

×

×

CredentialsURI: URI kredensial.

×

×

×

×

×

×

STSEndpoint: Titik akhir STS. Titik akhir VPC dan titik akhir jaringan publik didukung. Untuk informasi tentang nilai yang valid, lihat Endpoints. Nilai default adalah sts.aliyuncs.com.

×

×

-

×

-

×

×

Timeout: Timeout baca untuk permintaan HTTP. Nilai default: 5000 milidetik.

×

×

-

-

-

-

×

ConnectTimeout: Timeout koneksi untuk permintaan HTTP. Nilai default: 10000 milidetik.

×

×

-

-

-

-

×

Inisialisasi klien kredensial

Bagian berikut menyediakan contoh kode untuk menunjukkan cara menggunakan tool Credentials. Anda dapat memilih metode sesuai kebutuhan.

Penting
  • Kami menyarankan Anda menyimpan pasangan AccessKey dalam variabel lingkungan atau file konfigurasi.

  • Kami menyarankan Anda menggunakan pola singleton saat menggunakan tool Credentials. Praktik ini mengaktifkan fitur cache kredensial bawaan, mencegah masalah pembatasan kecepatan akibat banyak panggilan API, serta menghindari pemborosan sumber daya karena pembuatan banyak instans. Untuk informasi selengkapnya, lihat Mekanisme auto-refresh untuk kredensial sesi.

Metode 1: Gunakan rantai penyedia kredensial default

Jika Anda tidak meneruskan parameter apa pun saat menginisialisasi klien kredensial, tool Credentials akan menggunakan rantai penyedia kredensial default untuk menginisialisasi klien. Untuk informasi selengkapnya mengenai logika pengambilan kredensial default, lihat Rantai penyedia kredensial default.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Jangan tentukan parameter atau teruskan null.
            var credential = new Aliyun.Credentials.Client();
            // var credential = new Aliyun.Credentials.Client(null);
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions Elastic Compute Service (ECS). Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Gunakan kredensial default untuk menginisialisasi Klien Credentials.
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(null);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 2: Gunakan AccessKey

Tool Credentials menggunakan AccessKey Anda sebagai kredensial akses.

Peringatan

Akun Alibaba Cloud memiliki izin penuh atas semua resource. Jika pasangan AccessKey akun Alibaba Cloud bocor, hal ini menimbulkan ancaman keamanan serius bagi sistem Anda. Kami tidak menyarankan penggunaan pasangan AccessKey akun Alibaba Cloud.

Kami menyarankan Anda menggunakan pasangan AccessKey Pengguna RAM yang diberikan izin minimum yang diperlukan.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "access_key",                    
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),          
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")   
            };
            var akCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = akCredential.GetAccessKeyId();
            string accessSecret = akCredential.GetAccessKeySecret();
            string credentialType = akCredential.GetType();
        }
    }
}

Panggilan API contoh

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan AccessKey.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "access_key",
                // Dapatkan ID AccessKey dari variabel lingkungan.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Dapatkan rahasia AccessKey dari variabel lingkungan.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 3: Gunakan token STS

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

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "sts", 
                // Dapatkan ID AccessKey dari variabel lingkungan.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Dapatkan rahasia AccessKey dari variabel lingkungan.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), 
                // SecurityToken sementara yang diperoleh dari variabel lingkungan.
              	SecurityToken = Environment.GetEnvironmentVariable("<ALIBABA_CLOUD_SECURITY_TOKEN>")
            };
            var stsCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = stsCredential.GetAccessKeyId();
            string accessSecret = stsCredential.GetAccessKeySecret();
            string credentialType = stsCredential.GetType();
            string securityToken = stsCredential.GetSecurityToken();
        }
    }

Panggilan API contoh

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal Elastic Compute Service SDK dan Security Token Service SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan token STS.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "sts", 
                // Dapatkan ID AccessKey dari variabel lingkungan.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Dapatkan rahasia AccessKey dari variabel lingkungan.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), 
                // SecurityToken sementara yang diperoleh dari variabel lingkungan.
              	SecurityToken = Environment.GetEnvironmentVariable("<ALIBABA_CLOUD_SECURITY_TOKEN>")
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 4: Gunakan AccessKey dan RamRoleArn

Implementasi dasar metode ini adalah token STS. Dengan menentukan Amazon Resource Name (ARN) peran RAM, tool Credentials dapat membantu pengembang mendapatkan token STS dari STS. Anda juga dapat memberikan nilai pada parameter Policy untuk membatasi peran RAM pada kumpulan izin yang lebih kecil.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "ram_role_arn",                  
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
              	// ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",  
              	// Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>", 
            };
            var arnCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = arnCredential.GetAccessKeyId();
            string accessSecret = arnCredential.GetAccessKeySecret();
            string credentialType = arnCredential.GetType();
            string securityToken = arnCredential.GetSecurityToken();
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan AccessKey dan RamRoleArn.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "ram_role_arn",
                // Atur ID AccessKey.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Atur rahasia AccessKey.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>",
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 5: Gunakan peran RAM instans

Baik instans ECS maupun ECI mendukung penyambungan peran RAM instans. Program yang berjalan pada instans ini dapat menggunakan tool Credentials untuk secara otomatis mengambil token STS untuk peran tersebut, sehingga menyelesaikan inisialisasi klien kredensial.

Secara default, tool Credentials mengakses layanan metadata instans ECS dalam mode penguatan keamanan (IMDSv2). Jika terjadi pengecualian dalam mode ini, tool tersebut kembali ke mode normal untuk mengambil kredensial akses. Anda juga dapat mengatur parameter disableIMDSv1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE untuk mengeksekusi logika penanganan pengecualian yang berbeda:

  • Jika nilainya false (default), tool tersebut melanjutkan pengambilan kredensial akses dalam mode normal.

  • Jika nilainya true, tool tersebut hanya dapat mengambil kredensial akses dalam mode penguatan keamanan, dan pengecualian dilemparkan.

Dukungan server terhadap IMDSv2 bergantung pada konfigurasi server Anda.

Selain itu, Anda dapat mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk menonaktifkan akses kredensial dari metadata ECS.

Catatan
using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = new Config()
            {
                Type = "ecs_ram_role",
              	// Opsional. Nama peran ECS. Jika tidak ditentukan, akan diambil secara otomatis. Kami menyarankan Anda menambahkannya untuk mengurangi jumlah permintaan. Anda dapat mengatur RoleName menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
                RoleName = "<RoleName>" 
            };
            // Opsional. Nilai default: false. true: Memaksa penggunaan mode penguatan keamanan. false: Sistem pertama-tama mencoba mendapatkan kredensial dalam mode penguatan keamanan. Jika gagal, beralih ke mode normal (IMDSv1) untuk mencoba lagi.
            // config.DisableIMDSv1 = true;
            
            var ecsCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = ecsCredential.GetAccessKeyId();
            string accessSecret = ecsCredential.GetAccessKeySecret();
            string credentialType = ecsCredential.GetType();
            string securityToken = ecsCredential.GetSecurityToken();
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan peran yang dilampirkan ke instans ECS.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "ecs_ram_role",
              	// Opsional. Nama peran ECS. Jika tidak ditentukan, akan diambil secara otomatis. Kami menyarankan Anda menambahkannya untuk mengurangi jumlah permintaan. Anda dapat mengatur RoleName menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
                RoleName = "<RoleName>"
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 6: Gunakan OIDCRoleArn

Jika Anda menggunakan protokol autentikasi OIDC dan telah membuat peran RAM untuk Penyedia Identitas OIDC, Anda dapat meneruskan ARN Penyedia Identitas OIDC, token OIDC, dan ARN peran RAM ke tool Credentials. Sistem kemudian secara otomatis memanggil operasi AssumeRoleWithOIDC untuk mendapatkan token STS untuk peran RAM dan menggunakan token ini sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung auto-refresh. Untuk informasi selengkapnya, lihat Mekanisme auto-refresh untuk kredensial sesi. Misalnya, jika aplikasi Anda berjalan di kluster ACK tempat fitur RRSA diaktifkan, tool Credentials membaca informasi konfigurasi OIDC dari variabel lingkungan pod, memanggil operasi AssumeRoleWithOIDC untuk mendapatkan token STS untuk peran layanan, dan menggunakan token ini untuk mengakses layanan Alibaba Cloud terkait.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "oidc_role_arn",
                // ARN peran RAM. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // ARN penyedia OIDC. Anda dapat mengatur OidcProviderArn menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                OIDCProviderArn = "<OidcProviderArn>",
                // Jalur ke file token OIDC. Anda dapat mengatur OidcTokenFilePath menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                OIDCTokenFilePath = "<OidcTokenFilePath>",
                // Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>",
                // Kebijakan izin yang lebih kecil. Ini opsional. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                Policy = "<Policy>",
                RoleSessionExpiration = 3600
            };
            var ecsCredential = new Aliyun.Credentials.Client(config);
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan OIDCRoleArn.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "oidc_role_arn",
                // ARN peran RAM. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // ARN penyedia OIDC. Anda dapat mengatur OidcProviderArn menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                OIDCProviderArn = "<OidcProviderArn>",
                // Jalur ke file token OIDC. Anda dapat mengatur OidcTokenFilePath menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                OIDCTokenFilePath = "<OidcTokenFilePath>",
                // Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>",
                // Kebijakan izin yang lebih kecil. Ini opsional. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                Policy = "<Policy>",
                RoleSessionExpiration = 3600
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 7: Gunakan URI kredensial

Dengan mengenkapsulasi layanan STS dan mengekspos URI-nya, layanan eksternal dapat memperoleh token STS melalui URI tersebut. Hal ini mengurangi risiko paparan informasi sensitif, seperti pasangan AccessKey. Tool Credentials memperoleh token STS dengan mengakses URI yang Anda berikan dan menggunakan token ini sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung auto-refresh. Untuk informasi selengkapnya, lihat Mekanisme auto-refresh untuk kredensial sesi.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "credentials_uri",
              	// URI untuk mendapatkan kredensial, dalam format http://local_or_remote_uri/. Anda dapat mengatur CredentialsUri menggunakan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
                CredentialsURI = "<CredentialsURI>"     
            };
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions ECS. Sebelum memulai, Anda harus menginstal ECS SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan URI.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "credentials_uri",
              	// URI untuk mendapatkan kredensial, dalam format http://local_or_remote_uri/. Anda dapat mengatur CredentialsUri menggunakan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
                CredentialsURI = "<CredentialsURI>" 
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial menggunakan Credentials.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi Klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 8: Gunakan token bearer

Saat ini, hanya Cloud Call Center (CCC) yang mendukung inisialisasi kredensial dengan token bearer.

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "bearer",     
              	// Masukkan Bearer Token Anda.
                BearerToken = "<BearerToken>"      
            };
            var bearerCredential = new Aliyun.Credentials.Client(config);

            string bearerToken = bearerCredential.GetBearerToken();
            string credentialType = bearerCredential.GetType();
        }
    }
}

Panggilan API contoh

Contoh ini menunjukkan cara memanggil operasi GetInstance CCC. Sebelum memulai, Anda harus menginstal CCC SDK.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;

namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi Klien Credentials menggunakan Bearer Token.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "bearer",
                // Masukkan Bearer Token Anda.
                BearerToken = "<BearerToken>"
            };
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(credentialsConfig);

            AlibabaCloud.OpenApiClient.Models.Config cccConfig = new AlibabaCloud.OpenApiClient.Models.Config()
            {
                // Konfigurasikan titik akhir layanan.
                Endpoint = "ccc.cn-shanghai.aliyuncs.com",
                // Konfigurasikan kredensial menggunakan Credentials.
                Credential = credentialClient
            };

            // Inisialisasi Klien CCC.
            AlibabaCloud.SDK.CCC20200701.Client cccClient = new AlibabaCloud.SDK.CCC20200701.Client(cccConfig);
            // Inisialisasi permintaan GetInstance.
            AlibabaCloud.SDK.CCC20200701.Models.GetInstanceRequest getInstanceRequest = new AlibabaCloud.SDK.CCC20200701.Models.GetInstanceRequest
            {
                InstanceId = "ccc-test",
            };
            // Inisialisasi konfigurasi waktu proses.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.CCC20200701.Models.GetInstanceResponse response = cccClient.GetInstanceWithOptions(getInstanceRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Rantai penyedia kredensial default

Jika lingkungan pengembangan dan produksi Anda menggunakan jenis kredensial yang berbeda, praktik umum adalah mengambil informasi lingkungan saat ini dalam kode dan menulis kode cabang untuk mengambil kredensial yang berbeda. Dengan rantai penyedia kredensial default dari tool Credentials, Anda dapat menggunakan kode yang sama dan mengontrol cara mendapatkan kredensial di lingkungan yang berbeda melalui konfigurasi eksternal. Saat Anda menginisialisasi klien kredensial dengan memanggil new Client(config) dan meneruskan null tanpa meneruskan parameter apa pun, Alibaba Cloud SDK mencoba menemukan informasi kredensial yang relevan dalam urutan berikut.

1. Gunakan variabel lingkungan

Jika tidak ditemukan informasi kredensial dalam properti sistem, tool Credentials memeriksa variabel lingkungan.

  • Jika variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ada dan tidak kosong, pasangan AccessKey digunakan sebagai kredensial default.

  • Jika variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN semuanya diatur, token STS digunakan sebagai kredensial default.

2. Gunakan peran RAM OIDC

Jika tidak ditemukan informasi kredensial, tool Credentials memeriksa variabel lingkungan berikut yang terkait dengan peran RAM OIDC:

  • ALIBABA_CLOUD_ROLE_ARN: ARN peran RAM.

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN Penyedia Identitas OIDC.

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: Jalur file token OIDC.

Jika ketiga variabel lingkungan tersebut ada dan tidak kosong, tool Credentials menggunakan nilai variabel lingkungan ini untuk memanggil operasi AssumeRoleWithOIDC STS dan mendapatkan token STS sebagai kredensial default.

3. Gunakan file konfigurasi config.json

Jika kredensial masih belum ditemukan, tool Credentials mencoba memuat file config.json dari jalur default dan menggunakan kredensial yang ditentukan sebagai kredensial default. Jalur file default adalah:

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

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

Untuk mengonfigurasi kredensial menggunakan metode ini, Anda dapat menggunakan Cloud Assistant CLI atau membuat file konfigurasi config.json secara manual di jalur yang sesuai. Blok kode berikut menunjukkan contoh format konten:

{
  "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

Menentukan nama kredensial yang akan digunakan, yang sesuai dengan nilai parameter profiles pada nilai name. Secara default, sistem memprioritaskan nama kredensial yang ditentukan oleh variabel lingkungan ALIBABA_CLOUD_PROFILE . Jika variabel lingkungan ini tidak diatur, sistem menggunakan nama kredensial yang ditentukan oleh current.

profiles

Kumpulan informasi kredensial. Gunakan parameter mode untuk menentukan jenis kredensial:

  • AK: Menggunakan pasangan AccessKey pengguna sebagai kredensial.

  • StsToken: Menggunakan token STS sebagai kredensial.

  • RamRoleArn: Mendapatkan kredensial dengan meminta Pengguna RAM mengasumsikan peran RAM.

  • EcsRamRole: Mendapatkan kredensial dari metadata instans.

  • OIDC: Mendapatkan kredensial menggunakan ARN Penyedia Identitas OIDC, token OIDC, dan ARN peran RAM.

  • ChainableRamRoleArn: Menggunakan metode perantai peran untuk mendapatkan informasi kredensial baru menggunakan source_profile untuk menentukan nama kredensial lain dalam profiles.

4. Gunakan peran RAM instans ECS

Jika aplikasi Anda berjalan pada instans ECS atau ECI yang diberikan peran RAM, tool Credentials dapat memperoleh token STS untuk peran RAM dari metadata instans dan menggunakannya sebagai kredensial akses. Saat mengakses metadata instans, aplikasi pertama-tama mengambil nama peran RAM yang diberikan ke instans saat ini, lalu memperoleh token STS yang sesuai berdasarkan peran tersebut. Anda dapat menentukan nama peran RAM menggunakan parameter roleName atau variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk mengurangi waktu yang diperlukan untuk mendapatkan kredensial dan meningkatkan efisiensi. Kredensial yang diperoleh dengan cara ini mendukung auto-refresh. Untuk informasi selengkapnya, lihat Mekanisme auto-refresh untuk kredensial sesi.

  • Jika nilainya false (default), sistem mencoba beralih ke mode NAT untuk melanjutkan pengambilan kredensial.

  • Jika nilainya true, hanya mode penguatan keamanan yang dapat digunakan untuk mendapatkan kredensial. Pengecualian dilemparkan jika akses dalam mode ini gagal.

Dukungan server terhadap IMDSv2 bergantung pada konfigurasi server Anda.

Selain itu, Anda dapat menonaktifkan akses kredensial dari metadata instans dengan mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.

Catatan

5. Gunakan URI tool Credentials

Jika tidak ditemukan informasi kredensial, tool Credentials memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel ini ada dan mengarah ke URI yang valid, tool Credentials mengakses URI ini untuk mendapatkan token STS sebagai kredensial default.

Mekanisme auto-refresh untuk kredensial jenis sesi

Kredensial sesi mencakup ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri. Jenis kredensial ini memiliki mekanisme auto-refresh bawaan dalam tool Credentials. Setelah klien kredensial mendapatkan kredensial untuk pertama kalinya, tool Credentials menyimpan informasi kredensial ke cache. Pada permintaan berikutnya, instans klien kredensial yang sama secara otomatis mengambil kredensial dari cache. Jika kredensial dalam cache telah kedaluwarsa, instans klien kredensial tersebut memperoleh kembali kredensial dan memperbarui cache.

Catatan

Untuk kredensial `ecs_ram_role`, tool Credentials merefresh cache 15 menit sebelum kredensial kedaluwarsa.

Contoh berikut membuat klien kredensial dalam pola singleton. Klien tersebut memperoleh kredensial pada titik waktu yang berbeda untuk memverifikasi mekanisme auto-refresh dan memanggil operasi OpenAPI untuk memastikan bahwa kredensial yang diperoleh valid.

using System;
using System.Threading.Tasks;
using Aliyun.Credentials.Models;
using AlibabaCloud.SDK.Ecs20140526;
using AlibabaCloud.OpenApiClient.Models;
using AlibabaCloud.TeaUtil.Models;

namespace Example
{
    /// <summary>
    /// Kelas Credential digunakan untuk mengelola instans kredensial Alibaba Cloud. Kelas ini menggunakan pola singleton statis.
    /// </summary>
    public static class Credential
    {
        private static readonly Lazy<Aliyun.Credentials.Client> _instance = new(() =>
        {
            try
            {
                var config = new Aliyun.Credentials.Models.Config
                {
                    Type = "ram_role_arn",
                    AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                    RoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN"),
                    RoleSessionName = "RamRoleArnTest",
                    RoleSessionExpiration = 3600
                };

                return new Aliyun.Credentials.Client(config);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Inisialisasi kredensial gagal: " + ex.Message, ex);
            }
        });

        public static Aliyun.Credentials.Client Instance => _instance.Value;
    }

    /// <summary>
    /// Kelas EcsClient digunakan untuk mengelola instans klien ECS. Kelas ini menggunakan pola singleton statis.
    /// Anda harus mengatur endpoint dan kredensial menggunakan Initialize.
    /// </summary>
    public static class EcsClient
    {
        private static string _endpoint = string.Empty; // Inisialisasi eksplisit. Tidak boleh null.
        private static Aliyun.Credentials.Client _credential = null!; // Inisialisasi eksplisit. Tidak boleh null.

        private static readonly Lazy<AlibabaCloud.SDK.Ecs20140526.Client> _instance = new(() =>
        {
            if (string.IsNullOrEmpty(_endpoint))
            {
                throw new InvalidOperationException("Endpoint harus diatur sebelum menginisialisasi klien ECS.");
            }

            if (_credential == null)
            {
                throw new InvalidOperationException("Kredensial harus diatur sebelum menginisialisasi klien ECS.");
            }

            try
            {
                var ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config
                {
                    Endpoint = _endpoint,
                    Credential = _credential
                };

                return new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Inisialisasi klien ECS gagal: " + ex.Message, ex);
            }
        });

        public static void Initialize(string endpoint, Aliyun.Credentials.Client credential)
        {
            if (string.IsNullOrEmpty(endpoint))
            {
                throw new ArgumentException("Endpoint tidak boleh null atau kosong.", nameof(endpoint));
            }

            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential), "Kredensial tidak boleh null.");
            }

            _endpoint = endpoint;
            _credential = credential;
        }

        public static AlibabaCloud.SDK.Ecs20140526.Client Instance => _instance.Value;
    }

    public class Program
    {
        public static async Task Main(string[] args)
        {
            // Inisialisasi EcsClient.
            EcsClient.Initialize("ecs.cn-hangzhou.aliyuncs.com", Credential.Instance);

            Action task = () =>
            {
                try
                {
                    var credential = Credential.Instance.GetCredential();
                    Console.WriteLine(DateTime.Now);
                    Console.WriteLine($"ID AK: {credential.AccessKeyId}, Rahasia AK: {credential.AccessKeySecret}, Token STS: {credential.SecurityToken}");

                    var ecsClient = EcsClient.Instance;
                    var request = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
                    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();

                    var response = ecsClient.DescribeRegionsWithOptions(request, runtime);
                    Console.WriteLine($"Hasil pemanggilan: {response.StatusCode}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Eksekusi klien ECS gagal: {ex.Message}");
                }
            };

            // Eksekusi sekali segera.
            task();

            // Mulai tugas asinkron secara konkuren.
            var tasks = new[]
            {
                ScheduleTaskAsync(task, 600),
                ScheduleTaskAsync(task, 4200),
                ScheduleTaskAsync(task, 4300)
            };

            await Task.WhenAll(tasks);

            Console.WriteLine("Semua tugas selesai.");
        }

        private static async Task ScheduleTaskAsync(Action task, int delaySeconds)
        {
            await Task.Delay(TimeSpan.FromSeconds(delaySeconds));
            task();
        }
    }
}

image

Bagian berikut menganalisis hasil log:

  • Pada pemanggilan pertama, tidak ada informasi kredensial yang di-cache. Oleh karena itu, sistem memperoleh kredensial berdasarkan konfigurasi. Setelah kredensial diperoleh, kredensial tersebut disimpan dalam cache.

  • Kredensial yang digunakan pada pemanggilan kedua sama dengan yang pertama. Hal ini menunjukkan bahwa kredensial untuk pemanggilan kedua diambil dari cache.

  • Pada pemanggilan ketiga, kredensial dalam cache telah kedaluwarsa. Hal ini karena periode validitas kredensial (`RoleSessionExpiration`) diatur menjadi 3.600 detik, dan pemanggilan ketiga terjadi 4.200 detik setelah pemanggilan pertama. Oleh karena itu, SDK memperoleh kembali kredensial baru berdasarkan mekanisme auto-refresh dan menyimpan kredensial baru ke cache.

  • Kredensial yang digunakan pada pemanggilan keempat sama dengan kredensial baru yang diperoleh pada pemanggilan ketiga. Hal ini menunjukkan bahwa kredensial dalam cache telah diperbarui setelah kedaluwarsa.

Referensi