All Products
Search
Document Center

Alibaba Cloud SDK:Mengelola kredensial akses

Last Updated:Jun 22, 2026

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

Prasyarat

  • .NET Framework 4.5 atau versi lebih baru.

  • .NET Standard 2.0 atau versi lebih baru.

  • C# 4.0 atau versi lebih baru.

  • Alibaba Cloud SDK for .NET V2.0 atau versi lebih baru.

Instal tool kredensial

Jika Anda telah menginstal Alibaba Cloud Credentials untuk .NET, Anda dapat melewati langkah ini. Gunakan versi terbaru dari paket kredensial untuk memastikan dukungan terhadap semua jenis kredensial. Untuk informasi tentang semua versi yang dirilis, lihat ChangeLog.md.

Anda dapat menginstal Alibaba Cloud Credentials untuk .NET dengan salah satu cara berikut:

  • Instal paket dengan CLI .NET.

    dotnet add package Aliyun.Credentials
  • Instal paket dengan manajer paket NuGet.

    1. Klik kanan proyek Anda di Solution Explorer dan pilih Manage NuGet Packages.

    2. Di NuGet Package Manager, klik tab Browse dan masukkan Aliyun.Credentials.

    3. Dari daftar tersebut, pilih paket resmi yang memiliki Authors bernama Alibaba Cloud, lalu klik Install.

Setelah instalasi selesai, jalankan perintah berikut. Output akan menampilkan Aliyun.Credentials dan nomor versinya:

dotnet list package

Parameter untuk tool kredensial

Parameter konfigurasi untuk alat kredensial didefinisikan dalam Aliyun.Credentials.Models.Config. Parameter type yang wajib digunakan menentukan jenis kredensial. Setelah memilih jenis kredensial, konfigurasikan parameter yang sesuai. Tabel berikut merinci nilai yang valid untuk type dan parameter yang didukung oleh setiap jenis kredensial. Dalam tabel ini, menunjukkan parameter wajib, - menunjukkan parameter opsional, dan × menunjukkan parameter yang tidak didukung.

Catatan

Gunakan hanya jenis kredensial dan parameter yang tercantum dalam tabel berikut.

Type

access_key

sts

ram_role_arn

ecs_ram_role

oidc_role_arn

credentials_uri

bearer

AccessKeyId: ID Access Key.

×

×

×

×

AccessKeySecret: Secret Access Key.

×

×

×

×

SecurityToken: Token keamanan.

×

-

×

×

×

×

RoleArn: ARN dari role RAM.

×

×

×

×

×

RoleSessionName: Nama sesi kustom. Format defaultnya adalah credentials-csharp-<timestamp>.

×

×

-

×

-

×

×

RoleName: Nama role RAM.

×

×

×

-

×

×

×

DisableIMDSv1: Menentukan apakah IMDSv1 dinonaktifkan untuk menerapkan mode penguatan keamanan (IMDSv2). Nilai default-nya adalah false.

×

×

×

-

×

×

×

BearerToken: Token bearer.

×

×

×

×

×

×

Policy: Kebijakan kustom.

×

×

-

×

-

×

×

RoleSessionExpiration: Periode timeout sesi, dalam detik. Nilai default-nya adalah 3600.

×

×

-

×

-

×

×

OidcProviderArn: ARN dari penyedia identitas OIDC.

×

×

×

×

×

×

OidcTokenFilePath: Jalur file ke token OIDC.

×

×

×

×

×

×

ExternalId: ID eksternal yang digunakan untuk mencegah masalah confused deputy. Untuk informasi selengkapnya, lihat Gunakan ID eksternal untuk mencegah masalah confused deputy.

×

×

-

×

×

×

×

CredentialsURI: URI kredensial.

×

×

×

×

×

×

STSEndpoint: Titik akhir STS. Baik titik akhir VPC maupun titik akhir publik didukung. Untuk daftar nilai yang valid, lihat Endpoints. Nilai default-nya adalah sts.aliyuncs.com.

×

×

-

×

-

×

×

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

×

×

-

-

-

-

×

ConnectTimeout: Timeout koneksi untuk permintaan HTTP, dalam milidetik. Nilai default-nya adalah 10000.

×

×

-

-

-

-

×

Inisialisasi klien kredensial

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

Penting
  • Menyematkan AccessKey secara langsung dalam proyek Anda menciptakan risiko keamanan. Izin repositori yang tidak dikelola dengan baik dapat mengekspos seluruh sumber daya dalam akun Anda. Disarankan untuk menyimpan AccessKey dalam variabel lingkungan atau file konfigurasi.

  • Gunakan pola singleton dengan alat Credentials. Pola ini memungkinkan caching kredensial bawaan pada alat untuk mencegah pembatasan laju akibat panggilan API yang terlalu sering dan menghindari pemborosan sumber daya akibat pembuatan banyak instans. Untuk informasi selengkapnya, lihat Refresh otomatis kredensial sesi.

Metode 1: Rantai penyedia kredensial default

Jika Anda menginisialisasi klien Credentials tanpa parameter apa pun, alat Credentials akan menggunakan rantai penyedia kredensial default. Untuk memahami cara SDK memuat kredensial default, lihat Rantai penyedia kredensial default.

using Aliyun.Credentials.Models;
namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Tidak meneruskan parameter apa pun, atau meneruskan null.
            var credential = new Aliyun.Credentials.Client();
            // var credential = new Aliyun.Credentials.Client(null);
        }
    }
}

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Instal ECS SDK sebelum menjalankan kode.

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 rantai penyedia kredensial default.
            Aliyun.Credentials.Client credentialClient = new Aliyun.Credentials.Client(null);
            AlibabaCloud.OpenApiClient.Models.Config ecsConfig = new AlibabaCloud.OpenApiClient.Models.Config();
            // Konfigurasikan titik akhir layanan. Contoh ini menggunakan wilayah China (Beijing).
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client escClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi objek permintaan untuk operasi DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi opsi runtime.
            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: AccessKey

Alat Credentials menggunakan AccessKey yang Anda berikan sebagai kredensial akses.

Peringatan

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

Gunakan AK dari pengguna RAM dengan izin prinsip hak istimewa minimal (least-privilege).

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();
        }
    }
}

Contoh API

Contoh ini memanggil operasi DescribeRegions dari ECS. Sebelum menjalankan kode, instal 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 pasangan AccessKey untuk menginisialisasi klien Credentials.
            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 Secret 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();
            // Tentukan titik akhir.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client ecsClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions dan dapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = ecsClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 3: Gunakan token STS

Alat 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 Secret AccessKey dari variabel lingkungan.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), 
                // Dapatkan token keamanan 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();
        }
    }

Contoh pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Sebelum menjalankan kode, Anda harus menginstal ECS SDK for .NET dan STS SDK for .NET.

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 dengan kredensial 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 Secret AccessKey dari variabel lingkungan.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), 
                // Dapatkan SecurityToken sementara 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.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial.
            ecsConfig.Credential = credentialClient;
            // Inisialisasi klien ECS.
            AlibabaCloud.SDK.Ecs20140526.Client ecsClient = new AlibabaCloud.SDK.Ecs20140526.Client(ecsConfig);
            // Inisialisasi permintaan DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeRegionsRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = ecsClient.DescribeRegionsWithOptions(describeRegionsRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 4: Access key dan ARN role RAM

Metode ini menggunakan token STS secara internal. Saat Anda menentukan ARN (Nama Sumber Daya Alibaba Cloud) dari role RAM, alat kredensial memperoleh token STS dari STS. Anda juga dapat menggunakan parameter Policy untuk menerapkan himpunan izin yang lebih kecil pada role RAM.

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 dari role RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda juga dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",  
              	// Nama sesi role. Anda juga dapat mengatur ini 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();
        }
    }
}

Pemanggilan API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions di ECS. Anda harus menginstal ECS SDK sebelum menjalankan kode.

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 dengan pasangan AccessKey dan ARN role RAM.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "ram_role_arn",
                // Tentukan ID AccessKey Anda.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Tentukan Secret AccessKey Anda.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // ARN dari role RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // Nama sesi role. Anda dapat mengatur ini 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.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Atur kredensial.
            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 opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions untuk mendapatkan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 5: Role RAM instans ECS

Anda dapat menyambungkan role RAM instans ke instans ECS dan ECI, sehingga aplikasi pada instans tersebut dapat menggunakan alat Credentials untuk secara otomatis mengambil token STS dari role tersebut guna menginisialisasi klien kredensial.

Secara default, alat Credentials menggunakan mode penguatan keamanan (IMDSv2) untuk mengakses server metadata ECS. Jika terjadi kesalahan, alat akan kembali ke mode normal untuk mengambil kredensial akses. Anda dapat mengonfigurasi perilaku fallback ini dengan mengatur parameter disableIMDSv1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLE:

  • Jika nilainya false (default), alat tetap mengambil kredensial akses dalam mode normal.

  • Jika nilainya true, alat hanya menggunakan mode penguatan keamanan. Jika pengambilan gagal, alat akan melemparkan pengecualian.

Dukungan terhadap IMDSv2 bergantung pada konfigurasi server.

Anda juga dapat mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk menonaktifkan pengambilan kredensial dari metadata instans 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 role RAM ECS. Tentukan parameter ini untuk mengurangi jumlah permintaan. Jika dihilangkan, sistem secara otomatis mengambil nama role. Anda juga dapat mengatur nama role menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
                RoleName = "<RoleName>" 
            };
            // Opsional. Default: false. Atur ke true untuk menerapkan mode penguatan keamanan. Jika false, sistem pertama-tama mencoba mengambil kredensial akses dalam mode penguatan keamanan dan kembali ke mode normal (IMDSv1) jika gagal.
            // 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 API

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

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 role RAM dari instans ECS.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "ecs_ram_role",
              	// Opsional. Nama role RAM untuk instans ECS. Jika Anda menghilangkan parameter ini, sistem secara otomatis mengambil nama role. Menentukan parameter ini mengurangi jumlah permintaan. Anda juga dapat mengatur nama role dengan 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.
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial.
            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 opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 6: Menggunakan OIDCRoleArn

Jika Anda menggunakan OIDC untuk autentikasi dan telah membuat role RAM untuk penyedia identitas OIDC, Anda dapat memberikan ARN penyedia OIDC, jalur file token OIDC, dan ARN role RAM ke alat Credentials. Alat tersebut kemudian secara otomatis memanggil API AssumeRoleWithOIDC untuk mendapatkan token STS untuk role RAM, yang digunakan sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung refresh otomatis. Untuk informasi selengkapnya, lihat Refresh otomatis kredensial sesi. Misalnya, jika aplikasi Anda berjalan di kluster Container Service for Kubernetes (ACK) dengan RRSA diaktifkan, alat Credentials dapat membaca konfigurasi OIDC dari variabel lingkungan pod dan memanggil API AssumeRoleWithOIDC untuk mendapatkan token STS. Anda kemudian dapat menggunakan token STS ini untuk mengakses layanan Alibaba Cloud.

using Aliyun.Credentials.Models;
namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "oidc_role_arn",
                // ARN dari role RAM yang akan diasumsikan. Diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // ARN dari Penyedia Identitas OIDC. Diatur dengan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                OIDCProviderArn = "<OidcProviderArn>",
                // Jalur file token OIDC. Diatur dengan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                OIDCTokenFilePath = "<OidcTokenFilePath>",
                // Nama sesi role. Diatur dengan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>",
                // Opsional. Kebijakan kustom yang membatasi izin untuk sesi role. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                Policy = "<Policy>",
                RoleSessionExpiration = 3600
            };
            var ecsCredential = new Aliyun.Credentials.Client(config);
        }
    }
}

Contoh API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Untuk menjalankan contoh ini, instal ECS SDK for .NET.

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 dengan ARN role OIDC.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "oidc_role_arn",
                // ARN dari role RAM yang akan diasumsikan. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                RoleArn = "<RoleArn>",
                // ARN dari penyedia OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                OIDCProviderArn = "<OidcProviderArn>",
                // Jalur ke file token OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                OIDCTokenFilePath = "<OidcTokenFilePath>",
                // Nama untuk sesi role. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                RoleSessionName = "<RoleSessionName>",
                // Opsional. Tentukan kebijakan yang lebih restriktif. 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.
            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 opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi DescribeRegions.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeInstancesRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 7: URI Kredensial

Anda dapat mengenkapsulasi Security Token Service (STS) di balik URI layanan, sehingga layanan eksternal dapat memperoleh token STS tanpa mengekspos informasi sensitif seperti AK. Alat Credentials kemudian dapat menggunakan URI ini untuk mengambil token STS sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung refresh otomatis. Untuk informasi selengkapnya, lihat Refresh otomatis kredensial sesi.

using Aliyun.Credentials.Models;
namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "credentials_uri",
              	// Menentukan URI untuk mengambil kredensial, misalnya http://local_or_remote_uri/. Atau, atur variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
                CredentialsURI = "<CredentialsURI>"     
            };
        }
    }
}

Contoh API

Contoh ini menunjukkan cara memanggil operasi DescribeRegions dari ECS. Instal ECS SDK for .NET sebelum menjalankan kode.

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 yang digunakan untuk mengambil kredensial, dalam format `http://local_or_remote_uri/`. SDK juga membaca URI dari 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. Contoh ini menggunakan wilayah China (Beijing).
            ecsConfig.Endpoint = "ecs.cn-beijing.aliyuncs.com";
            // Konfigurasikan kredensial.
            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 describeRegionsRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // Inisialisasi konfigurasi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Memanggil operasi DescribeRegions dan menyimpan respons.
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsResponse response = escClient.DescribeRegionsWithOptions(describeRegionsRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Metode 8: Token bearer

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();
        }
    }
}

Contoh API

Contoh ini menunjukkan cara memanggil operasi GetInstance untuk Cloud Call Center. Anda harus menginstal CCC SDK sebelum menjalankan kode.

using System;
using Aliyun.Credentials.Models;
using Tea;
using Tea.Utils;
namespace credentials_demo
{
    public class Sample
    {
        static void Main(string[] args)
        {
            // Inisialisasi klien kredensial dengan token bearer.
            Aliyun.Credentials.Models.Config credentialsConfig = new Aliyun.Credentials.Models.Config()
            {
                // Jenis kredensial.
                Type = "bearer",
                // Tentukan token bearer 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.
                Endpoint = "ccc.cn-shanghai.aliyuncs.com",
                // Atur objek kredensial untuk autentikasi.
                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 opsi runtime.
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            // Panggil operasi GetInstance.
            AlibabaCloud.SDK.CCC20200701.Models.GetInstanceResponse response = cccClient.GetInstanceWithOptions(getInstanceRequest, runtime);
            Console.WriteLine(response.Body.ToMap());
        }
    }
}

Rantai penyedia kredensial default

Saat aplikasi Anda menggunakan kredensial berbeda untuk lingkungan pengembangan dan produksi, pengembang biasanya menulis kode kondisional untuk memuat kredensial yang tepat untuk setiap lingkungan. Rantai penyedia kredensial default memungkinkan Anda menggunakan kode yang sama dan mengelola kredensial untuk lingkungan berbeda melalui konfigurasi eksternal. Saat Anda menginisialisasi klien kredensial dengan memanggil new Client(config) tanpa parameter atau dengan null, Alibaba Cloud SDK mencoba menemukan 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. Gunakan role RAM OIDC

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

  • ALIBABA_CLOUD_ROLE_ARN: ARN dari role RAM.

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN dari 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 dari Security Token Service (STS) untuk mendapatkan token STS.

3. Menggunakan config.json

Jika belum ditemukan kredensial, rantai penyedia mencoba memuat file kredensial bersama, config.json, dari lokasi default-nya 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 role RAM dengan menggunakan kredensial pengguna RAM untuk mendapatkan kredensial sementara.

  • EcsRamRole: Mendapatkan kredensial dari metadata instans.

  • OIDC: Mendapatkan kredensial dengan menggunakan ARN penyedia OIDC, token OIDC, dan ARN role RAM.

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

4. Role RAM instans ECS

Jika aplikasi Anda berjalan di instans Elastic Compute Service (ECS) atau Elastic Container Instance (ECI) yang telah diberi role RAM, alat Credentials mengambil token STS dari metadata instans untuk digunakan sebagai kredensial akses. Saat mengakses metadata instans, alat pertama-tama mengambil nama role RAM yang ditetapkan ke instans tersebut. Anda dapat menentukan nama role RAM dengan menggunakan parameter roleName atau variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk mengurangi waktu pengambilan dan meningkatkan efisiensi. Kredensial yang diperoleh dengan cara ini mendukung refresh otomatis. Untuk informasi selengkapnya, lihat Refresh otomatis kredensial sesi.

  • Jika diatur ke false (default), alat kembali ke mode normal untuk mengambil kredensial.

  • Jika diatur ke true, alat hanya menggunakan mode aman dan melemparkan pengecualian jika akses gagal.

Dukungan server Anda terhadap IMDSv2 bergantung pada konfigurasinya.

Untuk menonaktifkan akses kredensial dari metadata instans, atur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.

Catatan

5. URI tool 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 tersebut mengakses URI untuk mengambil token STS.

Refresh otomatis kredensial sesi

Jenis kredensial sesi, seperti ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri, mendukung refresh otomatis melalui mekanisme bawaan dalam penyedia kredensial. Saat klien kredensial mengambil kredensial untuk pertama kalinya, penyedia menyimpannya dalam cache. Pada operasi selanjutnya, instans klien yang sama secara otomatis mengambil kredensial dari cache ini. Jika kredensial yang di-cache telah kedaluwarsa, instans klien mengambil yang baru dan memperbarui cache tersebut.

Catatan

Untuk kredensial ecs_ram_role, penyedia kredensial secara proaktif merefresh-nya 15 menit sebelum kedaluwarsa.

Contoh berikut menggunakan pola singleton untuk membuat klien kredensial. Contoh ini menunjukkan mekanisme refresh dengan mengambil kredensial pada interval waktu berbeda dan memanggil operasi OpenAPI untuk memverifikasi bahwa kredensial tersebut dapat digunakan.

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 mengelola instans kredensial Alibaba Cloud dengan 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 mengelola instans klien ECS dengan menggunakan pola singleton statis.
    /// Anda harus mengatur endpoint dan kredensial dengan Initialize.
    /// </summary>
    public static class EcsClient
    {
        private static string _endpoint = string.Empty; // Inisialisasi eksplisit. Nilainya tidak boleh null.
        private static Aliyun.Credentials.Client _credential = null!; // Inisialisasi eksplisit. Nilainya 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}, Secret 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}");
                }
            };
            // Jalankan tugas 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();
        }
    }
}
2025/5/29 10:33:24
ID AK: STS.NVR3xxx P8KrfgTK, Secret AK: 6hsZk211xxx
        PeZZ8NHSBeQo, Token STS: CAISxAJ1q6Ft5B2yf5jIr5XneN+ChrwS1It+pcEXr0DkFNMReiaL/qTz2IHhMeXZoA+4YsPu2mmFW6/sdlqdJQpp/QkjJRNF20plM7VtBkQt5I
pbng4YfgbiJREKxaXeirukwDsz9SNTCA     JlhHL91N0vCGlgpPtpNIRZ4o8I3LGbYMe3XUiTmM3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkk7FO/trLT8L6P5U2DvBWsMyo2eF6TK3F3RNL5gJCnKUM1/QcpGif51/DXQEIvUIYbreL6L9mNxRkY6UgHkpJ
vCxxBmi0fUW5fe3VvPUtVVk900y3LAsg    3PjcmYvy1dKzlhvI856BxNHBq+A748VMgj01iX9IIPPtJO3TwsQdpz0agaAFJZJGZS4RxwNkWL934H/nip/ameLEvxylbsU0x8]AMGRtHmlzYuolmGovqyeKhpDOT+H0am7tG2LvzKHoyVN8Kuck/qb/JAX/
xV1mHcLp3iPma8q+9xboP81YeU06c0vy   bzA2n7QI37852WyAA
Hasil pemanggilan: 200
2025/5/29 10:43:25
ID AK: STS.NVR3xxx P8KrfgTK, Secret AK: 6hsZk211xxx
        PeZZ8NHSBeQo, Token STS: CAISxAJ1q6Ft5B2yf5jIr5XneN+ChrwS1It+pcEXr0DkFNMReiaL/qTz2IHhMeXZoA+4YsPu2mmFW6/sdlqdJQpp/QkjJRNF20plM7VtBkQt5I
pbng4YfgbiJREKxaXeirukwDsz9SNTCA     JlhHL91N0vCGlgpPtpNIRZ4o8I3LGbYMe3XUiTmM3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkk7FO/trLT8L6P5U2DvBWsMyo2eF6TK3F3RNL5gJCnKUM1/QcpGif51/DXQEIvUIYbreL6L9mNxRkY6UgHkpJ
vCxxBmi0fUW5fe3VvPUtVVk900y3LAsg    3PjcmYvy1dKzlhvI856BxNHBq+A748VMgj01iX9IIPPtJO3TwsQdpz0agaAFJZJGZS4RxwNkWL934H/nip/ameLEvxylbsU0x8]AMGRtHmlzYuolmGovqyeKhpDOT+H0am7tG2LvzKHoyVN8Kuck/qb/JAX/
xV1mHcLp3iPma8q+9xboP81YeU06c0vy   bzA2n7QI37852WyAA
Hasil pemanggilan: 200
2025/5/29 11:43:25
ID AK: STS.NWuFxxx BwvauFkU, Secret AK: 6fBbjmvd2T
        ChJTi9gPixZE, Token STS: CAISxAJ1q6Ft5B2yf5jIrSTAG/74uLB13aeARFwQlYXe/lNmoPAtzz2IHhMeXZoA+4YsPu2mmFW6/sdlqdJQpp/QkjJRNF20plM7VtdxAt7I
pbng4YfgbiJREKxaXeirukwDsz9SNTCA     iJlhHL91N0vCGlgpPtpNIRZ4o8I3LGbYMe3XUiTmM3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkk7FO/trLT8L6P5U2DvBWsMyo2eF6TK3F3RNL5gJCnKUM1/QcpGif51/DXQEIvUIYbreL6L9mNxRkY6UgHkpJ
vCxxBmi0fUW5fe3VvPUtVVk900y3LAtQ    JU1tKDlwTxgBGOFKIQQrKj9PMSqhAcLJtS6MDE7NJKbt10KxV8Qdpz0agaAE7zrIhzsIKFMhIAyquB0Z8/YXeYdmswQUMbqmr+0gX306/0U9iWS612r6AalQSomcAD0eijKFnE8PFyx3YifekzIBCjr17TR
ujPRXpMzvxuXfvzz9eszDB0o0AXX5gTQ    IKDI4Y7necJANrPiAA
Hasil pemanggilan: 200
2025/5/29 11:45:05
ID AK: STS.NWuPxxx bwvauFkU, Secret AK: 6fBbjmvd2T
        ChJTi9gPixZE, Token STS: CAISxAJ1q6Ft5B2yf5jIrSTAG/74uLB13aeARFwQlYXe/lNmoPAtzz2IHhMeXZoA+4YsPu2mmFW6/sdlqdJQpp/QkjJRNF20plM7VtdxAt7I
pbng4YfgbiJREKxaXeirukwDsz9SNTCA     iJlhHL91N0vCGlgpPtpNIRZ4o8I3LGbYMe3XUiTmM3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkk7FO/trLT8L6P5U2DvBWsMyo2eF6TK3F3RNL5gJCnKUM1/QcpGif51/DXQEIvUIYbreL6L9mNxRkY6UgHkpJ
vCxxBmi0fUW5fe3VvPUtVVk900y3LAtQ    U1U1tKDlwTxgBGOFKIQQrKj9PMSqhAcLJtS6MDE7NJKbt10KxV8Qdpz0agaAE7zrIhzsIKFMhIAyquB0Z8/YXeYdmswQUMbqmr+0gX306/0U9iWS612r6AalQSomcAD0eijKFnE8PFyx3YifekZIBCjr17TR
ujPRXpMzvxuXfvzz9eszDB0o0AXX5gTQ    IKDI4Y7necJANrPiAA
Hasil pemanggilan: 200
Semua tugas selesai.

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