Alibaba Cloud SDK untuk C# V1.0 mendukung berbagai jenis kredensial. Pilih jenis yang sesuai dengan lingkungan penerapan dan kebutuhan keamanan Anda.
Choose a credential type
Credential type | When to use |
AccessKey | Pengembangan dan pengujian. Hindari di lingkungan produksi — AccessKey yang terekspos membahayakan seluruh sumber daya dalam akun tersebut. |
STS token | Akses berdurasi pendek dengan izin detail halus. Biasanya diperoleh melalui AssumeRole. |
RAM role ARN | Akses lintas akun atau mendelegasikan izin ke RAM user melalui STS. |
Instance RAM role | Aplikasi yang berjalan di ECS. Tidak memerlukan AccessKey — SDK mengambil kredensial secara otomatis dari layanan instance metadata. |
RAM role with OIDC | Aplikasi yang berjalan di ACK (Kubernetes). Setiap pod mengasumsikan peran RAM yang berbeda tanpa AccessKey. |
Default credential provider chain | Pengembangan lokal atau lingkungan tempat kredensial dikelola secara eksternal (variabel lingkungan, file konfigurasi, atau instance metadata). |
Use an AccessKey
Kebocoran AccessKey dari Akun Alibaba Cloud Anda membahayakan seluruh sumber daya di dalamnya. Untuk keamanan yang lebih baik, kami sangat menyarankan menggunakan AccessKey milik Pengguna RAM. Untuk informasi selengkapnya, lihat Create an AccessKey.
Pastikan variabel lingkungan
ALIBABA_CLOUD_ACCESS_KEY_IDdanALIBABA_CLOUD_ACCESS_KEY_SECRETtelah disetel di lingkungan runtime Anda. Untuk informasi selengkapnya, lihat Configure environment variables in Linux, macOS, and Windows.
Inisialisasi klien dengan AccessKey menggunakan
IClientProfile.using Aliyun.Acs.Core; using Aliyun.Acs.Core.Profile; namespace AlibabaCloud.SDK.Sample { public class Sample { public static void Main(string[] args) { IClientProfile profile = DefaultProfile.GetProfile( // The region ID. "<REGION_ID>", // Retrieve the AccessKey ID of the RAM user from an environment variable. Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), // Retrieve the AccessKey secret of the RAM user from an environment variable. Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); DefaultAcsClient client = new DefaultAcsClient(profile); // Code for calling API operations is omitted. } } }Inisialisasi klien dengan AccessKey menggunakan
AlibabaCloudCredentialsProvider.using Aliyun.Acs.Core; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Core.Auth; namespace AlibabaCloud.SDK.Sample { public class Sample { public static void Main(string[] args) { AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider( // Retrieve the AccessKey ID of the RAM user from an environment variable. Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), // Retrieve the AccessKey secret of the RAM user from an environment variable. Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>"); DefaultAcsClient client = new DefaultAcsClient(profile, provider); // Code for calling API operations is omitted. } } }
Use an STS token
Inisialisasi klien dengan kredensial akses sementara yang diperoleh melalui Security Token Service (STS).
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
AlibabaCloudCredentialsProvider provider = new StsCredentialProvider(
// Retrieve the AccessKey ID of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Retrieve the AccessKey secret of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
// Retrieve the security token of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_SECURITY_TOKEN"));
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// Code for calling API operations is omitted.
}
}
}
Use a RAM role ARN
Dapatkan token STS dengan memanggil operasi STS AssumeRole sebagai Pengguna Resource Access Management (RAM).
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider(
// Retrieve the AccessKey ID of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Retrieve the AccessKey secret of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Use the RAM role ARN.
STSAssumeRoleSessionCredentialsProvider stsProvider = new STSAssumeRoleSessionCredentialsProvider(
provider,
"<ROLE_ARN>",
profile
);
DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
// Code for calling API operations is omitted.
}
}
}
Use an instance RAM role
SDK mengambil kredensial sementara dari instance RAM role yang ditautkan ke Instance Elastic Compute Service (ECS) Anda. Aplikasi mengakses API Alibaba Cloud tanpa AccessKey yang dikodekan secara langsung—SDK secara otomatis menggunakan izin yang diberikan kepada peran tersebut.
Pastikan peran RAM telah ditautkan ke Instance ECS Anda.
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Auth;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
// Use an instance RAM role.
InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider(
"<ROLE_NAME>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// Code for calling API operations is omitted.
}
}
}
Use a RAM role with OIDC
Di Container Service for Kubernetes (ACK), RAM Roles for Service Accounts (RRSA) memungkinkan setiap pod mengasumsikan peran RAM yang berbeda dan mengakses sumber daya cloud dengan kredensial sementara. Pendekatan ini menerapkan prinsip hak istimewa minimal serta menghilangkan penggunaan AccessKey, sehingga mencegah kebocoran kredensial.
ACK membuat dan memasang file token OpenID Connect (OIDC) akun layanan untuk setiap pod serta menyuntikkan detail konfigurasi ke dalam variabel lingkungan. SDK membaca variabel-variabel tersebut dan memanggil operasi STS AssumeRoleWithOIDC untuk menukar token OIDC dengan token STS sementara. Untuk informasi selengkapnya, lihat Isolate pod permissions by using RAM Roles for Service Accounts (RRSA).
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
AlibabaCloudCredentialsProvider provider = new OIDCCredentialsProvider(
// The ARN of the RAM role.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN"),
// The ARN of the OIDC provider.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"),
// The file path of the OIDC token.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE"),
// A custom role session name.
"<ROLE_SESSION_NAME>",
// The region ID for the STS service.
"<REGION_ID>");
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// Code for calling API operations is omitted.
}
}
}
Use the default credential provider chain
DefaultCredentialProvider mencari kredensial dalam urutan berikut dan menggunakan yang pertama kali ditemukan:
Priority | Source | Credential type |
1 | Variabel lingkungan ( | AccessKey |
2 | Variabel lingkungan ( | OIDC RAM role |
3 | File kredensial ( | Any supported type |
4 | Variabel lingkungan | Instance RAM role |
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth.Provider;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
var alibabaCloudClientCredential = new DefaultCredentialProvider();
var client = new DefaultAcsClient(profile,alibabaCloudClientCredential);
// Code for calling API operations is omitted.
}
}
}DefaultCredentialProvider praktis untuk pengembangan dan pengujian lokal, tetapi tidak direkomendasikan untuk produksi. Saat autentikasi gagal, mengidentifikasi sumber kredensial yang bermasalah bisa sulit. Di lingkungan produksi, gunakan jenis kredensial eksplisit yang sesuai dengan lingkungan penerapan Anda—seperti instance RAM role untuk ECS atau OIDC RAM role untuk ACK.
1. Environment credentials
SDK memeriksa keberadaan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Jika keduanya disetel dan tidak kosong, kredensial akan dibuat berdasarkan nilai tersebut.
2. OIDC RAM role
Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, SDK membaca variabel lingkungan berikut:
Variable | Description |
| The ARN of the RAM role. |
| The ARN of the OIDC provider. |
| The file path of the OIDC token. |
Jika ketiganya disetel, SDK memanggil operasi AssumeRoleWithOIDC dan menggunakan token STS yang dikembalikan.
3. Configuration file
Jika file tersedia di lokasi ~/.alibabacloud/credentials.ini (atau C:\Users\USER_NAME\.alibabacloud\credentials.ini di Windows), SDK membaca kredensial dari file tersebut. Ganti lokasi default dengan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_FILE. Tentukan profil dengan ALIBABA_CLOUD_PROFILE; jika tidak disetel, SDK menggunakan profil default.
File ini mendukung semua jenis kredensial:
[default] # Default profile
type = access_key # Authentication type: access_key
access_key_id = foo # Your AccessKey ID
access_key_secret = bar # Your AccessKey Secret
[client1] # Profile named 'client1'
type = ecs_ram_role # Authentication type: ecs_ram_role
role_name = EcsRamRoleTest # The role name
[client2] # Profile named 'client2'
type = ram_role_arn # Authentication type: ram_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn # The role ARN
role_session_name = role_session_name # A custom session name
[client3] # Profile named 'client3'
type = oidc_role_arn # Authentication type: oidc_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn # The role ARN
oidc_provider_arn = oidc_provider_arn # The OIDC provider ARN
oidc_token_file_path = /path/to/token # The OIDC token file path
role_session_name = role_session_name # A custom session name4. Instance RAM role
Jika tidak ditemukan kredensial melalui sumber-sumber sebelumnya, SDK memeriksa variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk nama instance RAM role. Jika disetel, SDK mengambil token STS dari server metadata ECS.