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

Alibaba Cloud SDK:アクセス資格情報を管理する

最終更新日:Jan 15, 2025

Alibaba Cloud SDK を使用して API オペレーションを呼び出してクラウド リソースを管理する場合、有効な資格情報を構成する必要があります。このトピックでは、C# 用 Alibaba Cloud SDK V1.0 のアクセス資格情報を構成する方法について説明します。アクセス資格情報は、開発に SDK を使用する場合のアクセス セキュリティを確保します。

AccessKey ペアを使用する

重要
  • Alibaba Cloud アカウントの AccessKey ペアが漏洩した場合、そのアカウントに属するリソースは潜在的なリスクにさらされます。アカウントのセキュリティを確保するために、Resource Access Management (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 シークレットを取得します。
                    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 シークレットを取得します。
                    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(
                // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 環境変数から RAM ユーザーの AccessKey シークレットを取得します。
                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 オペレーションを呼び出す手順は省略されています。
        }
    }
}

RamRoleArn を使用する

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 シークレットを取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // クライアントの初期化に RamRoleArn を使用します。
            STSAssumeRoleSessionCredentialsProvider stsProvider = new STSAssumeRoleSessionCredentialsProvider(
                provider,
                "<ROLE_ARN>",
                profile
                );

            DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
            // API オペレーションを呼び出す手順は省略されています。
        }
    }
}

EcsRamRole を使用する

アプリケーションを安全かつ便利にデプロイするために、SDK では、Elastic Compute Service (ECS) インスタンスにアタッチされた RAM ロールを使用して一時的な認証トークンを取得できます。このトークンを使用して、ECS インスタンスにアタッチされた RAM ロールで使用可能なリソースとサービスにアクセスできます。詳細については、「API オペレーションを呼び出してインスタンス RAM ロールを使用する」トピックの「手順 5: (オプション) 一時的な認証トークンを取得する」セクションをご参照ください。このようにして、ECS インスタンスにデプロイされたアプリケーションは、AccessKey ペアを使用せずに API オペレーションを呼び出すことができます。SDK でこのタイプの資格情報を構成すると、SDK には ECS インスタンスにアタッチされた RAM ロールの権限が付与されます。

重要

使用する RAM ロールが、SDK がインストールされている 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>");
            // クライアントの初期化に EcsRamRole を使用します。
            InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider(
                "<ROLE_NAME>");
            DefaultAcsClient client = new DefaultAcsClient(profile, provider);
            // API オペレーションを呼び出す手順は省略されています。
        }
    }
}

OIDCRoleArn を使用する

Container Service for Kubernetes (ACK) クラスタのワーカー ノードに RAM ロールを割り当てた後、RAM Roles for Service Accounts (RRSA) 機能を使用して、ACK クラスタ内のさまざまなアプリケーションがさまざまな RAM ロールを引き受けることを許可できます。アプリケーションは特定の RAM ロールを引き受け、STS トークンを取得し、そのトークンを使用してクラウド サービスにアクセスできます。これにより、最小限の権限の原則が適用され、アプリケーションは AccessKey ペアを使用せずに API オペレーションを呼び出すことができるため、AccessKey ペアの漏洩を防ぎます。

ACK はサービス アカウント OpenID Connect (OIDC) トークン ファイルを作成し、そのトークン ファイルをポッドに関連付け、関連する環境変数をポッドに挿入します。SDK は環境変数を使用し、STS の AssumeRoleWithOIDC オペレーションを呼び出して、RAM ロールの STS トークンを取得します。詳細については、「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(
                // RAM ロールの Alibaba Cloud Resource Name (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 (alibabacloud.com では利用できません) のみ、SDK でベアラートークンをアクセス資格情報として構成できます。

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. 環境変数

資格情報プロバイダー チェーンは、環境変数から資格情報を検索します。ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が定義されており、環境変数に null 以外の値が指定されている場合、資格情報プロバイダー チェーンは環境変数の値を使用してデフォルトの資格情報を作成します。

2. OIDC プロバイダーの RAM ロール

前の手順で資格情報が見つからない場合、Credentials ツールは次の環境変数の値を取得します。

ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC プロバイダーの ARN。

ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークン ファイルのパス。

上記の 3 つの環境変数が指定されている場合、Credentials ツールは環境変数を使用して STS の AssumeRoleWithOIDC オペレーションを呼び出し、デフォルトの資格情報として STS トークンを取得します。

3. 構成ファイル

デフォルトの資格情報ファイルがユーザーのホーム ディレクトリに保存されている場合、資格情報プロバイダー チェーンは、指定されたタイプと名前に基づいて資格情報を自動的に作成します。デフォルトの資格情報ファイルのパスは、~/.alibabacloud/credentials.ini です。Windows では、パスは C:\Users\USER_NAME\.alibabacloud\credentials.ini です。ALIBABA_CLOUD_CREDENTIALS_FILE 環境変数を使用して、デフォルトの資格情報ファイルのパスを変更できます。また、ALIBABA_CLOUD_PROFILE 環境変数を構成してプロファイルを指定することもできます。ALIBABA_CLOUD_PROFILE 環境変数の値を指定しない場合は、default プロファイルが使用されます。

[default]                            # デフォルトのプロファイル。
type = access_key                    # 認証に AccessKey ペアを使用します。
access_key_id = foo                  # AccessKey ID。
access_key_secret = bar              # AccessKey シークレット。

[client1]                            # `client1` という名前のプロファイル。
type = ecs_ram_role                  # 認証に EcsRamRole 資格情報を使用します。
role_name = EcsRamRoleTest           # RAM ロールの名前。

[client2]                            # `client2` という名前のプロファイル。
type = ram_role_arn                  # 認証に RamRoleArn 資格情報を使用します。
access_key_id = foo
access_key_secret = bar
role_arn = role_arn                  # RAM ロールの ARN。
role_session_name = role_session_name # カスタム セッション名。

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

前の手順で資格情報が見つからない場合、Credentials ツールは、ECS インスタンスの RAM ロール名を指定する ALIBABA_CLOUD_ECS_METADATA 環境変数の値を取得します。RAM ロールが存在する場合、アプリケーションは ECS のメタデータ サーバーを使用して、RAM ロールの STS トークンをデフォルトの資格情報として取得します。