翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Secrets Manager エージェントの使用
Secrets Manager Agent の仕組み
AWS Secrets Manager エージェントは、コンピューティング環境全体で Secrets Manager からシークレットを使用する方法を標準化するのに役立つクライアント側の HTTP サービスです。これは次のサービスと併用できます。
-
AWS Lambda
-
Amazon Elastic Container Service
-
アマゾン エラスティックKubernetesサービス
-
Amazon Elastic Compute Cloud
Secrets Manager Agent はシークレットを取得してメモリにキャッシュするため、アプリケーションは Secrets Manager を直接呼び出す代わりに localhost からシークレットを取得できます。Secrets Manager Agent はシークレットのみを読み取ることができます。シークレットを変更することはできません。
Secrets Manager エージェントはオープンソースです。ソースコード、インストール手順、最新のリリース情報は、GitHub
重要
Secrets Manager エージェントは、環境の AWS 認証情報を使用して Secrets Manager を呼び出します。これには、シークレットセキュリティの向上に役立つ Server Side Request Forgery (SSRF) に対する保護が含まれています。Secrets Manager Agent は、デフォルトで最高優先度のキー交換としてポスト量子 ML-KEM キー交換を使用します。
Secrets Manager Agent のキャッシュについて
Secrets Manager Agent はインメモリキャッシュを使用するため、Secrets Manager Agent を再起動するとキャッシュがリセットされます。以下に基づいて、キャッシュされたシークレット値を定期的に更新します。
-
デフォルトの更新頻度 (TTL) は 300 秒です
-
設定ファイルを使用して TTL を変更できます。
-
更新は、TTL の有効期限が切れた後にシークレットをリクエストしたときに発生します。
注記
Secrets Manager Agent にはキャッシュ無効化は含まれません。キャッシュエントリの有効期限が切れる前にシークレットがローテーションすると、Secrets Manager Agent は古いシークレット値を返すことがあります。
Secrets Manager Agent は、GetSecretValue のレスポンスと同じ形式でシークレット値を返します。シークレット値はキャッシュ内で暗号化されません。
トピック
Secrets Manager Agentをビルドする
開始する前に、プラットフォーム用の標準開発ツールと Rust ツールがインストールされていることを確認してください。
注記
macOS で fips 機能を有効にしてエージェントを構築するには、現在次の回避策が必要です。
-
xcrun --show-sdk-pathの実行の結果に設定されたSDKROOTという環境変数を作成する
Secrets Manager Agent をインストールする
次のインストールオプションからコンピューティング環境を選択します。
Secrets Manager Agent を使用してシークレットを取得する
シークレットを取得するには、シークレットの名前または ARN をクエリパラメータとして含めて、ローカルの Secrets Manager Agent エンドポイントを呼び出します。デフォルトでは、Secrets Manager Agent はシークレットの AWSCURRENT バージョンを取得します。別のバージョンを取得するには、versionStage または versionId パラメータを使用します。
重要
Secrets Manager Agent を保護するためには、各リクエスト X-Aws-Parameters-Secrets-Token の一部として SSRF トークンヘッダーを含める必要があります。Secrets Manager Agent は、このヘッダーを持たないリクエストや無効な SSRF トークンを持つリクエストを拒否します。Secrets Manager Agent の構成 で SSRF ヘッダー名をカスタマイズできます。
必要なアクセス許可
Secrets Manager エージェントは、AWS 認証情報プロバイダーチェーンを使用する AWS SDK for Rust を使用します。これらの IAM 認証情報の ID は、Secrets Manager Agent がシークレットを取得するためのアクセス許可を決定します。
-
secretsmanager:DescribeSecret -
secretsmanager:GetSecretValue
権限の詳細については、「のアクセス許可リファレンス AWS Secrets Manager」を参照してください。
重要
シークレット値が Secrets Manager Agent に取り込まれると、コンピューティング環境と SSRF トークンにアクセスできるすべてのユーザーが Secrets Manager Agent キャッシュからシークレットにアクセスできます。詳細については、「セキュリティに関する考慮事項」を参照してください。
リクエストの例
refreshNow パラメータについて
Secrets Manager Agent は、インメモリキャッシュを使用してシークレット値を保存し、定期的に更新します。デフォルトでは、この更新は、有効期限 (TTL) が切れた後、通常 300 秒ごとにシークレットをリクエストしたときに発生します。ただし、このアプローチでは、特にキャッシュエントリの有効期限が切れる前にシークレットがローテーションした場合、シークレット値が古くなることがあります。
この制限に対応するため、Secrets Manager Agent は URL で refreshNow というパラメータをサポートしています。このパラメータを使用して、シークレットの値の即時更新を強制し、キャッシュをバイパスして最新の情報を取得できます。
- デフォルトの動作 (
refreshNowなし) -
-
TTL の有効期限が切れるまでキャッシュされた値を使用します
-
TTL の後にのみシークレットを更新します (デフォルトは 300 秒)
-
キャッシュの有効期限が切れる前にシークレットがローテーションすると、古い値を返す可能性があります
-
refreshNow=trueでの動作-
-
キャッシュを完全にバイパスします
-
Secrets Manager から直接、最新のシークレット値を取得します
-
キャッシュを新しい値で更新し、TTL をリセットします
-
常に最新のシークレット値を取得するようにします
-
シークレット値を強制更新する
重要
refreshNow の初期値は false です。true に設定すると、Secrets Manager Agent 設定ファイルで指定された TTL が上書きされ、Secrets Manager への API コールが行われます。
ロール連鎖を使用してアカウント間でシークレットを取得する
ロールの連鎖により、Secrets Manager Agent は を使用して IAM ロールを引き受けることで、他の AWS アカウントからシークレットを取得できます AWS STS AssumeRole。Secrets Manager エージェントは、一意のロール ARN ごとに個別のキャッシュクライアントを作成してキャッシュします。各ロールクライアントは独自の独立したキャッシュを保持するため、異なるロールでフェッチされた同じシークレットには個別のキャッシュエントリがあります。
必要なアクセス許可
ロールチェーンを使用するには、以下が必要です。
-
Secrets Manager エージェントの環境認証情報には、ターゲットロール ARN に対するアクセス
sts:AssumeRole許可が必要です。 -
ターゲットロールには、アクセスするシークレットの
secretsmanager:GetSecretValueおよび アクセスsecretsmanager:DescribeSecret許可が必要です。 -
ターゲットロールの信頼ポリシーは、Secrets Manager エージェントの ID がそれを引き受けることを許可する必要があります。
クロスアカウントシークレットを取得する
Secrets Manager エージェントへのリクエストに roleArnクエリパラメータを含めて、シークレットの取得のために引き受けるロールを指定します。
ロールの連鎖設定と制限
TOML 設定ファイルの max_rolesオプションを使用してロールの連鎖を設定します。これにより、同時引き受けロールの最大数が 1~20 の範囲で設定されます。デフォルトは 20 です。
重要
引き受けたロールは、Secrets Manager Agent のロールキャッシュから削除されません。ロールの最大数に達すると、Secrets Manager Agent が再起動されるまで、新しいロール ARNs を持つリクエストは400エラーで拒否されます。
ロール連鎖のエラーレスポンス
400-
roleArn形式が無効であるか、引き受けたロールの最大数に達しています。 403-
AWS STS
AssumeRoleの呼び出しに失敗しました。ターゲットロールの信頼ポリシーで、Secrets Manager エージェントの ID がそれを引き受けることが許可されていることを確認します。
起動時のシークレットのプリフェッチ
デフォルトでは、アプリケーションがシークレットをリクエストすると、Secrets Manager エージェントはオンデマンドでシークレットを取得します。プリフェッチでは、Secrets Manager Agent は起動時に指定されたシークレットをキャッシュにロードするため、アプリケーションは最初の API コールを待たずにすぐにそれらにアクセスできます。プリフェッチはバックグラウンドタスクとして実行されます。Secrets Manager Agent はリクエストの受け入れをすぐに開始し、プリフェッチの完了時にブロックしません。
シークレットを指定すると、次の 2 つの方法でプリフェッチできます。
-
明示的なシークレット – 特定のシークレット IDsまたは ARNs。
-
タグベースの検出 – タグキーでシークレットを検出します。Secrets Manager エージェントは、指定されたタグを持つすべてのシークレットを取得します。
必要なアクセス許可
シークレットを取得するための標準のアクセス許可に加えて、プリフェッチには以下が必要です。
-
secretsmanager:BatchGetSecretValue– すべてのプリフェッチオペレーションに必要です。 -
secretsmanager:ListSecrets– タグベースの検出を使用する場合にのみ必要です。
プリフェッチを設定する
TOML 設定ファイルに[prefetch]セクションを追加します。以下のオプションが利用できます。
cache_buffer_ratio-
プリフェッチ中にクライアントごとに埋めるキャッシュの最大割合。範囲は 0.1~1.0 です。デフォルトは 0.8 です。バッファ制限に達すると、Secrets Manager Agent は残りのシークレットのプリフェッチを停止し、既存のキャッシュエントリを削除しません。プリフェッチ中にロードされなかったシークレットは、引き続きオンデマンドで使用できます。
max_jitter_seconds-
プリフェッチが開始されるまでの秒単位のランダムな遅延。範囲は 0~10 です。デフォルトは 0 です。これを使用して、複数のエージェントが同時に起動したときにフリート全体の API コールが同期されるのを防ぎます。
例明示的なシークレットを使用したプリフェッチ設定
[prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "MyOtherSecret" }, ]
例タグベースの検出を使用したプリフェッチ設定
[prefetch] cache_buffer_ratio = 0.8 filter_tags = [ { key = "Environment" }, { key = "Team" }, ]
同じ設定で明示的なシークレットとタグベースの検出を組み合わせることもできます。クロスアカウントプリフェッチの場合は、 role_arnフィールドを追加します。詳細については、「ロール連鎖を使用してアカウント間でシークレットを取得する」を参照してください。
例クロスアカウントアクセスによるプリフェッチ設定
[prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "cross-account-secret", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ] filter_tags = [ { key = "Environment" }, { key = "Team", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ]
Secrets Manager Agent の構成
Secrets Manager Agent の設定を変更するには、TOML./aws_secretsmanager_agent --config
config.toml を呼び出します。
設定オプション
log_level-
Secrets Manager Agent のログで報告される詳細レベル: DEBUG、INFO、WARN、ERROR、または NONE。デフォルトは INFO です。
log_to_file-
ファイルまたは stdout/stderr にログを記録するかどうか:
trueまたはfalse。デフォルトはtrueです。 http_port-
ローカル HTTP サーバーのポート範囲は 1024 ~ 65535 です。デフォルトは 2773 です。
region-
リクエストに使用する AWS リージョン。リージョンが指定されていない場合、Secrets Manager Agent は SDK からリージョンを決定します。詳細については、「AWS SDK for Rust Developer Guide」の「Specify your credentials and default Region」を参照してください。
ttl_seconds-
キャッシュされた項目の TTL (秒単位) の範囲は 0 ~ 3600 です。デフォルトは 300 です。0 はキャッシュがないことを示します。
cache_size-
キャッシュに保存できるシークレットの最大数。範囲は 1~1000 です。デフォルトは 1000 です。
ssrf_headers-
Secrets Manager Agent が SSRF トークンを確認するヘッダー名のリスト。デフォルトは「X-Aws-Parameters-Secrets-Token, X-Vault-Token」です。
ssrf_env_variables-
Secrets Manager Agent が SSRF トークンを順番にチェックする環境変数名のリスト。環境変数には、
AWS_TOKEN=file:///var/run/awssmatokenのようにトークンまたはトークンファイルへの参照を含めることができます。デフォルトは、AWS_TOKEN、AWS_SESSION_TOKEN、AWS_CONTAINER_AUTHORIZATION_TOKEN です。 path_prefix-
リクエストがパスベースのリクエストかどうかを判断するために使用される URI プレフィックス。デフォルトは「/v1/」です。
max_conn-
Secrets Manager Agent が許可する HTTP クライアントからの接続の最大数で、範囲は 1~1000 です。デフォルトは 800 です。
max_roles-
クロスアカウントアクセスの同時 IAM ロールの最大数。範囲は 1~20 です。デフォルトは 20 です。詳細については、「ロール連鎖を使用してアカウント間でシークレットを取得する」を参照してください。
オプション機能
Secrets Manager Agent は、--features フラグを cargo build に渡すことで、オプション機能で構築できます。利用できる機能は次のとおりです。
構築機能
prefer-post-quantum-
X25519MLKEM768を最も優先度の高いキー交換アルゴリズムにします。それ以外にした場合も利用可能ですが、最高の優先度にはなりません。X25519MLKEM768は、ハイブリッドのポスト量子セキュアキー交換アルゴリズムです。 fips-
エージェントで使用される暗号スイートを FIPS 承認の暗号のみに制限します。
ログ記録
- ローカルなログ記録
-
Secrets Manager Agent は
log_to_file設定変数に応じて、エラーをlogs/secrets_manager_agent.logファイルまたは stdout/stderr にローカルでログに記録します。アプリケーションが Secrets Manager Agent を呼び出してシークレットを取得すると、それらの呼び出しはローカルログに表示されます。CloudTrail ログには表示されません。 - ログローテーション
-
Secrets Manager Agent は、ファイルが 10 MB に達すると新しいログファイルを作成し、合計で最大 5 つのログファイルを保存します。
- AWS サービスログ記録
-
ログは Secrets Manager、CloudTrail、または CloudWatch には送信されません。Secrets Manager Agent からシークレットを取得するリクエストは、これらのログに表示されません。Secrets Manager Agent が Secrets Manager を呼び出してシークレットを取得すると、その呼び出しは
aws-secrets-manager-agentを含むユーザーエージェント文字列とともに CloudTrail に記録されます。
Secrets Manager Agent の構成 でログ記録オプションを設定できます。
セキュリティに関する考慮事項
- 信頼ドメイン
-
エージェントアーキテクチャの場合、信頼ドメインは、エージェントエンドポイントと SSRF トークンにアクセスできる場所であり、通常はホスト全体です。同じセキュリティ体制を維持するために、Secrets Manager Agent の信頼ドメインは、Secrets Manager 認証情報が利用可能なドメインと一致する必要があります。例えば、Amazon EC2 では、Secrets Manager Agent の信頼ドメインは、Amazon EC2 のロールを使用する場合の認証情報のドメインと同じになります。
重要
Secrets Manager 認証情報がアプリケーションにロックされたエージェントソリューションをまだ使用していないセキュリティ意識の高いアプリケーションでは、言語固有の AWS SDKs またはキャッシュソリューションの使用を検討する必要があります。シークレットの詳細については、「シークレットの取得」を参照してください。