Alibaba Cloud SDK を使用して API オペレーションを呼び出してクラウドリソースを管理する場合、有効なクレデンシャル情報を設定する必要があります。Alibaba Cloud の Credentials ツールは、使いやすい機能セットを提供し、デフォルトクレデンシャル、AccessKey ペア、セキュリティトークンサービス (STS) トークンなど、さまざまな種類のクレデンシャルをサポートしています。Credentials ツールは、クレデンシャルの取得と管理に役立ちます。このトピックでは、Credentials ツールがデフォルトクレデンシャルを取得する順序について説明します。Alibaba Cloud SDK でのクレデンシャルの設定と管理について、十分な知識を習得できます。これにより、クラウド リソースに対する操作を効率的かつ安全な方法で実行できます。
背景情報
クレデンシャルとは、ユーザーの身元を証明するために使用される一連の情報です。システムにログオンするときは、有効なクレデンシャルを使用して身分認証を完了する必要があります。一般的に使用されるクレデンシャルの種類は次のとおりです。
Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ペア。AccessKey ペアは永続的に有効で、AccessKey ID と AccessKey シークレットで構成されます。
RAM ロールの STS トークン。STS トークンは一時的なクレデンシャルです。STS トークンの有効期間とアクセス許可を指定できます。詳細については、「STS とは」をご参照ください。
ベアラトークン。ID 認証と承認に使用されます。
前提条件
Java 8 以降がインストールされている。
Alibaba Cloud SDK V2.0 がインストールされている。詳細については、「IDE で Alibaba Cloud SDK for Java を使用する」をご参照ください。
Credentials ツールのインストール
次の Maven 依存関係を追加して、Alibaba Cloud Credentials for Java をインストールします。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>credentials-java</artifactId>
<version>{VERSION}</version>
</dependency>
Alibaba Cloud Credentials for Java のすべてのリリースバージョンについては、「ChangeLog.txt」をご参照ください。
Alibaba Cloud Credentials for Java の最新バージョンを使用することをお勧めします。これにより、すべてのクレデンシャルがサポートされます。
Alibaba Cloud SDK V2.0 を使用することをお勧めします。Alibaba Cloud SDK V2.0 を使用せずに credentials-java モジュールに依存している場合は、次の依存関係を追加する必要があります。追加しないと、com.aliyun.tea.TeaModel クラスファイルが存在しないことを示すエラーが報告されます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>tea</artifactId> <version>{VERSION}</version> </dependency>
説明tea パッケージのバージョンについては、「tea-java」をご参照ください。
Credentials クライアントの初期化
ビジネス要件に基づいて、次のいずれかの方法を使用して Credentials クライアントを初期化できます。
プロジェクトでプレーンテキストの AccessKey ペアを使用する場合、コードリポジトリの権限管理が不適切なために AccessKey ペアが漏洩する可能性があります。これは、AccessKey ペアが属するアカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 AccessKey ペアは環境変数または構成ファイルに保存することをお勧めします。
Credentials クライアントはシングルインスタンスモードで構築することをお勧めします。このモードでは、SDK のクレデンシャルキャッシュ機能が有効になるだけでなく、複数の API 呼び出しによって発生するトラフィック制御の問題とパフォーマンスリソースの浪費を効果的に防ぐことができます。
方法 1:デフォルトのクレデンシャルプロバイダーチェーンを使用する
Credentials クライアントを初期化する方法を指定しない場合、デフォルトのクレデンシャルプロバイダーチェーンが使用されます。詳細については、「デフォルトのクレデンシャルプロバイダーチェーン」をご参照ください。
import com.aliyun.credentials.Client;
public class DemoTest {
public static void main(String[] args) throws Exception{
// Credentials クライアントを初期化する方法を指定しません。
Client credentialClient = new Client();
// new Client() に値は指定されていません。
}
}
例
方法 2:AccessKey ペアを使用する
Alibaba Cloud アカウントまたは RAM ユーザーの API オペレーションを呼び出すために使用される AccessKey ペアを作成できます。詳細については、「AccessKey ペアの作成」をご参照ください。その後、AccessKey ペアを使用して Credentials クライアントを初期化できます。
Alibaba Cloud アカウントは、アカウント内のリソースに対するすべての権限を持っています。Alibaba Cloud アカウントの AccessKey ペアの漏洩は、システムに重大な脅威をもたらします。
したがって、最小権限の原則 (PoLP) に基づいて権限が付与された RAM ユーザーの AccessKey ペアを使用して、Credentials クライアントを初期化することをお勧めします。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception{
Config credentialConfig = new Config();
credentialConfig.setType("access_key");
credentialConfig.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
credentialConfig.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 3:STS トークンを使用する
RAM ユーザーとして STS の AssumeRole オペレーションを呼び出して、STS トークンを取得できます。STS トークンの最大有効期間を指定できます。次の例は、STS トークンを使用して Credentials クライアントを初期化する方法を示しています。この例では、STS トークンを取得する方法は示していません。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) {
Config credentialConfig = new Config();
credentialConfig.setType("sts");
// 環境変数から AccessKey ID を取得します。
credentialConfig.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// 環境変数から AccessKey シークレットを取得します。
credentialConfig.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 環境変数から一時的な STS トークンを取得します。
credentialConfig.setSecurityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 4:AccessKey ペアと RAM ロールを使用する
この方法の基本的なロジックは、STS トークンを使用して Credentials クライアントを初期化することです。RAM ロールの ARN を指定すると、Credentials ツールは STS から STS トークンを取得できます。setPolicy
メソッドを使用して、RAM ロールの権限を制限することもできます。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config credentialConfig = new Config();
credentialConfig.setType("ram_role_arn");
credentialConfig.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
credentialConfig.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// アプリケーションにアシュームさせたい RAM ロールの ARN を、ALIBABA_CLOUD_ROLE_ARN 環境変数を指定することで指定します。例: acs:ram::123456789012****:role/adminrole。
credentialConfig.setRoleArn("<RoleArn>");
// ロールセッション名を指定します。ロールセッション名は、ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数として設定できます。
credentialConfig.setRoleSessionName("<RoleSessionName>");
// オプション。RAM ロールの制限付き権限を指定します。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}。
credentialConfig.setPolicy("<Policy>");
// 必須ではありません。RAM ロールの外部 ID
// このパラメーターは外部の当事者によって提供され、なりすまし副官問題を防ぐために使用されます。
credentialConfig.setExternalId("<ExternalId>");
credentialConfig.setRoleSessionExpiration(3600);
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 5:ECS インスタンスの RAM ロールを使用する
ECS インスタンスとエラスティックコンテナインスタンスには、RAM ロールを割り当てることができます。インスタンス上で実行されるプログラムは、Credentials ツールを使用して RAM ロールの STS トークンを自動的に取得できます。STS トークンを使用して、Credentials クライアントを初期化できます。
デフォルトでは、Credentials ツールはセキュリティ強化モード (IMDSv2) で ECS のメタデータサーバーにアクセスします。例外がスローされた場合、Credentials ツールは通常モード (IMDSv1) に切り替わります。disableIMDSv1
パラメーターまたは ALIBABA_CLOUD_IMDSV1_DISABLE 環境変数を設定して、例外処理ロジックを指定することもできます。有効な値:
false (デフォルト): Credentials ツールは、通常モード (IMDSv1) でアクセスクレデンシャルの取得を続けます。
true: 例外がスローされ、Credentials ツールはセキュリティ強化モード (IMDSv2) でアクセスクレデンシャルの取得を続けます。
メタデータサーバーの構成によって、サーバーがセキュリティ強化モード (IMDSv2) をサポートするかどうかが決まります。
さらに、ALIBABA_CLOUD_ECS_METADATA_DISABLED=true を指定して、Credentials ツールから ECS のメタデータサーバーへのアクセスを無効にすることができます。
ECS インスタンスメタデータの詳細については、「インスタンスメタデータの取得」をご参照ください。
ECS インスタンスに RAM ロールをアタッチする方法の詳細については、「インスタンス RAM ロール」トピックの「インスタンス RAM ロールの作成と ECS インスタンスへのアタッチ」セクションをご参照ください。エラスティックコンテナインスタンスに RAM ロールをアタッチする方法の詳細については、「API オペレーションを呼び出してインスタンス RAM ロールを使用する」トピックの「エラスティックコンテナインスタンスにインスタンス RAM ロールを割り当てる」セクションをご参照ください。
セキュリティ強化モード (IMDSv2) で STS トークンを取得する場合は、credentials-java のバージョンが 0.3.10 以降であることを確認してください。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config credentialConfig = new Config();
credentialConfig.setType("ecs_ram_role");
// オプション。ECS インスタンスの RAM ロールの名前を指定します。このパラメーターを指定しない場合、その値は自動的に取得されます。リクエスト数を減らすために、このパラメーターを指定することをお勧めします。値は、ALIBABA_CLOUD_ECS_METADATA 環境変数から取得できます。
credentialConfig.setRoleName("<RoleName>");
// true の値は、セキュリティ強化モード (IMDSv2) が強制的に使用されることを指定します。デフォルト値は false で、システムが最初にセキュリティ強化モード (IMDSv2) でアクセスクレデンシャルの取得を試みることを指定します。アクセスクレデンシャルの取得に失敗した場合、通常モード (IMDSv1) が使用されます。
// credentialConfig.setDisableIMDSv1(true);
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 6:OIDC IdP の RAM ロールを使用する
Container Service for Kubernetes のワーカーノードに RAM ロールをアタッチした後、ワーカーノード上のポッド内のアプリケーションは、ECS インスタンス上のアプリケーションと同じ方法でメタデータサーバーを使用して STS トークンを取得できます。ただし、信頼されていないアプリケーション(顧客が送信したアプリケーションや、コードが利用できないアプリケーションなど)がワーカーノードにデプロイされている場合、アプリケーションがメタデータサーバーを使用してワーカーノードにアタッチされている RAM ロールの STS トークンを取得することを望まない場合があります。クラウドリソースのセキュリティを確保し、信頼されていないアプリケーションが必要な STS トークンを安全に取得できるようにするには、RAM Roles for Service Accounts (RRSA) 機能を使用して、PoLP に基づいてアプリケーションに権限を付与できます。この場合、ACK クラスタはサービスアカウント OpenID Connect (OIDC) トークンファイルを作成し、トークンファイルをポッドに関連付けて、関連する環境変数をポッドに挿入します。その後、Credentials ツールは環境変数を使用して STS の AssumeRoleWithOIDC オペレーションを呼び出し、RAM ロールの STS トークンを取得します。RRSA 機能の詳細については、「RRSA を使用して異なるポッドに異なるクラウドサービスへのアクセスを承認する」をご参照ください。
次の環境変数がポッドに挿入されます。
ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC ID プロバイダー (IdP) の ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンファイルのパス。
credentials-java のバージョンが 0.2.10 以降であることを確認してください。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config credentialConfig = new Config();
credentialConfig.setType("oidc_role_arn");
// アシュームされる RAM ロールの ARN を指定します。値は、ALIBABA_CLOUD_ROLE_ARN 環境変数から取得できます。
credentialConfig.setRoleArn("<RoleArn>");
// ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を指定することで、OIDC IdP の ARN を指定します。
credentialConfig.setOidcProviderArn("<OidcProviderArn>");
// ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を指定することで、OIDC トークンファイルのパスを指定します。
credentialConfig.setOidcTokenFilePath("<OidcTokenFilePath>");
// ロールセッション名を指定します。ロールセッション名は、ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数として設定できます。
credentialConfig.setRoleSessionName("<RoleSessionName>");
// オプション。RAM ロールの制限付き権限を指定します。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}。
credentialConfig.setPolicy("<Policy>");
// セッションの有効期間を指定します。
credentialConfig.setRoleSessionExpiration(3600);
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 7:クレデンシャル URI を使用する
この方法の基本的なロジックは、STS トークンを使用して Credentials クライアントを初期化することです。Credentials ツールは、提供された Uniform Resource Identifier (URI) を使用して STS トークンを取得します。 następnie STS トークンを使用して、Credentials クライアントが初期化されます。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config credentialConfig = new Config();
credentialConfig.setType("credentials_uri");
// クレデンシャルの URI を http://local_or_remote_uri/ 形式で指定します。値は、ALIBABA_CLOUD_CREDENTIALS_URI 環境変数から取得できます。
credentialConfig.setCredentialsUri("<CredentialsUri>");
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
方法 8:ベアラトークンを使用する
Cloud Call Center のみ、ベアラトークンを使用して SDK クライアントを初期化できます。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config credentialConfig = new Config();
credentialConfig.setType("bearer");
// ベアラトークンを指定します。
credentialConfig.setBearerToken("<BearerToken>");
Client credentialClient = new Client(credentialConfig);
// new Client() に値は指定されていません。
}
}
例
デフォルトのクレデンシャルプロバイダーチェーン
アプリケーションの開発環境と本番環境で異なるタイプのクレデンシャルを使用する場合、通常はコードから環境情報を取得し、コードブランチを作成して開発環境と本番環境の異なるクレデンシャルを取得する必要があります。Alibaba Cloud Credentials for Java のデフォルトのクレデンシャルプロバイダーチェーンを使用すると、コードを変更することなく、アプリケーションとは無関係な設定に基づいて、異なる環境のクレデンシャルを取得できます。Client client = new Client()
を使用して初期化方法を指定せずに Credentials クライアントを初期化すると、Credentials ツールは次の順序でクレデンシャル情報を取得します。
1. システムプロパティからクレデンシャル情報を取得する
Credentials ツールは、最初にシステムプロパティからクレデンシャル情報を取得します。次の両方の属性が指定されているかどうかを確認します。
alibabacloud.accessKeyId
alibabacloud.accessKeyIdSecret
指定されている場合、それらはデフォルトクレデンシャルとして使用されます。Java アプリケーションを実行するときに、次の JVM パラメーターを追加して、上記の属性の値を指定できます。
-Dalibabacloud.accessKeyId=your-access-key-id -Dalibabacloud.accessKeyIdSecret=your-access-key-secret
2. 環境変数からクレデンシャル情報を取得する
システム属性にクレデンシャル情報が見つからない場合、Credentials は引き続き環境変数を確認します。
ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET の両方の環境変数が指定されている場合、それらはデフォルトクレデンシャルとして使用されます。
ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN が指定されている場合、STS トークンがデフォルトクレデンシャルとして使用されます。
3. OIDC IdP の RAM ロールを使用してクレデンシャル情報を取得する
優先順位の高いクレデンシャルが見つからない場合、Credentials ツールは OIDC IdP の RAM ロールに関連する次の環境変数を確認します。
ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC IdP の ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンのファイルパス。
上記の 3 つの環境変数が指定されていて有効な場合、Credentials ツールは環境変数を使用して STS の AssumeRoleWithOIDC オペレーションを呼び出し、STS トークンをデフォルトクレデンシャルとして取得します。
4. config.json ファイルからクレデンシャル情報を取得する
credentials-java のバージョンが 0.3.8 以降であることを確認してください。
優先順位の高いクレデンシャルが見つからない場合、Credentials ツールは config.json
ファイルのロードを試みます。デフォルトのファイルパス:
Linux:
~/.aliyun/config.json
Windows:
C:\Users\USER_NAME\.aliyun\config.json
上記のデフォルトパスは変更しないでください。この方法を使用してアクセスクレデンシャルを設定する場合は、対応するパスに config.json ファイルを手動で作成します。例:
{
"current": "default",
"profiles": [
{
"name": "default",
"mode": "AK",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
},
{
"name":"client1",
"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":"client2",
"mode":"EcsRamRole",
"ram_role_name":"<RAM_ROLE_ARN>"
},
{
"name":"client3",
"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":"client4",
"mode":"ChainableRamRoleArn",
"source_profile":"<PROFILE_NAME>",
"ram_role_arn":"<ROLE_ARN>",
"ram_session_name":"<ROLE_SESSION_NAME>",
"expired_seconds":3600
}
]
}
config.json ファイルでは、mode を使用してクレデンシャルのタイプを指定できます。
AK: RAM ユーザーの AccessKey ペアを使用してクレデンシャル情報を取得します。
RamRoleArn: RAM ロールの ARN を使用してクレデンシャル情報を取得します。
EcsRamRole: ECS インスタンスにアタッチされている RAM ロールを使用してクレデンシャル情報を取得します。
OIDC: OIDC IdP の ARN と OIDC トークンファイルを使用してクレデンシャル情報を取得します。
ChainableRamRoleArn: ロールチェーンを使用して、別の JSON ファイルのアクセスクレデンシャルを指定してクレデンシャル情報を取得します。
ビジネス要件に基づいて他のパラメーターを設定します。
設定が完了すると、Credentials ツールは設定ファイルの current パラメーターで指定されたクレデンシャルを選択し、クライアントを初期化します。ALIBABA_CLOUD_PROFILE 環境変数を指定してクレデンシャル情報を指定することもできます。たとえば、ALIBABA_CLOUD_PROFILE 環境変数を client1 に設定できます。
5. ECS インスタンスの RAM ロールを使用してクレデンシャル情報を取得する
優先順位の高いクレデンシャルが見つからない場合、Credentials ツールは ECS インスタンスに割り当てられている RAM ロールを使用してクレデンシャルの取得を試みます。デフォルトでは、Credentials ツールはセキュリティ強化モード (IMDSv2) で ECS のメタデータサーバーにアクセスして、ECS インスタンスが使用する RAM ロールの STS トークンを取得し、STS トークンをデフォルトクレデンシャルとして使用します。Credentials ツールは自動的に ECS のメタデータサーバーにアクセスして RAM ロールの名前 (RoleName) を取得し、クレデンシャルを取得します。このプロセスでは 2 つのリクエストが送信されます。リクエストを 1 つだけ送信する場合は、ALIBABA_CLOUD_ECS_METADATA 環境変数を追加して RAM ロールの名前を指定します。セキュリティ強化モード (IMDSv2) で例外が発生した場合、Credentials ツールは通常モード (IMDSv1) でアクセスクレデンシャルを取得します。ALIBABA_CLOUD_IMDSV1_DISABLE 環境変数を設定して、例外処理ロジックを指定することもできます。有効な値:
false: Credentials ツールは、通常モード (IMDSv1) でアクセスクレデンシャルの取得を続けます。
true: 例外がスローされ、Credentials ツールはセキュリティ強化モードでアクセスクレデンシャルの取得を続けます。
メタデータサーバーの構成によって、サーバーがセキュリティ強化モード (IMDSv2) をサポートするかどうかが決まります。
さらに、ALIBABA_CLOUD_ECS_METADATA_DISABLED=true を指定して、Credentials ツールから ECS のメタデータサーバーへのアクセスを無効にすることができます。
ECS インスタンスメタデータの詳細については、「インスタンスメタデータの取得」をご参照ください。
ECS インスタンスに RAM ロールをアタッチする方法の詳細については、「インスタンス RAM ロール」トピックの「インスタンス RAM ロールの作成と ECS インスタンスへのアタッチ」セクションをご参照ください。エラスティックコンテナインスタンスに RAM ロールをアタッチする方法の詳細については、「API オペレーションを呼び出してインスタンス RAM ロールを使用する」トピックの「エラスティックコンテナインスタンスにインスタンス RAM ロールを割り当てる」セクションをご参照ください。
セキュリティ強化モード (IMDSv2) でクレデンシャルを取得するには、credentials-java のバージョンが 0.3.10 以降であることを確認してください。
6. クレデンシャル URI を使用してクレデンシャル情報を取得する
上記のいずれの方法でも有効なクレデンシャルが取得されない場合、Credentials ツールは ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を確認します。この環境変数が存在し、有効な URI が指定されている場合、Credentials ツールは HTTP リクエストを開始して、STS トークンをデフォルトクレデンシャルとして取得します。
セッションクレデンシャルの自動更新メカニズム
セッション資格情報には、RAM ロールの ARN(RamRoleArn)、ECS インスタンスの RAM ロール、OIDC IdP の RAM ロール(OIDCRoleArn)、および資格情報 URI が含まれます。Credentials ツールは、セッション資格情報の組み込み自動更新メカニズムを提供します。最初の呼び出しから資格情報を取得した後、Credentials ツールは資格情報をキャッシュに保存します。後続の呼び出しでは、資格情報の有効期限が切れていない限り、資格情報はキャッシュから読み取られます。それ以外の場合、Credentials ツールは資格情報を再度取得するために呼び出しを行い、キャッシュ内の資格情報を更新します。
ECS インスタンスの RAM ロールの場合は、キャッシュの生存時間( TTL )が終了する 15 分前に資格情報ツールによって資格情報が更新されます。