AWS KMSでの暗号化
AWS KMSによるシークレットマネージャー接続情報の保護

KeeperシークレットマネージャーをAWS KMSと組み合わせると、構成ファイルを暗号化できます。マシン上の接続情報を保護しつつ、ボルト内のシークレットについてもKeeperのゼロ知識暗号化を利用できます。
AWS Secrets Managerをバックエンドとするストレージについて
AWS Secrets Managerストレージをご参照ください。この連携ではKSM構成をAWS Secrets Managerのシークレット内に保持し、ローカルファイルは不要です。2つのAWS連携は目的が異なり、使用するAWSサービスも異なります。運用に合った方を選択してください。
機能
AWS KMSを使い、Keeperシークレットマネージャーの構成ファイルを暗号化・復号化する
シークレットマネージャー接続情報への不正アクセスを防ぐ
わずかなコード変更で保護を有効化でき、すべてのKeeperシークレットマネージャーSDKの機能をそのまま利用できる
要件
Java 11以降で利用可能
@aws-sdk/client-kmsはバンドル済みのため、別途インストールは不要です
Python 3.9.2以降が必要 (Python 3.6〜3.8の場合は
<1.1.0に固定)boto3パッケージが必要
セットアップ
1. モジュールのインストール
GradleまたはMavenでプロジェクトをセットアップします。
Gradle
Maven
npmで、シークレットマネージャーとAWS KMSの統合パッケージをインストールします。
HSM用モジュールは、Keeperシークレットマネージャーのストレージパッケージに含まれます。以下のコマンドでインストールします。
AWS KMS連携では、あらかじめ boto3 が必要です。以下のコマンドでインストールします。
以下のコマンドでシークレットマネージャーとAWS KMSの統合をインストールします。
2. AWS接続を構成
デフォルトでは、boto3は、aws configure で設定したAWS CLIの既定セッションを使います。接続内容を独自に指定する場合は、~/.aws/config と ~/.aws/credentials の2ファイルを手動で編集します。
aws configure やセッションの扱いの詳細については、以下のAWS CLIリファレンスにまとまっています。https://docs.aws.amazon.com/cli/latest/reference/configure/
あるいは、AwsSessionConfig データクラスを使い、aws_access_key_id、aws_secret_access_key、aws_session_token にアクセスキー情報を渡して明示的に指定します。
AWS KMS連携には、AWSアクセスキーが必要です。
AWSアクセスキーについて詳しくは、以下のドキュメントをご参照ください。https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/
3. AWS KMSストレージをコードに追加
AWS接続の構成が完了すると、連携を通じてKSM構成ファイルの暗号化と復号に使うキーを取得できます。シークレットマネージャーSDKでは、KMSをストレージとして使うよう指定する必要があります。
指定された接続認証情報の使用
この操作を行うには、SecretsManager コンストラクタで、AwsKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AwsSessionConfig、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager コンストラクタで、AWSKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AWSセッション認証情報の AWSSessionConfig、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager のコンストラクタで、AwsKmsKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AwsSessionConfig、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
v1.0.xからのアップグレードについて
v1.1.0では、AwsKmsKeyValueStorage に影響する以下の動作が変わります。
decrypt_config()のデフォルトはautosave=Falseになりました。従来の動作を維持するにはdecrypt_config(autosave=True)を呼び出してください。暗号化および復号に失敗した場合、エラーを出さずにストレージ状態を破損させるのではなく、例外が発生します。
破損した、または非UTF8の構成ファイルは、
JSONDecodeErrorをそのまま返すのではなく、"is not a valid encrypted config file"の例外が発生します。構成の書き込みはアトミック (書き込み後にリネーム) になり、書き込み失敗時に既存の構成が0バイトに切り詰められることはありません。
delete_all()は空の暗号化ブロブを書き込むのではなく、暗号化された構成ファイルをディスクから削除します。AwsKmsKeyValueStorageは、同時読み書きに対してスレッドセーフになりました。
この操作を行うには、SecretsManager のコンストラクタで、AwsKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AwsSessionConfig、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
デフォルトの接続を使用
この操作を行うには、SecretsManager コンストラクタで、AwsKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、およびAWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager コンストラクタで、AWSKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、およびAWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager のコンストラクタで、AwsKmsKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager のコンストラクタで、AWSKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、AWSキーID、AWS KMSによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
AWS KMS連携の使用
セットアップが完了すると、シークレットマネージャーとAWS KMSの連携により、シークレットマネージャーSDKの機能をすべて利用できます。実行時に構成ファイルを復号するには、コードからAWS KMSのAPIにアクセスできる必要があります。
追加オプション
キーの変更
構成の暗号化に使うキーは変更できます。以下にコード例を示します。
構成の復号化
実装を別のクラウド環境へ移す場合や、平文の認証情報が必要な場合は、構成ファイルを復号できます。この関数はブール値を取り、true では復号結果をファイルに書き出し、false では復号した構成の内容だけを返します。
v1.1.0では、decrypt_config() のデフォルトは autosave=False になりました。以前のデフォルトは True であり、暗号化された構成ファイルを平文で上書きしていました。ディスクに保存する場合は、明示的に autosave=True を指定してください。
KSM連携を利用する準備が整いました。
その他の例と機能については、KSM SDKのドキュメントをご参照ください。
最終更新

