Java とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する - AWS Secrets Manager

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

Java とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する

シークレットを取得するときに、Secrets Manager の Java ベースのキャッシュコンポーネントを使用して、将来使用するためにキャッシュすることができます。キャッシュされたシークレットの取得は、Secrets Manager からの取得よりも高速です。Secrets Manager API を呼び出すにはコストがかかるため、キャッシュを使用するとコストを削減できます。シークレットを取得するすべての方法については、「シークレットの取得」を参照してください。

キャッシュポリシーは LRU (最近最も使われていない) であるため、キャッシュでシークレットを破棄する必要が生じた場合は、最も最近使われていないシークレットが破棄されます。デフォルトでは、1 時間ごとにキャッシュでシークレットが更新されます。キャッシュでシークレットが更新される頻度を設定できるだけでなく、シークレットの取得にフックさせて機能を追加することもできます。

キャッシュ参照が解放されると、キャッシュはガベージコレクションを強制しません。キャッシュの実装には、キャッシュの無効化は含まれていません。キャッシュを実装するのはキャッシュを使用するためであり、セキュリティを強化するためでもセキュリティに焦点を当てるためでもありません。キャッシュ内のアイテムを暗号化するなど、セキュリティを強化する必要がある場合は、所定のインターフェイスと抽象メソッドを使用してください。

このコンポーネントを使用するには、以下が必要です。

  • Java 8 以上の開発環境。Oracle のウェブサイトの「Java SE Downloads」(Java SEのダウンロード) を参照してください。

  • AWS SDK for Java 1.x。プロジェクトで AWS SDK for Java の両方のバージョンを使用できます。詳細については、「SDK for Java 1.x と 2.x の並行使用」を参照してください。

ソースコードをダウンロードするには、GitHub の「Secrets Manager Java-based caching client component」(Secrets Manager の Java ベースのキャッシュクライアントコンポーネント) を参照してください。

コンポーネントをプロジェクトに追加するには、Maven pom.xml ファイルに、次の依存関係を含めます。Maven の詳細については、Apache Maven プロジェクトのウェブサイトの「Getting Started Guide」(入門ガイド) を参照してください。

<dependency> <groupId>com.amazonaws.secretsmanager</groupId> <artifactId>aws-secretsmanager-caching-java</artifactId> <version>1.0.2</version> </dependency>

必要な許可:

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

詳細については、「アクセス許可に関するリファレンス」を参照してください。

例 シークレットを取得する

次のコード例は、シークレット文字列を取得する Lambda 関数を示しています。これは関数ハンドラーの外部でのキャッシュのインスタンス化のベストプラクティスに従うため、Lambda 関数を再度呼び出しても、API は継続して呼び出されません。

package com.amazonaws.secretsmanager.caching.examples; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.secretsmanager.caching.SecretCache; public class SampleClass implements RequestHandler<String, String> { private final SecretCache cache = new SecretCache(); @Override public String handleRequest(String secretId, Context context) { final String secret = cache.getSecretString(secretId); // Use the secret, return success; } }