Google Cloud では、デフォルトで、Google が管理する暗号鍵を使用して、自動的に保存されているデータを暗号化します。データを保護する鍵について特定のコンプライアンスや規制の要件がある場合は、Dataform リポジトリで顧客管理の暗号鍵(CMEK)を使用できます。
このガイドでは、Dataform で CMEK を使用する方法と、Dataform リポジトリの CMEK 暗号化を有効にする方法について説明します。
CMEK 全般について詳しくは、CMEK のドキュメントをご覧ください。
リポジトリ データの CMEK 暗号化
CMEK 暗号化を Dataform リポジトリに適用すると、そのリポジトリ内の Dataform が管理するすべての顧客データが、リポジトリに設定された CMEK 保護キーを使用して保存時に暗号化されます。このデータには次のものが含まれます。
- Dataform リポジトリとそのワークスペースの Git リポジトリ コンテンツ
- コンパイルされた SQL クエリとコンパイル エラー
- ワークフロー アクションの保存された SQL クエリ
- 実行されたワークフロー アクションのエラーの詳細
Dataform は、次のシナリオで CMEK 保護鍵を使用します。
- 保存されている顧客データの復号を必要とするすべてのオペレーション時。このようなオペレーションとしては次のものがありますが、これに限定されるものではありません。
- ユーザークエリに対する回答(例:
compilationResults.query
)。 - 以前に作成された暗号化されたリポジトリ データ(ワークフロー呼び出しなど)を必要とする Dataform リソースの作成。
- リモート リポジトリを更新する Git オペレーション(Git commit の push など)。
- ユーザークエリに対する回答(例:
- 顧客データを保存する必要のあるすべてのオペレーション時。このようなオペレーションとしては次のものがありますが、これに限定されるものではありません。
- ユーザークエリに対するレスポンス(例:
compilationResults.create
)。 - ワークスペースに対する Git オペレーション(Git commit の pull など)。
- ユーザークエリに対するレスポンス(例:
Dataform は、Dataform リソースにのみ関連付けられた顧客データの暗号化を管理します。Dataform では、Dataform ワークフローの実行によって BigQuery で作成された顧客データの暗号化が管理されることはありません。BigQuery で作成して保存するデータを暗号化するには、BigQuery 用に CMEK を構成します。
サポートされているキー
Dataform は、次のタイプの CMEK 鍵をサポートしています。
鍵の可用性は鍵のタイプとリージョンによって異なります。CMEK 鍵の地域ごとの可用性については、Cloud KMS のロケーションをご覧ください。
制限事項
Dataform は、次の制限付きで CMEK をサポートしています。
- CMEK で暗号化されたリポジトリの最大サイズは 512 MB です。
- リポジトリの作成後に CMEK 保護キーをリポジトリに適用することはできません。CMEK 暗号化は、リポジトリの作成時にのみ適用できます。
- リポジトリから CMEK 保護鍵を削除することはできません。
- リポジトリの CMEK 保護鍵は変更できません。
- Google Cloud プロジェクトにデフォルトの Dataform CMEK 鍵を設定する場合、Google Cloud プロジェクトのロケーションに作成されるすべての新しいリポジトリは CMEK で暗号化する必要があります。Google Cloud プロジェクトのロケーションに新しいリポジトリを作成する場合は、デフォルトの Dataform CMEK 鍵または別の CMEK 鍵を適用できますが、デフォルトの保存データの暗号化を適用することはできません。
- デフォルトの Dataform CMEK 鍵の値を変更すると、以前の値が既存のリポジトリに適用され、更新された値が変更後に作成されたリポジトリに適用されます。
- Google Cloud プロジェクト リポジトリのロケーションごとに、デフォルトの Dataform CMEK 鍵を 1 つだけ設定できます。
- CMEK の組織のポリシーは使用できません。
- Cloud HSM 鍵と Cloud EKM 鍵の使用には、可用性が影響します。ロケーション間でのキーの可用性の詳細については、Cloud KMS のロケーションをご覧ください。
Cloud KMS の割り当てと Dataform
Dataform では、Cloud HSM 鍵と Cloud EKM 鍵を使用できます。Dataform で CMEK を使用する場合は、プロジェクトで Cloud KMS 暗号リクエストの割り当てを消費できます。たとえば、CMEK で暗号化された Dataform リポジトリでは、リポジトリのコンテンツが変更されるたびに、これらの割り当てを消費できます。CMEK 鍵を使用する暗号化と復号の処理は、ハードウェア(Cloud HSM)鍵または外部(Cloud EKM)鍵を使用する場合にのみ、Cloud KMS の割り当てに影響します。詳細については、Cloud KMS の割り当てをご覧ください。
鍵を管理する
すべての鍵管理オペレーションに Cloud KMS を使用します。Dataform は、Cloud KMS に伝播されるまで、鍵の変更の検出や操作はできません。鍵の無効化や破棄などのオペレーションでは、その伝播に最大 3 時間かかることがあります。通常、権限の変更ははるかに速く反映されます。
リポジトリの作成後、Dataform は Cloud KMS を呼び出して、暗号化されたリポジトリ データに対する各オペレーションで鍵が有効であることを確認します。
Cloud KMS 鍵が無効化または破棄されたことを Dataform が検出すると、対応するリポジトリに保存されているすべてのデータにアクセスできなくなります。
Dataform による Cloud KMS に対する呼び出しで、以前に無効にした鍵の再有効化が検出されると、Dataform は自動的にアクセスを復元します。
Cloud EKM で外部鍵を使用する
Cloud KMS に存在する鍵を使用する代わりに、サポートされている外部鍵管理パートナーに存在する鍵を使用できます。これを行うには、Cloud External Key Manager(Cloud EKM)を使用して、Google Cloud の外部にある鍵へのポインタである外部鍵を作成して管理します。詳細については、Cloud External Key Manager をご覧ください。
Cloud EKM で外部鍵を作成したら、リポジトリの作成時にその鍵の ID を指定して、新しい Dataform リポジトリに適用できます。この手順は、新しいリポジトリに Cloud KMS 鍵を適用する場合と同じです。
Dataform のデフォルトの CMEK 鍵を使用する
複数の Dataform リポジトリを同じ CMEK 鍵で暗号化するには、Google Cloud プロジェクトにデフォルトの Dataform CMEK 鍵を設定します。デフォルトの Dataform CMEK キーの Google Cloud プロジェクトのロケーションを指定する必要があります。デフォルトの CMEK キーは、Google Cloud プロジェクトごとに 1 つだけ設定できます。
デフォルトの Dataform CMEK 鍵を設定すると、Dataform はデフォルトで Google Cloud プロジェクトのロケーションに作成されたすべての新しいリポジトリに鍵を適用します。リポジトリを作成するときに、デフォルトの鍵を使用するか、別の CMEK 鍵を選択できます。
使用できない鍵のステータスの処理方法
Dataform が使用できない場合のようなまれなケースで、Spanner が Cloud KMS から鍵のステータスを取得できないことがあります。
Dataform が Cloud KMS と通信不能となった時点で無効な鍵により Dataform リポジトリが保護されている場合、暗号化されたリポジトリ データにアクセスできなくなります。
暗号化されたリポジトリ データは、Dataform が Cloud KMS に再接続でき、鍵がアクティブであるという応答を Cloud KMS が返すまで、アクセス不能になります。
逆に、Dataform が最初に Cloud KMS と通信不能となった時点で無効な鍵により Dataform リポジトリが保護されている場合、暗号化されたリポジトリ データが Cloud KMS に再接続可能になり鍵を再有効化するまで、暗号化されたリポジトリ データはアクセス不能になります。
ロギング
プロジェクトで Cloud KMS API の監査ロギングを有効にしている場合は、Cloud Logging で Dataform が Cloud KMS に送信するリクエストを監査できます。Cloud Logging にこれらの Cloud KMS ログエントリが表示されます。 詳細については、ログを表示するをご覧ください。
始める前に
Dataform と Cloud KMS を別のプロジェクトで実行するか、同じプロジェクトで実行するかを決定します。権限をより細かく制御するために、別のプロジェクトを使用することをおすすめします。Google Cloud プロジェクト ID とプロジェクト番号については、プロジェクトの識別をご覧ください。
Cloud KMS を実行する Google Cloud プロジェクトでは、以下の操作を行います。
- Cloud Key Management Service API を有効にします。
- キーリングと鍵の作成の説明に沿って、キーリングと鍵を作成します。キーリングは、Dataform リポジトリのロケーションと一致するロケーションに作成します。
-
リポジトリでは、一致するリージョンの鍵を使用する必要があります。たとえば、リージョン
asia-northeast3
のリポジトリは、asia-northeast3
にあるキーリングの鍵で保護する必要があります。 -
global
リージョンは Dataform では使用できません。
-
リポジトリでは、一致するリージョンの鍵を使用する必要があります。たとえば、リージョン
CMEK を有効にする
Cloud KMS 暗号鍵の暗号化/復号(roles/cloudkms.cryptoKeyEncrypterDecrypter
)ロールをデフォルト Dataform サービス アカウントに付与すると、Dataform がユーザーに代わって鍵にアクセスできます。
デフォルトの Dataform サービス アカウント ID の形式は次のとおりです。
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
デフォルトの Dataform サービス アカウントに暗号鍵の暗号化 / 復号化のロールを付与する手順は次のとおりです。
コンソール
Google Cloud コンソールで [鍵の管理] ページを開きます。
鍵を含むキーリングの名前をクリックします。
ロールを追加する暗号鍵のチェックボックスをクリックします。[権限] タブが開きます。
[メンバーを追加] をクリックします。
サービス アカウントのメールアドレスを入力します。
- このサービス アカウントがすでにメンバーリストに含まれている場合、サービス アカウントには既存の役割があります。サービス アカウントの現在のロールのプルダウン リストをクリックします。
[ロールを選択] プルダウン リストをクリックし、[Cloud KMS] をクリックして、[Cloud KMS 暗号鍵の暗号化 / 復号] ロールをクリックします。
[保存] をクリックして、サービス アカウントにロールを適用します。
gcloud
ロールの割り当てには、Google Cloud CLI を使用できます。
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
以下を置き換えます。
KMS_PROJECT_ID
: Cloud KMS を実行している Google Cloud プロジェクトの IDSERVICE_ACCOUNT
: デフォルトの Dataform サービス アカウントのメールアドレスKMS_KEY_LOCATION
: Cloud KMS 鍵のロケーション名KMS_KEY_RING
: Cloud KMS 鍵のキーリング名KMS_KEY
: Cloud KMS 鍵の名前。
デフォルトの Dataform CMEK 鍵を設定する
Google Cloud プロジェクトにデフォルトの Dataform CMEK 鍵を設定すると、同じ CMEK 鍵で複数のリポジトリを暗号化できます。詳細については、Dataform リポジトリにデフォルトのキーを使用するをご覧ください。
デフォルトの CMEK 鍵を設定または編集するには、次のリクエストで Dataform API を呼び出します。
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
以下を置き換えます。
- KMS_KEY_RING: Cloud KMS 鍵のキーリング名
- KMS_KEY: Cloud KMS 鍵の名前。
- PROJECT_ID: Google Cloud プロジェクトの ID。
- PROJECT_LOCATION: Google Cloud プロジェクトのロケーション名。
デフォルトの Dataform CMEK 鍵を削除する
Google Cloud プロジェクトからデフォルトの Dataform CMEK 鍵を削除するには、次のリクエストで Dataform API を呼び出します。
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
以下を置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID。
- PROJECT_LOCATION: デフォルトの CMEK の設定を解除する Google Cloud プロジェクトのロケーション名。
デフォルトの Dataform CMEK 鍵が設定されているかどうかを確認する
Google Cloud プロジェクトにデフォルトの Dataform CMEK キーが設定されているかどうかを確認するには、次のリクエストで Dataform API を呼び出します。
curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
以下を置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID。
- PROJECT_LOCATION: Google Cloud プロジェクトのロケーション名。
リポジトリに CMEK を適用する
CMEK 保護は、リポジトリの作成時に Dataform リポジトリに適用できます。
Dataform リポジトリに CMEK 暗号化を適用するには、デフォルトの Dataform CMEK 鍵による暗号化を選択するか、リポジトリを作成するときに一意の Cloud KMS 鍵を指定します。手順については、リポジトリを作成するをご覧ください。
リポジトリの作成後に Dataform リポジトリの暗号化メカニズムを変更することはできません。
詳細については、制限事項をご覧ください。
次のステップ
- CMEK について詳しくは、CMEK の概要をご覧ください。
- Cloud KMS の割り当ての詳細については、Cloud KMS の割り当てをご覧ください。
- Cloud KMS の料金については、Cloud KMS の料金をご覧ください。
- Dataform リポジトリの詳細については、リポジトリの概要をご覧ください。