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
Alibaba Cloud アカウントの AccessKey が漏洩すると、そのアカウント配下のすべてのリソースが侵害されます。代わりに 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
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 設定がフォールバック動作を制御します。
false(デフォルト): 通常モード (IMDSv1) にフォールバックして認証情報を取得します。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 |
認証情報構成のコレクションが含まれます。
|
5. ECS インスタンス RAM ロール
SDK は ALIBABA_CLOUD_ECS_METADATA 環境変数を確認します。この環境変数はインスタンス RAM ロール名を指定します。設定されている場合、SDK は ECS メタデータサーバーから STS トークンを取得します。
6. 認証情報 URI
SDK は ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を確認します。設定されている場合、SDK は指定された URI にリクエストして一時的な認証情報を取得します。