

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# での認証情報キャッシュ AWS SDK for Java 2.x
<a name="credential-caching"></a>

は、認証情報キャッシュ AWS SDK for Java 2.x を実装してパフォーマンスを向上させ、認証情報ソースへの呼び出しを減らします。このセクションでは、認証情報キャッシュの仕組みと、アプリケーションに合わせて設定する方法について説明します。

## 認証情報プロバイダーのキャッシュについて
<a name="understanding-credential-provider-caching"></a>

SDK for Java 2.x の認証情報プロバイダーは、さまざまなキャッシュ戦略を使用します。
+ **内部認証情報キャッシュ**: 多くのプロバイダーは、取得した認証情報をキャッシュします。
+ **自動更新**: 認証情報をキャッシュするプロバイダーは、更新メカニズムを実装しています。

### 内部で認証情報をキャッシュするプロバイダー
<a name="providers-with-internal-caching"></a>

次の認証情報プロバイダーは、新しいインスタンスを作成する場合でも、認証情報を内部でキャッシュします。
+ **インスタンスプロファイル認証情報プロバイダー**: Amazon EC2 メタデータサービスから認証情報をキャッシュします。
+ **コンテナ認証情報プロバイダー**: コンテナメタデータエンドポイントから認証情報をキャッシュします。
+ **STS ベースのプロバイダー**: AWS Security Token Service (STS) から一時的な認証情報をキャッシュします。
+ **ウェブ ID トークンプロバイダー**: ウェブ ID トークンから取得した認証情報をキャッシュします。
+ **プロセス認証情報プロバイダー**: 外部プロセスから認証情報をキャッシュします。

### 内部キャッシュを使用しないプロバイダー
<a name="providers-without-caching"></a>

以下のプロバイダーは内部キャッシュを実装していません。
+ **環境変数認証情報プロバイダー**
+ **システムプロパティ認証情報プロバイダー**
+ **静的認証情報プロバイダー**

## 認証情報キャッシュの設定
<a name="configuring-credential-caching"></a>

認証情報プロバイダーを構築するときに、キャッシュ動作をカスタマイズできます。

### 失効時間
<a name="stale-time"></a>

認証情報が失効し、更新が必要なタイミングを制御します。

```
.staleTime(Duration.ofMinutes(2))  // Consider stale 2 minutes before expiration.
```

### プリフェッチ時間
<a name="prefetch-time"></a>

有効期限が切れる前に認証情報の更新を開始するタイミングを決定します。

```
.prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration.
```

### 非同期更新
<a name="async-updates"></a>

バックグラウンドでの認証情報の更新を有効にします。

```
.asyncCredentialUpdateEnabled(true)  // Refresh credentials in background thread.
```

### セッション期間
<a name="session-duration"></a>

STS ベースのプロバイダーで、一時的な認証情報が有効な期間を制御します。

```
.refreshRequest(r -> r.durationSeconds(3600))  // 1 hour session.
```

## 認証情報キャッシュの設定例
<a name="example-optimized-sts-config"></a>

認証情報プロバイダーの実装用にキャッシュを設定する例として、SDK でバックグラウンドスレッドを使用して、有効期限が切れる前に認証情報をプリフェッチ (事前に取得) できます。これにより、新しい認証情報を取得するブロッキング呼び出しを回避できます。

ビルダーで `[asyncCredentialUpdateEnabled](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#asyncCredentialUpdateEnabled(java.lang.Boolean))` プロパティを `true` に設定することで、バックグラウンドスレッドを使用して認証情報をプリフェッチする `[StsAssumeRoleCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.html)` を作成する例を次に示します。

```
StsAssumeRoleCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder()
    .refreshRequest(r -> r
        .roleArn("arn:aws:iam::111122223333:role/example-role")
        .roleSessionName("example-session")
        .durationSeconds(3600))  // 1 hour session
    .staleTime(Duration.ofMinutes(5))  // Consider stale 5 minutes before expiration
    .prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration
    .asyncCredentialUpdateEnabled(true)  // Refresh in background
    .build();

S3Client s3 = S3Client.builder()
    .credentialsProvider(provider)
    .build();
```

`s3Client` で オペレーションを初めて呼び出すと、 `[AssumeRoleRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/model/AssumeRoleRequest.html)`が AWS Security Token Service (STS) に送信されます。STS は、15 分 (900 秒) 有効な一時的な認証情報を返します。`s3Client` インスタンスは、15 分経過する前に更新するまで、キャッシュされた認証情報を使用します。デフォルトでは、SDK は現在のセッションの有効期限の 5 分から 1 分前に新しいセッションの新しい認証情報を取得しようとします。プリフェッチウィンドウは、 `[prefetchTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#prefetchTime(java.time.Duration))` および `[staleTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#staleTime(java.time.Duration))` プロパティを使用して設定できます。

次のセッションベースの認証情報プロバイダーも同様に設定できます。
+ `StsWebIdentityTokenFileCredentialsProvider`
+ `StsGetSessionTokenCredentialsProvider`
+ `StsGetFederationTokenCredentialsProvider`
+ `StsAssumeRoleWithWebIdentityCredentialsProvider`
+ `StsAssumeRoleWithSamlCredentialsProvider`
+ `StsAssumeRoleCredentialsProvider`
+ `DefaultCredentialsProvider` (セッションを使用する認証情報プロバイダーに委任する場合)
+ `ProcessCredentialsProvider`
+ `WebIdentityTokenFileCredentialsProvider`
+ `ContainerCredentialsProvider`
+ `InstanceProfileCredentialsProvider`

認証情報キャッシュを理解すると、 を使用する際のアプリケーションのパフォーマンスと信頼性を最適化できます AWS のサービス。