このページでは、AlloyDB for PostgreSQL の顧客管理の暗号鍵(CMEK)を作成、構成、適用する方法について説明します。
CMEK の詳細については、CMEK についてをご覧ください。
AlloyDB の CMEK 鍵を作成して承認する
Cloud Key Management Service(Cloud KMS)で鍵を作成します。AlloyDB は、次の種類の鍵をサポートしています。
鍵は AlloyDB クラスタと同じロケーションにあることが必要です。たとえば、
us-west1にある AlloyDB クラスタは、us-west1にある鍵のみを使用できます。すでに適切な場所に Cloud KMS 鍵を配置している場合は、この手順をスキップできます。
AlloyDB に鍵へのアクセス権を付与します。
- Google Cloud CLI を使用して、サービス エージェントを作成して表示します。アカウントがすでに存在する場合は、それを表示します。
gcloud beta services identity create --service=alloydb.googleapis.com \ --project=PROJECTgcloud services identity コマンドは、ユーザーに代わって AlloyDB が Cloud KMS 鍵にアクセスする際に使用するサービス エージェントを作成または取得します。
サービス アカウント ID はメールアドレスに似ています。
Service identity created: service-xxx@gcp-sa-alloydb.iam.gserviceaccount.com- サービス アカウントに
cloudkms.cryptoKeyEncrypterDecrypterロールを付与します。
gcloud kms keys add-iam-policy-binding KEY \ --location REGION \ --keyring KEYRING \ --project=PROJECT \ --member serviceAccount:service-xxx@gcp-sa-alloydb.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter次のように置き換えます。
- KEY: 鍵の Cloud KMS ID
- REGION: 鍵のリージョン(例:
us-central1) - PROJECT: 鍵のプロジェクトの ID。
- KEYRING: 鍵の Cloud KMS キーリングの ID
このロールにより、この Cloud KMS 鍵を使用して暗号化と復号を行う権限がサービス アカウントに付与されます。詳細については、Cloud KMS の権限とロールをご覧ください。
CMEK で暗号化されたクラスタを作成する
新しいクラスタを作成するときに、クラスタの暗号化にデフォルトの Google 管理の暗号化を使用するか、代わりに CMEK 鍵を使用するかを選択できます。詳細については、クラスタとそのプライマリ インスタンスを作成するをご覧ください。
クラスタの暗号化方法と CMEK 鍵を表示する
コンソール
[クラスタ] ページの [暗号化] 列には、プロジェクト内の各クラスタが Google 管理の暗号化と CMEK のどちらを使用しているかが表示されます。
CMEK を使用しているクラスタの鍵の詳細を表示するには、[リソース名] 列で鍵の名前をクリックします。詳細ページが表示され、[暗号鍵] フィールドに鍵の説明(独自の Cloud KMS 詳細ページへのリンクを含む)が示されます。
gcloud
gcloud alloydb clusters
describe コマンドを呼び出します。
gcloud alloydb clusters describe CLUSTER \
--project=PROJECT \
--region=REGION次のように置き換えます。
- CLUSTER: 説明するクラスタの ID
- PROJECT: クラスタのプロジェクトの ID
- REGION: クラスタのリージョン(
us-central1など)
出力に含まれている encryptionInfo フィールドに、クラスタの暗号化の概要が表示されます。
バックアップに CMEK を適用する
新しいバックアップを作成するときに、暗号化にデフォルトの Google 管理の暗号化を使用するか、それとも CMEK 鍵を使用するかを選択できます。詳細については、オンデマンド バックアップを作成する、または自動バックアップのスケジュールを設定するをご覧ください。
また、バックアップからの復元時に作成されたクラスタに、バックアップの暗号化方法に関係なく CMEK 鍵を適用することもできます。詳細については、クラスタを復元するをご覧ください。
CMEK 暗号化を使用して鍵をローテーションする
AlloyDB クラスタで顧客管理の暗号鍵(CMEK)を使用する場合は、Cloud Key Management Service(Cloud KMS)で CMEK をローテーションすることによる影響を理解しておくことが重要です。
CMEK 鍵をローテーションすると、既存の AlloyDB データには次のような影響があります。
継続して即時アクセスできる: 以前のバージョンの鍵が KMS で引き続き使用可能で、無効化も削除もされていない限り、データは元のデータ暗号鍵(DEK)バージョンで暗号化されたままになります。
データの完全な再暗号化は手動で行う: AlloyDB のすべてのデータを最新の主キーのバージョンで取得するには、再暗号化する必要があります。
新しい CMEK 鍵バージョンを使用して既存のクラスタを再暗号化するには、次のように、バックアップと復元のオペレーションを実行する必要があります。
既存のクラスタのバックアップを作成します。
復元プロセスで新しい CMEK 主キーのバージョンを指定して、バックアップを新しいクラスタに復元します。
詳細については、クラスタの復元をご覧ください。
AlloyDB で CMEK 鍵を頻繁にローテーションすると、かなりの運用オーバーヘッドが発生します。既存のデータは自動的に再暗号化されず、手動で再暗号化するためにフル バックアップと新しいクラスタへの復元が必要になるため、頻繁にローテーションする作業は煩雑になり、可用性や管理の複雑さに影響する可能性があります。
Cloud KMS で古い CMEK 鍵バージョンを安全に削除できるのは、関連するすべての AlloyDB データを手動で再暗号化し、データで新しい鍵バージョンが使用されていることを確認した後のみです。
バックアップの暗号化方法と CMEK 鍵を表示する
コンソール
[バックアップ] ページの [暗号化] 列には、プロジェクト内の各クラスタが Google 管理の暗号化と CMEK のどちらを使用しているかが表示されます。
CMEK を使用したバックアップの鍵の詳細を確認するには、[復元] をクリックします。詳細パネルの [暗号鍵] フィールドに、鍵の説明(独自の Cloud KMS 詳細ページへのリンクを含む)が表示されます。
gcloud
gcloud alloydb backups describe コマンドを呼び出します。
gcloud alloydb backups describe CLUSTER \
--project=PROJECT \
--region=REGION次のように置き換えます。
- CLUSTER: 説明するバックアップの ID
- PROJECT: バックアップのプロジェクトの ID
- REGION: バックアップのリージョン(例:
us-central1)
出力に含まれている encryptionInfo フィールドに、バックアップの暗号化の概要が表示されます。
鍵を無効にする
クラスタの CMEK 鍵を無効にすると、鍵を再度有効にするまで、そのクラスタのデータにアクセスできなくなります。
ただし、鍵を無効にすると、AlloyDB クラスタに伝播されるまでに最長で 3 時間かかることがあります。データへのアクセスをすぐに防止しつつ鍵を無効にするには、次の操作を行います。
クラスタのプライマリ インスタンスを削除します。これはクラスタのデータには影響しません。次のセクションで説明するように、鍵を再度有効にした後に新しいプライマリ インスタンスを作成できます。
鍵を有効にする
鍵を有効にする手順は次のとおりです。
鍵を無効にする前にクラスタのプライマリ インスタンスを削除した場合は、新しいプライマリ インスタンスを作成します。
鍵を有効にしてクラスタに伝播されるまでに、最長で 3 時間かかることがあります。この伝播が行われるとすぐに、クラスタのデータにアクセスできるようになります。
Cloud KMS 鍵の監査ログを表示する
特定の CMEK 鍵に関連付けられた監査ログを表示する手順は次のとおりです。
プロジェクト内の Cloud KMS API でロギングが有効になっていることを確認します。
Google Cloud コンソールで [ログ エクスプローラ] に移動します。
クエリビルダーに次の行を追加して、ログエントリを Cloud KMS 鍵に限定します。
resource.type="cloudkms_cryptokey" resource.labels.location="REGION" resource.labels.key_ring_id="KEYRING" resource.labels.crypto_key_id="KEY"次のように置き換えます。
- REGION: 鍵のリージョン(例:
us-central1) - KEYRING: 鍵の Cloud KMS キーリングの ID
- KEY: 鍵の Cloud KMS ID
- REGION: 鍵のリージョン(例:
通常のオペレーションでは、暗号化と復号のオペレーションは
INFO重大度でログに記録されます。これらのエントリは、AlloyDB クラスタ内のインスタンスが Cloud KMS 鍵を検証するときにログに記録されます。この検証は約 5 分ごとに行われます。AlloyDB が鍵へのアクセスに失敗すると、そのオペレーションは
ERRORとしてログに記録されます。
Cloud EKM 鍵に対するアクセスの理由を表示する
Cloud EKM 鍵を使用している場合は、Key Access Justifications を使用して、各 Cloud EKM リクエストの理由を確認できます。さらに、示された理由に基づいて、リクエストを自動的に承認または拒否できます。詳しくは、理由の表示と対処をご覧ください。