For the complete documentation index, see llms.txt. This page is also available as Markdown.

AWS Secrets Managerストレージ

シークレットマネージャーの接続情報をAWS Secrets Managerに保存。ローカルファイルは不要。

KeeperシークレットマネージャーはAWS Secrets Managerと連携し、KSMクライアント構成をホスト上のローカルファイルではなく、AWSアカウント内のシークレットとして保存できます。構成はSDK起動のたびに取得され、ディスク上に平文または暗号化されたファイルは保持されません。

comment-question

ローカル構成ファイルのAWS KMS暗号化について

AWS KMSでの暗号化をご参照ください。この連携では構成をディスク上に保持し、AWS KMSのカスタマーマスターキーでラップします。2つのAWS連携は目的が異なり、使用するAWSサービスも異なります。運用に合った方を選択してください。

機能

  • KSMクライアント構成をAWS Secrets Managerのシークレットとして保存 (ローカルファイル不要)

  • SDK起動のたびにIAM認証済みのAWS API経由で構成を取得

  • 構成ファイルをイメージに含めたくない短期間のコンピュート環境 (Lambda、ECSタスク、オートスケーリングEC2など) に適している

  • AWS Secrets Managerが独自のKMSキーで保存時暗号化を内部処理するため、クライアント側のキー管理は不要

  • すべてのKSM Python SDK機能に対応

要件

  • Python 3.9.2以降が必要 (Python 3.6〜3.8の場合は keeper-secrets-manager-storage<1.1.0 に固定)

  • boto3 パッケージが必要

  • 事前に作成済みのAWS Secrets Managerシークレットと、読み書き用のIAM権限を持つAWSアカウント

セットアップ

1. モジュールのインストール

2. AWSアクセスの構成

Python SDKは、KSM構成を単一のAWS Secrets Managerシークレットとして読み書きします。以下が必要です。

  • SDKが読み書きするシークレット名 (または完全なARN)。指定しない場合のデフォルト名は ksm-config です。

  • シークレットの読み書き権限を持つAWS認証情報。

対象シークレットに必要なIAM権限は以下のとおりです。

  • secretsmanager:GetSecretValue

  • secretsmanager:PutSecretValue

単一のシークレットへのアクセスを付与するAWSポリシーの例:

boto3 パッケージは、インスタンスロール、~/.aws/credentials、環境変数 (AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_DEFAULT_REGION)、または名前付きプロファイルなど、標準的な場所からAWS認証情報を検索します。設定については AWSドキュメント をご参照ください。

3. コードにAWS Secrets Managerストレージを追加

SecretsManager コンストラクタのストレージとして AwsSecretStorage を使用します。このクラスは4つの認証情報解決モードに対応しています。展開環境に合ったものを選択してください。

comment-question

v1.0.xからのアップグレードについて

v1.1.0では、AwsSecretStorage に影響する以下の動作が変わります。

  • AwsSecretStorage.__init__ は、インスタンス生成時に構成を読み込みます (他のバックエンドと同様)。無効な認証情報や存在しないシークレットは、最初のSDK呼び出し時ではなく、生成時に例外となります。

  • AwsSecretStorage は、シークレット値に privateKey フィールドが含まれていることを要求せず、任意の有効なJSON辞書を受け入れます。

  • AwsSecretStorage.__load_config() は、AWS Secrets Manager呼び出しが失敗した場合に例外を発生させます。v1.0.xではエラーはログに記録されるだけで、config = {} のまま問題が検出されない状態でした。

  • AwsConfigProvider._get_instance_regionread_config は、失敗時に空の値を返すのではなく、例外を発生させます。

  • AwsSecretStorage は、同時読み書きに対してスレッドセーフになりました。

EC2インスタンスロールの使用 (既定)

既定のコンストラクタは、EC2インスタンスのIAMロールを使用し、インスタンスロールの検索に失敗した場合は既定のAWSプロファイルにフォールバックします。リージョンはEC2インスタンスメタデータサービス (IMDS) から自動検出されます。

既定のAWSプロファイルの使用

EC2以外 (ワークステーション、CIランナー、AWS認証情報をマウントしたコンテナ) で実行するコード向け:

名前付きAWSプロファイルの使用

明示的な認証情報の使用

aws_key パラメータには、以下のいずれかを指定できます。

  • シークレット名: ksm-config

  • シークレットID: ksm-config-aBcDeF

  • 完全なARN: arn:aws:secretsmanager:us-east-2:123456789012:secret:ksm-config-aBcDeF

aws_key が空の場合、SDKは KSM_AWS_SECRET 環境変数から読み取ります。それも未設定の場合は、デフォルトのシークレット名 ksm-config が使用されます。

AWS Secrets Managerストレージの使用

セットアップ後、AwsSecretStorage はシークレットマネージャーSDKのすべての機能に対応します。SDK起動のたびに、構成を取得するための GetSecretValue 呼び出しが少なくとも1回実行されます。書き込み時 (ワンタイムアクセストークンによる初回初期化など) には PutSecretValue が呼び出されます。

初回初期化時の動作

AwsSecretStorage は、インスタンスが生成されるたびにシークレット値を読み取ります。__init____load_config を呼び出し、それが provider.read_config() を呼び出します。シークレットが存在しない、または値が有効なJSONでない場合、インスタンス生成は ValueError で失敗します。初回使用前に {} でシークレットを事前作成してください。上記のIAMセクションの警告をご参照ください。

インスタンス生成後、ワンタイムトークンによる最初の PutSecretValue で、既存のシークレットに構成が書き込まれます。以降のSDK実行ではその構成を読み取り、再初期化は行われません。

構成の削除

config.delete_all() を呼び出すと、ローカルのインメモリ構成がクリアされ、空のJSONオブジェクトがAWSシークレットに書き戻されます。シークレット自体はAWS Secrets Managerから削除されず、値のみがクリアされます。シークレットを完全に削除するには、AWSコンソール、AWS CLI、またはIaCツールを使用してください。

その他の例と機能については、KSM SDKのドキュメントをご参照ください。

最終更新