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

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

最終更新日:Apr 10, 2026

Alibaba Cloud SDK for Java を使用して API オペレーションを呼び出すには、有効なアクセス認証情報を設定する必要があります。V1.0 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

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

  • 実行環境に環境変数 `ALIBABA_CLOUD_ACCESS_KEY_ID` と `ALIBABA_CLOUD_ACCESS_KEY_SECRET` が設定されていることを確認してください。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。

  • 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

セキュリティトークンサービス (STS) の AssumeRole オペレーションを呼び出して、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 リソースネーム (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>")
                // Confused Deputy 問題を防ぐための外部 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 ロール

セキュリティを強化し、デプロイを簡素化するために、Alibaba Cloud SDK はインスタンス RAM ロールから認証情報を取得できます。この方法を使用すると、Elastic Compute Service (ECS) または Elastic Container Instance (ECI) にデプロイされたアプリケーションは、静的な AccessKey を設定せずに Alibaba Cloud API を呼び出すことができます。ECS と ECI の両方のインスタンスが、インスタンス RAM ロールのアタッチをサポートしています。インスタンス上で SDK を使用すると、アタッチされた RAM ロールが自動的に検出され、メタデータサーバーから STS トークンを取得してクライアントが初期化されます。

インスタンスメタデータサーバーは、セキュリティ強化モードと通常モードの 2 つのアクセスモードをサポートしています。認証情報ツールは、デフォルトでセキュリティ強化モード (IMDSv2) を使用してアクセス認証情報を取得します。セキュリティ強化モードで例外が発生した場合、disableIMDSv1 を設定して、異なる例外処理ロジックを実行できます:

  1. 値が false (デフォルト) の場合、通常モードを使用してアクセス認証情報の取得を続行します。

  2. 値が true の場合、セキュリティ強化モードを使用せずにアクセス認証情報を取得しようとすると、例外がスローされます。

ご利用のサーバーが 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 ロールを割り当てた後、RAM Roles for Service Accounts (RRSA) 機能を使用して RAM ロールを Pod に関連付けることができます。これにより、各アプリケーションが異なる RAM ロールを引き受け、取得した一時的な認証情報を使用して Alibaba Cloud リソースにアクセスできます。このアプローチは、最小権限の原則を徹底し、長期的な AccessKey の必要性をなくすことで、認証情報漏洩のリスクを低減します。

ACK クラスターは、各 Pod のサービスアカウント OIDC トークンファイルを自動的に作成してマウントし、構成詳細を環境変数として挿入します。SDK はこれらの環境変数を読み取り、STS の AssumeRoleWithOIDC オペレーションを呼び出して、OIDC トークンを STS トークンと交換します。詳細については、「RAM Roles for Service Accounts (RRSA) を使用して Pod の権限を分離する」をご参照ください。

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("<REGION_ID>")
                .build();
        DefaultProfile profile = DefaultProfile.getProfile(
                // クライアントのリージョン ID を指定します。
                "<REGION_ID>");
        IAcsClient client = new DefaultAcsClient(profile, provider);
        // API 呼び出しのロジックは省略されています。
    }
}

方法 6:ベアラートークン

説明

この方法は、Cloud Call Center (CCC) でのみサポートされています。

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

public class BearerToken {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
        // BearerTokenCredentials を使用してアクセス認証情報を設定します。
        BearerTokenCredentials bearerTokenCredential = new BearerTokenCredentials("<BEARER_TOKEN>");
        DefaultAcsClient client = new DefaultAcsClient(profile, bearerTokenCredential);
        // API 呼び出しのロジックは省略されています。
    }
}

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

認証情報を明示的に指定せずにクライアントを初期化した場合、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 システムプロパティが定義されていて空でない場合、プログラムはそれらを使用してデフォルトの認証情報を作成します。

2. 環境変数

ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が定義されていて、空でない場合、プログラムはそれらを使用してデフォルトの認証情報を作成します。

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 オペレーションを呼び出して STS トークンを取得し、それをデフォルトの認証情報として使用します。

4. 設定ファイル

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

より高い優先度の認証情報が見つからない場合、SDK はインスタンス RAM ロールの名前を指定する ALIBABA_CLOUD_ECS_METADATA 環境変数をチェックします。この変数が設定されている場合、SDK は ECS メタデータサーバーから STS トークンを取得し、それをデフォルトの認証情報として使用します。

6. 認証情報 URI

より高い優先度の認証情報が見つからない場合、SDK は ALIBABA_CLOUD_CREDENTIALS_URI 環境変数をチェックします。この変数が設定されている場合、SDK は指定された URI にリクエストを送信して一時的なアクセス認証情報を取得し、それをデフォルトの認証情報として使用します。