Alibaba Cloud SDK for C# V1.0 を使用して OpenAPI オペレーションを呼び出す際には、アクセス認証情報を正しく設定する必要があります。このトピックでは、安全で効果的な開発を確実にするための、さまざまな認証情報の設定方法について説明します。
AccessKey の使用
Alibaba Cloud アカウント (root ユーザー) の AccessKey が漏洩すると、そのアカウント内のすべてのリソースが危険にさらされます。セキュリティを向上させるため、RAM ユーザーの AccessKey を使用することを強く推奨します。詳細については、「AccessKey の作成」をご参照ください。
実行環境に環境変数
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRETが設定されていることを確認してください。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
IClientProfileを使用して AccessKey でクライアントを初期化します。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( // リージョン ID。 "<REGION_ID>", // 環境変数から RAM ユーザーの AccessKey ID を取得します。 Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 環境変数から RAM ユーザーの AccessKey Secret を取得します。 Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); DefaultAcsClient client = new DefaultAcsClient(profile); // API オペレーションを呼び出すコードは省略されています。 } } }AlibabaCloudCredentialsProviderを使用して AccessKey でクライアントを初期化します。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( // 環境変数から RAM ユーザーの AccessKey ID を取得します。 Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 環境変数から RAM ユーザーの AccessKey Secret を取得します。 Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>"); DefaultAcsClient client = new DefaultAcsClient(profile, provider); // API オペレーションを呼び出すコードは省略されています。 } } }
STS トークンの使用
一時的なアクセス認証情報 (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(
// 環境変数から RAM ユーザーの AccessKey ID を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 環境変数から RAM ユーザーの AccessKey Secret を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
// 環境変数から RAM ユーザーのセキュリティトークンを取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_SECURITY_TOKEN"));
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// API オペレーションを呼び出すコードは省略されています。
}
}
}
RAM ロール ARN の使用
RAM ユーザーとして STS の AssumeRole オペレーションを呼び出すことで、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)
{
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider(
// 環境変数から RAM ユーザーの AccessKey ID を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 環境変数から RAM ユーザーの AccessKey Secret を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// RAM ロール ARN を使用します。
STSAssumeRoleSessionCredentialsProvider stsProvider = new STSAssumeRoleSessionCredentialsProvider(
provider,
"<ROLE_ARN>",
profile
);
DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
// API オペレーションを呼び出すコードは省略されています。
}
}
}
インスタンス RAM ロールの使用
セキュリティを強化し、デプロイメントを簡素化するために、SDK はインスタンス RAM ロールから一時的な認証情報を取得できます。この方法により、ECS インスタンス上のアプリケーションは AccessKey を設定することなく Alibaba Cloud API にアクセスできます。SDK は、アタッチされたインスタンス RAM ロールに付与された権限を自動的に取得します。
ECS インスタンスに RAM ロールがアタッチされていることを確認してください。
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>");
// インスタンス RAM ロールを使用します。
InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider(
"<ROLE_NAME>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// API オペレーションを呼び出すコードは省略されています。
}
}
}
OIDC を使用した RAM ロールの利用
Container Service for Kubernetes (ACK) では、RAM Roles for Service Accounts (RRSA) を使用して、Pod に RAM ロールを割り当てることができます。この機能により、各アプリケーションは異なる RAM ロールを引き受け、一時的な認証情報を使用してクラウドリソースにアクセスできます。これにより、最小権限の原則が徹底され、AccessKey が不要になるため、認証情報の漏洩を防ぐことができます。
ACK は、各 Pod のためにサービスアカウントの OIDC トークンファイルを作成してマウントし、設定詳細を環境変数に注入します。SDK はこれらの環境変数を読み取り、STS の AssumeRoleWithOIDC オペレーションを呼び出して、OIDC トークンを一時的な STS トークンと交換します。詳細については、「RAM Roles for Service Accounts (RRSA) を使用して Pod の権限を分離する」をご参照ください。
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(
// RAM ロールの ARN。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN"),
// OIDC プロバイダーの ARN。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"),
// OIDC トークンのファイルパス。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE"),
// カスタムのロールセッション名。
"<ROLE_SESSION_NAME>",
// STS サービスのリージョン ID。
"<REGION_ID>");
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// API オペレーションを呼び出すコードは省略されています。
}
}
}
ベアラートークンの使用
この方法は Cloud Call Center (CCC) のみでサポートされています。
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 BearerTokenCredentialProvider("<BEARER_TOKEN>");
IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// API オペレーションを呼び出すコードは省略されています。
}
}
}
デフォルトの認証情報プロバイダーチェーンの使用
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);
// API オペレーションを呼び出すコードは省略されています。
}
}
}デフォルトの認証情報プロバイダーチェーンは、以下の順序で利用可能な認証情報を検索して使用します。
1. 環境認証情報
SDKは、まず環境認証情報を検索します。 ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が定義されており、空ではない場合、SDKはそれらを使用してデフォルトの認証情報を作成します。
2. OIDC RAM ロール
より優先度の高い認証情報が利用できない場合、SDK は環境変数から以下の値を読み取ります。
ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC プロバイダーの ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンのファイルパス。
これら 3 つの環境変数がすべて設定されている場合、SDK はそれらの値を使用して AssumeRoleWithOIDC オペレーションを呼び出し、返された STS トークンをデフォルトの認証情報として使用します。
3. 設定ファイル
デフォルトファイルが ~/.alibabacloud/credentials.ini (Windows の場合は C:\Users\USER_NAME\.alibabacloud\credentials.ini) に存在する場合、SDK はそのファイルの内容から自動的に認証情報を作成します。ALIBABA_CLOUD_CREDENTIALS_FILE 環境変数を設定することで、デフォルトのファイルパスをオーバーライドできます。また、ALIBABA_CLOUD_PROFILE 環境変数を設定することで、使用するプロファイルを指定することもできます。この変数が設定されていない場合、SDK は default プロファイルを使用します。
[default] # デフォルトプロファイル
type = access_key # 認証タイプ:access_key
access_key_id = foo # ご利用の AccessKey ID
access_key_secret = bar # ご利用の AccessKey Secret
[client1] # 'client1' という名前のプロファイル
type = ecs_ram_role # 認証タイプ:ecs_ram_role
role_name = EcsRamRoleTest # ロール名
[client2] # 'client2' という名前のプロファイル
type = ram_role_arn # 認証タイプ:ram_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn # ロール ARN
role_session_name = role_session_name # カスタムセッション名4. インスタンス RAM ロール
前の方法で認証情報が見つからない場合、SDK はインスタンス RAM ロール名を指定する環境変数 ALIBABA_CLOUD_ECS_METADATA をチェックします。この変数が設定されている場合、SDK は ECS メタデータサーバーから STS トークンを取得し、それをデフォルトの認証情報として使用します。