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

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

最終更新日:Apr 11, 2026

Alibaba Cloud SDK for C# V1.0 を使用して OpenAPI オペレーションを呼び出す際には、アクセス認証情報を正しく設定する必要があります。このトピックでは、安全で効果的な開発を確実にするための、さまざまな認証情報の設定方法について説明します。

AccessKey の使用

重要
  • Alibaba Cloud アカウント (root ユーザー) の AccessKey が漏洩すると、そのアカウント内のすべてのリソースが危険にさらされます。セキュリティを向上させるため、RAM ユーザーの AccessKey を使用することを強く推奨します。詳細については、「AccessKey の作成」をご参照ください。

  • 実行環境に環境変数 ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_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 トークンを取得し、それをデフォルトの認証情報として使用します。