Security, Identity, and Compliance

AWS Secrets Manager

RAGの外部データソース接続情報やサードパーティのベクトルストア認証情報をアプリのコードから追い出す場所。Bedrock Knowledge Basesの各種コネクタが実際にここへ依存しています。

  • B|実装まわり
  • D2 実装と統合
  • D3 安全性・セキュリティ・ガバナンス

ひとことで言うと

アプリのコードやプロンプトから、資格情報という文字列を追い出す場所です。データベース認証情報・APIキー・OAuthトークンを、動的な呼び出しで取得する形に置き換えます。

要するに、値そのものを預けるロッカーです。KMSが「鍵の使用権を貸す仕組み」なのに対し、Secrets Managerは「中身(パスワードやトークンそのもの)を預かって、必要なときだけ渡す」係です。生成AIの文脈では、Knowledge BasesがConfluence・SharePoint・Salesforceに接続するときのOAuthトークンや、サードパーティベクトルストアの認証情報が、まさにここに預けられます。

なぜ生まれたか

Secrets Managerが無いと受け皿
RAGのデータソース接続情報がコードや環境変数にハードコードされる実行時にAPI呼び出しで動的に取得
長期間同じ資格情報を使い続け、漏えい時の被害が長引く自動ローテーション(Lambda関数による定期的な入れ替え)
OAuthのアクセストークンが期限切れになると同期ジョブが失敗するConfluence等のコネクタがリフレッシュトークンで自動更新(更新にはsecretsmanager:PutSecretValueが必要)

何に使うか

用途使い方関連ドメイン
Knowledge BasesのConfluence/SharePoint/Salesforce連携OAuth2のアクセス・リフレッシュトークンを保管D1・D2
サードパーティベクトルストア(Pinecone、Redis Enterprise Cloud)接続認証情報をSecrets Managerの秘密情報として保管D1
Web Crawlerデータソースの認証認証が必要なサイトのクレデンシャルを保管D1
資格情報の定期ローテーションLambda関数による自動ローテーションスケジュール設定D3

試験でどう問われるか

問われ方正解に寄る条件引っかけの選択肢
Knowledge BasesをConfluenceに接続するが、OAuthトークンをどう管理するかSecrets Managerにアクセス・リフレッシュトークンを保管し、サービスロールにGetSecretValue(更新が要る場合はPutSecretValueも)を付与トークンをKnowledge Baseの設定にそのまま貼り付ける
Confluenceの同期ジョブ中にOAuthアクセストークンが期限切れになるリフレッシュトークンで自動的に再取得される仕組みがあるので、更新権限を渡しておけば通常は失敗しない手動でトークンを都度更新する運用を組む
サードパーティのベクトルストアに接続するための認証情報を、コード内の定数として持ちたくないSecrets Managerで動的取得に切り替える環境変数に平文で置く
データベース認証情報を定期的に自動で入れ替えたいSecrets Managerの自動ローテーション(Lambdaベース)アプリの再デプロイのたびに手動で値を変える

Secrets Managerの秘密情報を暗号化する鍵を自分でCMKに変更した場合、KMSの通常料金が別途かかります。既定のaws/secretsmanagerマネージドキーを使う限りは暗号化自体は無料です。

実務でどう使うか

  • Secrets ManagerとKMSの鍵をまたぐ呼び出しは、キーポリシーのkms:ViaService条件がsecretsmanager.<region>.amazonaws.comになっている必要があります。 S3向けの条件をそのまま流用すると復号に失敗します
  • 自動ローテーションはLambda関数の実行料金が別途かかります。 マネージドローテーション(AWSが管理する一部のデータベース向け)でない限り、Lambda料金を見込んでおく必要があります
  • 秘密情報にはコスト配分タグが付けられます。 RAGパイプラインごとに使う秘密情報を分け、タグでコストを追跡すると運用が楽になります

削除をマークした秘密情報には課金されませんが、即座には削除されません。誤って重要な接続情報を削除マークしても、復旧できる猶予期間がある前提で運用設計するのが安全です。

取り違えやすいもの

迷う相手切り分けの一言
AWS KMSSecrets Managerは値そのもの(パスワード・トークン)を預かる。KMSはその値を暗号化するための鍵を管理する。Secrets Managerの中身自体もKMSで暗号化されている親子関係
AWS Systems Manager Parameter StoreSecrets Managerはローテーション機能・きめ細かいアクセス制御が前提の秘密情報向け。用途を明確に秘密情報に絞る場合の選択として位置づけられる
Amazon CognitoSecrets Managerはアプリやサービスが使う資格情報の保管。Cognitoはエンドユーザー自身の認証情報・IDの管理で対象が異なる
IAMSecrets Managerは秘匿な値を保管する。IAMはその値を取得する権限(GetSecretValue等)を制御する側

想起チェック

Q1. Knowledge BasesがConfluenceに接続する際、OAuthトークンをどこに保管し、更新にはどの権限が要る?

Secrets Managerに保管します。アクセストークンが期限切れになった際、リフレッシュトークンで再生成するため、サービスロールにsecretsmanager:GetSecretValueに加えて**secretsmanager:PutSecretValue**(更新用)が必要です。

Q2. Secrets ManagerとKMSの役割分担を一言で言うと?

Secrets Managerは秘匿な値そのものを保管・ローテーションする係、KMSはその値(や他のリソース)を暗号化するための鍵を管理する係です。Secrets Managerの秘密情報自体もKMSで暗号化されています。

出典(AWS公式)