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

AWS KMSでの暗号化

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

KeeperシークレットマネージャーをAWS KMSと組み合わせると、構成ファイルを暗号化できます。マシン上の接続情報を保護しつつ、ボルト内のシークレットについてもKeeperのゼロ知識暗号化を利用できます。

comment-question

AWS Secrets Managerをバックエンドとするストレージについて

AWS Secrets Managerストレージをご参照ください。この連携ではKSM構成をAWS Secrets Managerのシークレット内に保持し、ローカルファイルは不要です。2つのAWS連携は目的が異なり、使用するAWSサービスも異なります。運用に合った方を選択してください。

機能

  • AWS KMSを使い、Keeperシークレットマネージャーの構成ファイルを暗号化・復号化する

  • シークレットマネージャー接続情報への不正アクセスを防ぐ

  • わずかなコード変更で保護を有効化でき、すべてのKeeperシークレットマネージャーSDKの機能をそのまま利用できる

要件

セットアップ

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によって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。

comment-question

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 では復号した構成の内容だけを返します。

pencil-line

v1.1.0では、decrypt_config() のデフォルトは autosave=False になりました。以前のデフォルトは True であり、暗号化された構成ファイルを平文で上書きしていました。ディスクに保存する場合は、明示的に autosave=True を指定してください。

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

最終更新