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

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

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

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

キャッシュポリシーは先入れ先出し (FIFO) であるため、キャッシュがシークレットを破棄する必要がある場合、最も古いシークレットは破棄されます。デフォルトでは、1 時間ごとにキャッシュでシークレットが更新されます。次のオプションを設定できます。

  • max_size – 最近アクセスされていないシークレットを削除する前に保持するキャッシュされたシークレットの最大数。

  • ttl – シークレット状態の更新を要求する前にキャッシュされた項目が有効と見なされる期間。

キャッシュの実装には、キャッシュの無効化は含まれていません。キャッシュを実装するのはキャッシュを使用するためであり、セキュリティを強化するためでもセキュリティに焦点を当てるためでもありません。キャッシュ内のアイテムを暗号化するなど、セキュリティを強化する必要がある場合は、提供されている特性を使用してキャッシュを変更します。

コンポーネントを使用するには、tokio を備えた Rust 2021 開発環境が必要です。詳細については、Rust プログラミング言語ウェブサイトで「はじめに」を参照してください。

ソースコードをダウンロードするには、GitHub の「Secrets Manager Rust-based caching client component」を参照してください。

キャッシュコンポーネントをインストールするには、次のコマンドを使用します。

cargo add aws_secretsmanager_caching

必要な許可:

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

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

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

次の例は、MyTest という名前のシークレットのシークレット値を取得する方法を示しています。

use aws_secretsmanager_caching::SecretsManagerCachingClient; use std::num::NonZeroUsize; use std::time::Duration; let client = match SecretsManagerCachingClient::default( NonZeroUsize::new(10).unwrap(), Duration::from_secs(60), ) .await { Ok(c) => c, Err(_) => panic!("Handle this error"), }; let secret_string = match client.get_secret_value("MyTest", None, None).await { Ok(s) => s.secret_string.unwrap(), Err(_) => panic!("Handle this error"), }; // Your code here
例 カスタム設定とカスタムクライアントによるキャッシュのインスタンス化

次の例は、キャッシュを構成し、MyTest という名前のシークレットのシークレット値を取得する方法を示しています。

let config = aws_config::load_defaults(BehaviorVersion::latest()) .await .into_builder() .region(Region::from_static("us-west-2")) .build(); let asm_builder = aws_sdk_secretsmanager::config::Builder::from(&config); let client = match SecretsManagerCachingClient::from_builder( asm_builder, NonZeroUsize::new(10).unwrap(), Duration::from_secs(60), ) .await { Ok(c) => c, Err(_) => panic!("Handle this error"), }; let secret_string = client .get_secret_value("MyTest", None, None) .await { Ok(c) => c.secret_string.unwrap(), Err(_) => panic!("Handle this error"), }; // Your code here ```