すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:アクセス認証情報の管理

最終更新日:Sep 11, 2026

Alibaba Cloud SDK for C# V1.0 は、複数の認証情報タイプをサポートしています。デプロイ環境とセキュリティ要件に合ったものを選択してください。

認証情報タイプの選択

認証情報タイプ

使用場面

AccessKey

開発およびテスト環境。本番環境での使用は避けてください。AccessKey が漏洩すると、アカウント内のすべてのリソースが危険にさらされます。

STS トークン

きめ細かな権限を持つ、有効期間の短いアクセス。通常、AssumeRole を介して取得されます。

RAM ロール ARN

クロスアカウントアクセス、または STS を介した RAM ユーザーへの権限委譲。

インスタンス RAM ロール

Elastic Compute Service (ECS) 上で実行されるアプリケーションで利用します。AccessKey は不要です。SDK はインスタンスメタデータサービスから認証情報を自動的に取得します。

OIDC を使用した RAM ロール

Container Service for Kubernetes (ACK) で実行されるアプリケーションで利用します。各 Pod は AccessKey なしで個別の RAM ロールを引き受けます。

デフォルトの認証情報プロバイダーチェーン

ローカルでの開発、または認証情報が外部 (環境変数、設定ファイル、インスタンスメタデータ) で管理される環境。

AccessKey の使用

重要
  • Alibaba Cloud アカウントの 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 ユーザーのアクセスキーシークレットを取得します。
                    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 ユーザーのアクセスキーシークレットを取得します。
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
                IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
                DefaultAcsClient client = new DefaultAcsClient(profile, provider);
                // API を呼び出すコードは省略されています。
            }
        }
    }
    

STS トークンの使用

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(
                // 環境変数から一時的な AccessKey ID を取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 環境変数から一時的なアクセスキーシークレットを取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // 環境変数からセキュリティトークンを取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_SECURITY_TOKEN"));
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            DefaultAcsClient client = new DefaultAcsClient(profile, provider);
            // API を呼び出すコードは省略されています。
        }
    }
}

RAM ロール ARN の使用

Resource Access Management (RAM) ユーザーとして STS の AssumeRole API を呼び出し、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 ユーザーのアクセスキーシークレットを取得します。
                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 は、ECS インスタンスにアタッチされたインスタンス RAM ロールから一時的な認証情報を取得します。アプリケーションは、ハードコードされた AccessKey なしで Alibaba Cloud API にアクセスします。SDK は、ロールに付与された権限を自動的に使用します。

重要

RAM ロールが ECS インスタンスにアタッチされていることを確認してください。

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 ロールの使用

ACK では、サービスアカウントの RAM ロール (RRSA) を使用すると、各 Pod が個別の RAM ロールを引き受け、一時的な認証情報でクラウドリソースにアクセスできます。これにより、最小権限が適用され、AccessKey が不要になるため、認証情報の漏洩を防ぐことができます。

ACK は、各 Pod のサービスアカウントの OpenID Connect (OIDC) トークンファイルを作成してマウントし、設定詳細を環境変数に挿入します。SDK はこれらの変数を読み取り、STS の AssumeRoleWithOIDC API を呼び出して、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 を呼び出すコードは省略されています。
        }
    }
}

デフォルトの認証情報プロバイダーチェーンの使用

DefaultCredentialsProvider は、次の順序で認証情報を検索し、最初に見つかったものを使用します:

優先度

ソース

認証情報タイプ

1

環境変数 (ALIBABA_CLOUD_ACCESS_KEY_ID + ALIBABA_CLOUD_ACCESS_KEY_SECRET)

AccessKey

2

環境変数 (ALIBABA_CLOUD_ROLE_ARN + ALIBABA_CLOUD_OIDC_PROVIDER_ARN + ALIBABA_CLOUD_OIDC_TOKEN_FILE)

OIDC RAM ロール

3

認証情報ファイル (~/.alibabacloud/credentials.ini)

サポートされている任意のタイプ

4

環境変数 ALIBABA_CLOUD_ECS_METADATA (インスタンス RAM ロール名)

インスタンス 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>");
            var alibabaCloudClientCredential = new DefaultCredentialsProvider();
            var client = new DefaultAcsClient(profile,alibabaCloudClientCredential);
            // API を呼び出すコードは省略されています。
        }
    }
}
重要

DefaultCredentialsProvider は、ローカルでの開発やテストには便利ですが、本番環境での使用は推奨されません。認証が失敗した場合、問題の認証情報ソースを特定するのが困難になる場合があります。本番環境では、ECS のインスタンス RAM ロールや ACK の OIDC RAM ロールなど、デプロイ環境に合った明示的な認証情報タイプを使用してください。

1. 環境認証情報

SDK は、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET をチェックします。両方が設定されており、空でない場合、それらを使用して認証情報が作成されます。

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 API を呼び出し、返された 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              # アクセスキーシークレット

[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 # カスタムセッション名

[client3]                            # 'client3' という名前のプロファイル
type = oidc_role_arn                 # 認証タイプ: oidc_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn                  # ロール ARN
oidc_provider_arn = oidc_provider_arn # OIDC プロバイダー ARN
oidc_token_file_path = /path/to/token # OIDC トークンファイルパス
role_session_name = role_session_name # カスタムセッション名

4. インスタンス RAM ロール

以前のソースから認証情報が見つからない場合、SDK は ALIBABA_CLOUD_ECS_METADATA 環境変数にインスタンス RAM ロールの名前が設定されているかを確認します。設定されている場合、SDK は ECS のメタデータサーバーから STS トークンを取得します。