AWS Secrets Managerストレージ
シークレットマネージャーの接続情報をAWS Secrets Managerに保存。ローカルファイルは不要。
KeeperシークレットマネージャーはAWS Secrets Managerと連携し、KSMクライアント構成をホスト上のローカルファイルではなく、AWSアカウント内のシークレットとして保存できます。構成はSDK起動のたびに取得され、ディスク上に平文または暗号化されたファイルは保持されません。
機能
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:GetSecretValuesecretsmanager:PutSecretValue
単一のシークレットへのアクセスを付与するAWSポリシーの例:
3. コードにAWS Secrets Managerストレージを追加
SecretsManager コンストラクタのストレージとして AwsSecretStorage を使用します。このクラスは4つの認証情報解決モードに対応しています。展開環境に合ったものを選択してください。
EC2インスタンスロールの使用 (既定)
既定のコンストラクタは、EC2インスタンスのIAMロールを使用し、インスタンスロールの検索に失敗した場合は既定のAWSプロファイルにフォールバックします。リージョンはEC2インスタンスメタデータサービス (IMDS) から自動検出されます。
既定のAWSプロファイルの使用
EC2以外 (ワークステーション、CIランナー、AWS認証情報をマウントしたコンテナ) で実行するコード向け:
名前付きAWSプロファイルの使用
明示的な認証情報の使用
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ツールを使用してください。
最終更新

