Google Cloud Key Managementでの暗号化
シークレットマネージャーの接続情報をGoogle Cloud Key Managementで保護

KeeperシークレットマネージャーはGoogle Cloud Key Managementと連携し、Keeperシークレットマネージャーの構成ファイルを暗号化できるようにします。この連携により、マシン上の接続情報を保護しながら、すべてのシークレット認証情報に対するKeeperのゼロ知識暗号化の利点を活用できます。
機能
Google Cloud Key Managementを使って、Keeperシークレットマネージャーの構成ファイルを暗号化および復号化します。
シークレットマネージャーの接続情報への不正アクセスを防止します。
保護のためにコードに加える変更は最小限で済みます。すべてのKeeperシークレットマネージャーSDK機能で動作します。
要件
Keeper SecurityとGoogle Cloud Key Managementを連携するには、
.jsonで終わるサービスアカウントキーが必要です。この連携で利用できるキーの構造は以下の形式です。
projects/<project_name>/locations/<location_name>/keyRings/<key_ring_name>/cryptoKeys/<key_name>/cryptoKeyVersions/<key_version>
Java/Kotlin版シークレットマネージャーSDKに対応
GCPパッケージ
google-cloud-kmsが必要GCP KMSキーに
ENCRYPTおよびDECRYPTの権限が必要
@google-cloud/kmsはバンドル済みのため、別途インストールは不要ですGCP KMSキーにはサービスアカウントに対して以下のIAM権限が必要です
Cloud KMS CryptoKey Encrypter
Cloud KMS CryptoKey Decrypter
Cloud KMS CryptoKey Public Key Viewer (非対称鍵に必要)
注: v1.1.0以降はPython 3.9以降が必要です。Python 3.6~3.8を使用している場合は、
keeper-secrets-manager-storage-gcp-kms<1.1.0にバージョンを固定してください。
google-cloud-kmsパッケージが必要以下のIAM権限が必要です
Cloud KMS CryptoKey Encrypter
Cloud KMS CryptoKey Decrypter
Cloud KMS CryptoKey Public Key Viewer
Cloud KMS Viewer (
cloudkms.cryptoKeys.get。初期化時のキー参照に必要)
GCP KMSキーに
ENCRYPTおよびDECRYPTの権限が必要
セットアップ
1. モジュールのインストール
GradleまたはMavenを使用してプロジェクトをセットアップ
Gradle
Maven
npmを使用してシークレットマネージャーとGoogle Cloud Key Managementモジュール統合をインストールします。
シークレットマネージャーGoogle Cloud Key Managementモジュールは、pipを使用してインストールできます。
シークレットマネージャーのGoogle Cloud Key Managementモジュールは、.NETのNuGetパッケージマネージャーを使用してインストールできます。
シークレットマネージャーのGoogle Cloud Key Managementモジュール統合は、以下を使用してインストールできます。
2. Google CKM接続を構成
Google Cloud Platform (GCP) で安全に認証を行うには、JSON形式のサービスアカウントキーを作成します。この認証情報ファイルは、GCPのサービスとプログラム経由でやり取りする際の認証手段として使用されます。
Python v1.1.0以降: サービスアカウントには、Encrypter/Decrypterロールに加えて Cloud KMS Viewer IAMロール (cloudkms.cryptoKeys.get) が必要です。これがない場合、GCPKeyValueStorage は初期化時に権限エラーを返します。必要なロールの一覧は、Pythonの要件タブをご参照ください。
キーの生成の詳細については、Googleのドキュメントをご参照ください。
3. コードにGCPキーボルトストレージを追加
GCP接続の設定が完了したら、統合機能を使ってKSM構成を暗号化および復号化するためのキーを取得できます。また、シークレットマネージャーSDKに、KMSをストレージとして使用するよう指示する必要があります。
GCPキーボルト統合の使用
セットアップが完了すると、シークレットマネージャーのGCPキー・ボールト統合は、シークレットマネージャーSDKのすべての機能に対応します。KSM構成ファイルを暗号化・復号化するには、コードからGCPのCKMキーへアクセスできる必要があります。
指定した接続認証情報の使用
この操作を行うには、GcpKeyValueStorage インスタンスを作成し、それを SecretManagerOptions のコンストラクタに渡します。
GcpKeyValueStorage には、シークレットマネージャーの構成ファイル名、GCP認証情報ファイル、およびCloud Key Managementのキー情報が必要です。
この操作を行うには、SecretsManager のコンストラクタで GCPKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、keyConfig、GCPKSMClient によって生成される gcpsessionConfig、およびGCP Cloud Key Managementで暗号化されるシークレットマネージャー構成ファイル名が必要です。
この操作を行うには、SecretsManager のコンストラクタで GCPKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、GCPKeyConfig によって生成される gcp_key_config、GCPKMSClientConfig によって生成される gcp_session_config オブジェクト、GCP Cloud Key Managementによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、SecretsManager のコンストラクタで GCPKeyValueStorage をシークレットマネージャーのストレージとして使用します。
このストレージには、GCPKeyConfigによって生成される keyConfig、GCPKMSClient によって生成される gcpSessionConfig オブジェクト、そしてGCP Cloud Key Managementによって暗号化されるシークレットマネージャー構成ファイルの名前が必要です。
この操作を行うには、NewSecretsManager で NewGCPKeyVaultStorage をシークレットマネージャーのストレージとして使用します。
NewGCPKeyVaultStorage は、GCP Cloud Key Management を使用してKSM構成を暗号化するために、以下のパラメータを必要とします。
ksmConfigFileName: KSM構成ファイルのファイル名keyResourceName: Google Cloud Key ManagementのkeyResourceNameを指定credentialFileWithPath: GCP認証情報ファイルのパスとファイル名を指定
アプリケーション既定認証情報の利用
gcloud auth application-default login、GOOGLE_APPLICATION_CREDENTIALS 環境変数の設定、またはサービスアカウントがアタッチされたGCPコンピュートインスタンス上で実行している場合は、認証情報ファイルを省略できます。
または、サービスアカウントのメールと秘密鍵をファイルなしで直接渡します。
gcloud auth application-default login、GOOGLE_APPLICATION_CREDENTIALS 環境変数の設定、またはサービスアカウントがアタッチされたGCPコンピュートインスタンス上で実行している場合は、認証情報ファイルを省略できます。
ADC + RAW_ENCRYPT_DECRYPT の制限: ADCは RAW_ENCRYPT_DECRYPT キータイプでは使用できません。raw KMS APIパスには、既定クライアントが公開しないOAuthトークンが必要です。raw対称鍵には create_client_from_credentials_file() または create_client_using_credentials() を使用してください。
または、サービスアカウントのメールと秘密鍵をファイルなしで直接渡します。
追加オプション
キーの変更
KSM構成の暗号化に使用するキーは変更可能です。以下の例では、そのキーを使用するために必要なコードを示しています。
構成を復号化する
現在の実装を別のクラウドに移行する場合や、生の認証情報を取り出したい場合は、構成ファイルを復号化できます。この関数はブール値を受け取り、true に設定すると復号された構成をファイルに保存し、false の場合は復号された構成を返すだけになります。
v1.1.0の変更: 引数なしで呼び出した decrypt_config() は、既定で autosave=False になります (平文のみを返し、ディスクには書き込みません)。v1.0.xでは既定が True で、暗号化済み構成ファイルが平文の認証情報で上書きされていました。引数は常に明示的に指定してください。
KSM統合機能を使用する準備ができました。
その他の例と機能については、KSM SDKのドキュメントをご参照ください。
最終更新

