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

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

最終更新日:Sep 10, 2026

Alibaba Cloud SDK for Java V1.0 で OpenAPI 操作を呼び出すには、有効なアクセス認証情報が必要です。SDK は、安全な開発のために複数の認証情報方式をサポートしています。

前提条件

aliyun-java-sdk-core パッケージのバージョンは 4.7.3 以降である必要があります。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.7.3</version>
</dependency>

方法 1:AccessKey

重要
  • DefaultProfile を使用して AccessKey を設定し、クライアントを初期化します。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.profile.DefaultProfile;
    
    public class Sample {
        public static void main(String[] args) {
            DefaultProfile profile = DefaultProfile.getProfile(
                    "<REGION_ID>",
                    // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // 環境変数から RAM ユーザーの AccessKey Secret を取得します。
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            IAcsClient client = new DefaultAcsClient(profile);
            // API 呼び出しロジックは省略します。
        }
    }
  • BasicCredentials を使用して AccessKey を設定し、クライアントを初期化します。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.auth.BasicCredentials;
    import com.aliyuncs.profile.DefaultProfile;
    
    public class Sample {
        public static void main(String[] args) {
            BasicCredentials basicCredentials = new BasicCredentials(
                    // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // 環境変数から RAM ユーザーの AccessKey Secret を取得します。
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
            );
            DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
            IAcsClient client = new DefaultAcsClient(profile, basicCredentials);
            // API 呼び出しロジックは省略します。
        }
    }

方法 2:STS トークン

一時的な認証情報 (STS トークン) を使用してクライアントを初期化します。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;

public class Test {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile(
                "<REGION_ID>",
                // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 環境変数から RAM ユーザーの AccessKey Secret を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // STS トークン。
                System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        IAcsClient client = new DefaultAcsClient(profile);
        // API 呼び出しロジックは省略します。
    }
}

方法 3:RAM ロール ARN

Security Token Service (STS) の AssumeRole API を呼び出して、STS トークンを取得します。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.STSAssumeRoleSessionCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;

public class Sample {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
        // RAM ロール ARN を使用します。
        STSAssumeRoleSessionCredentialsProvider stsProvider = STSAssumeRoleSessionCredentialsProvider
                .builder()
                // 必須。環境変数から RAM ユーザーの AccessKey ID を取得します。
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必須。環境変数から RAM ユーザーの AccessKey Secret を取得します。
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // RAM ロールの Alibaba Cloud Resource Name (ARN)。ALIBABA_CLOUD_ROLE_ARN 環境変数が設定されていない場合は必須です。
                .roleArn("<ROLE_ARN>")
                // カスタムのセッション名。任意。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数でも設定できます。
                .roleSessionName("<ROLE_SESSION_NAME>")
                // カスタムポリシー。任意。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .policy("<POLICY>")
                // 混乱した使節の問題を防ぐための外部 ID。任意。
                .externalId("<EXTERNAL_ID>")
                // アクセス認証情報の有効期間 (秒)。任意。デフォルトは 3600 で、43200 (12 時間) を超えることはできません。
                .durationSeconds(3600)
                // AssumeRole API 呼び出しのリージョン ID。任意。
                .stsRegionId("<STS_REGION_ID>") 
                .build();
        DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
        // API 呼び出しロジックは省略します。
    }
}

方法 4:インスタンス RAM ロール

SDK は、Elastic Compute Service (ECS) または Elastic Container Instance (ECI) インスタンスにアタッチされた インスタンス RAM ロール から認証情報を取得できるため、静的な AccessKey は不要です。SDK はアタッチされた RAM ロールを自動検出し、メタデータサーバーから STS トークンを取得します。

認証情報ツールは、デフォルトで IMDSv2 (セキュリティ強化モード) を使用します。IMDSv2 が失敗した場合、disableIMDSv1 設定がフォールバック動作を制御します。

  1. false (デフォルト): 通常モード (IMDSv1) にフォールバックして認証情報を取得します。

  2. true:IMDSv1 にフォールバックする代わりに、例外をスローします。

IMDSv2 のサポート状況は、インスタンスの設定によって異なります。

重要

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

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;

public class Sample {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
        // インスタンス RAM ロールを使用します。
        InstanceProfileCredentialsProvider provider = InstanceProfileCredentialsProvider
                .builder()
                // インスタンスにアタッチされている RAM ロールの名前。
                .roleName("<ROLE_NAME>")
                //.disableIMDSv1(false)
                .build();
        DefaultAcsClient client = new DefaultAcsClient(profile, provider);
        // API 呼び出しロジックは省略します。
    }
}

方法 5:OIDC RAM ロール

Container Service for Kubernetes (ACK) では、RAM Roles for Service Accounts (RRSA) 機能により、RAM ロールを個々のポッドに関連付けます。各アプリケーションは異なる RAM ロールを引き受け、一時的な認証情報を使用して Alibaba Cloud リソースにアクセスするため、長期的な AccessKey が不要です。

ACK は各ポッドに OIDC トークンファイルをマウントし、設定を環境変数として注入します。SDK は STS の AssumeRoleWithOIDC API を呼び出して、OIDC トークンを STS トークンに交換します。RRSA を使用してポッドの権限を分離する。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.OIDCCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;

public class Sample {
    public static void main(String[] args) {
        // OIDC ベースの RAM ロールを使用します。
        OIDCCredentialsProvider provider = OIDCCredentialsProvider
                .builder()
                // OIDC プロバイダーの ARN。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数が設定されていない場合は必須です。
                .oidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // OIDC トークンファイルのパス。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数が設定されていない場合は必須です。
                .oidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // RAM ロールの ARN。ALIBABA_CLOUD_ROLE_ARN 環境変数が設定されていない場合は必須です。
                .roleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // カスタムのセッション名。任意。
                .roleSessionName("<ROLE_SESSION_NAME>")
                // カスタムポリシー。任意。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .policy("<POLICY>")
                // アクセス認証情報の有効期間 (秒)。任意。デフォルトは 3600 で、43200 (12 時間) を超えることはできません。
                .durationSeconds(3600)
                // STS のリージョン ID。任意。
                .stsRegionId("<STS_REGION_ID>")
                .build();
        DefaultProfile profile = DefaultProfile.getProfile(
                // クライアントのリージョン ID を指定します。
                "<REGION_ID>");
        IAcsClient client = new DefaultAcsClient(profile, provider);
        // API 呼び出しロジックは省略します。
    }
}

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

認証情報が明示的に指定されていない場合、SDK はデフォルトの認証情報プロバイダーチェーンを使用します。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;

public class Test {
    public static void main(String[] args) throws ClientException {
        // デフォルトの認証情報プロバイダーチェーンを使用します。
        IAcsClient client = new DefaultAcsClient("<REGION_ID>");
        // API 呼び出しロジックは省略します。
    }
}

デフォルトの認証情報プロバイダーチェーンは、次の順序で利用可能な認証情報を検索します:

1. システムプロパティ

alibabacloud.accessKeyId および alibabacloud.accessKeyIdSecret システムプロパティが定義されていて空ではない場合、 SDK はそれらを使用してデフォルトの認証情報を作成します。

2. 環境変数

環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が定義されていて空でない場合、SDK はそれらをデフォルトの認証情報として使用します。

3. OIDC RAM ロール

SDK は次の環境変数を確認します:

ALIBABA_CLOUD_ROLE_ARN:RAM ロールの ARN。

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

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

3 つの環境変数がすべて設定されている場合、SDK は STS の AssumeRoleWithOIDC API を呼び出して STS トークンを取得し、そのトークンをデフォルトの認証情報として使用します。

4. 設定ファイル

認証情報が見つからない場合、プロバイダーチェーンはデフォルトの場所から共有認証情報ファイル config.json を読み込み、ファイルに指定されている認証情報を使用します。

  • Linux/macOS: ~/.aliyun/config.json

  • Windows: C:\Users\USER_NAME\.aliyun\config.json

この方法で資格情報を設定するには、Alibaba Cloud CLI を使用するか、適切なパスに config.json ファイルを手動で作成します。コンテンツ形式の例は次のとおりです。

{
  "current": "<PROFILE_NAME>",
  "profiles": [
    {
      "name": "<PROFILE_NAME>",
      "mode": "AK",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
    },
    {
      "name": "<PROFILE_NAME1>",
      "mode": "StsToken",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "sts_token": "<SECURITY_TOKEN>"
    },
    {
      "name":"<PROFILE_NAME2>",
      "mode":"RamRoleArn",
      "access_key_id":"<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret":"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME3>",
      "mode":"EcsRamRole",
      "ram_role_name":"<RAM_ROLE_ARN>"
    },
    {
      "name":"<PROFILE_NAME4>",
      "mode":"OIDC",
      "oidc_provider_arn":"<OIDC_PROVIDER_ARN>",
      "oidc_token_file":"<OIDC_TOKEN_FILE>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME5>",
      "mode":"ChainableRamRoleArn",
      "source_profile":"<PROFILE_NAME>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    }
  ]
}

パラメーター

説明

current

対応する認証情報設定を取得するには、認証情報名を指定します。 認証情報名は、profiles の name パラメーターの値です。 デフォルトでは、システムは ALIBABA_CLOUD_PROFILE 環境変数で指定された認証情報名を優先します。 この環境変数が設定されていない場合、システムは current で指定された認証情報名を使用します。

profiles

認証情報構成のコレクションが含まれます。mode パラメーターは認証情報の種類を指定します:

  • AK: RAM ユーザーの AccessKey を認証情報として使用します。

  • StsToken: STS トークンを認証情報として使用します。

  • RamRoleArn: RAM ユーザーの認証情報を使用して RAM ロールを引き受け、一時的な認証情報を取得します。

  • EcsRamRole: インスタンスメタデータから認証情報を取得します。

  • OIDC: OIDC プロバイダー ARN、OIDC トークン、および RAM ロール ARN を使用して認証情報を取得します。

  • ChainableRamRoleArn: source_profile パラメーターで指定された profiles の初期認証情報を使用して、ロールチェーンにより新しい認証情報を取得します。

5. ECS インスタンス RAM ロール

SDK は ALIBABA_CLOUD_ECS_METADATA 環境変数を確認します。この環境変数はインスタンス RAM ロール名を指定します。設定されている場合、SDK は ECS メタデータサーバーから STS トークンを取得します。

6. 認証情報 URI

SDK は ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を確認します。設定されている場合、SDK は指定された URI にリクエストして一時的な認証情報を取得します。