暗号鍵でデータを保護する

このページでは、AlloyDB for PostgreSQL の顧客管理の暗号鍵(CMEK)を作成、構成、適用する方法について説明します。

CMEK の詳細については、CMEK についてをご覧ください。

AlloyDB の CMEK 鍵を作成して承認する

  1. Cloud Key Management Service(Cloud KMS)で鍵を作成します。AlloyDB は、次の種類の鍵をサポートしています。

    鍵は AlloyDB クラスタと同じロケーションにあることが必要です。たとえば、us-west1 にある AlloyDB クラスタは、us-west1 にある鍵のみを使用できます。

    すでに適切な場所に Cloud KMS 鍵を配置している場合は、この手順をスキップできます。

  2. AlloyDB に鍵へのアクセス権を付与します。

    1. Google Cloud CLI を使用して、サービス エージェントを作成して表示します。アカウントがすでに存在する場合は、それを表示します。
        gcloud beta services identity create --service=alloydb.googleapis.com \
            --project=PROJECT

    gcloud services identity コマンドは、ユーザーに代わって AlloyDB が Cloud KMS 鍵にアクセスする際に使用するサービス エージェントを作成または取得します。

    サービス アカウント ID はメールアドレスに似ています。

        Service identity created: service-xxx@gcp-sa-alloydb.iam.gserviceaccount.com
    
    1. サービス アカウントに 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 鍵バージョンを使用して既存のクラスタを再暗号化するには、次のように、バックアップと復元のオペレーションを実行する必要があります。

  1. 既存のクラスタのバックアップを作成します。

  2. 復元プロセスで新しい 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 時間かかることがあります。データへのアクセスをすぐに防止しつつ鍵を無効にするには、次の操作を行います。

  1. クラスタのプライマリ インスタンスを削除します。これはクラスタのデータには影響しません。次のセクションで説明するように、鍵を再度有効にした後に新しいプライマリ インスタンスを作成できます。

  2. Cloud KMS を使用して鍵を無効にします。

鍵を有効にする

鍵を有効にする手順は次のとおりです。

  1. Cloud KMS を使用して鍵を有効にします

  2. 鍵を無効にする前にクラスタのプライマリ インスタンスを削除した場合は、新しいプライマリ インスタンスを作成します。

鍵を有効にしてクラスタに伝播されるまでに、最長で 3 時間かかることがあります。この伝播が行われるとすぐに、クラスタのデータにアクセスできるようになります。

Cloud KMS 鍵の監査ログを表示する

特定の CMEK 鍵に関連付けられた監査ログを表示する手順は次のとおりです。

  1. プロジェクト内の Cloud KMS API でロギングが有効になっていることを確認します。

  2. Google Cloud コンソールで [ログ エクスプローラ] に移動します。

    ログ エクスプローラに移動

  3. クエリビルダーに次の行を追加して、ログエントリを 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
  4. 通常のオペレーションでは、暗号化と復号のオペレーションは INFO 重大度でログに記録されます。これらのエントリは、AlloyDB クラスタ内のインスタンスが Cloud KMS 鍵を検証するときにログに記録されます。この検証は約 5 分ごとに行われます。

  5. AlloyDB が鍵へのアクセスに失敗すると、そのオペレーションは ERROR としてログに記録されます。

Cloud EKM 鍵に対するアクセスの理由を表示する

Cloud EKM 鍵を使用している場合は、Key Access Justifications を使用して、各 Cloud EKM リクエストの理由を確認できます。さらに、示された理由に基づいて、リクエストを自動的に承認または拒否できます。詳しくは、理由の表示と対処をご覧ください。