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 保護キーをリポジトリに適用することはできません。CMEK 暗号化は、リポジトリの作成時にのみ適用できます。
- リポジトリから CMEK 保護鍵を削除することはできません。
- リポジトリの CMEK 保護鍵を変更することはできません。
- CMEK の組織のポリシーは使用できません。
- Cloud HSM 鍵の使用は、可用性に応じて異なります。ロケーション間で鍵を使用できるかどうかについては、Cloud KMS のロケーションをご覧ください。
Cloud KMS の割り当てと Dataform
Dataform で Cloud HSM 鍵を使用できます。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 は自動的にアクセスを復元します。
使用できない鍵のステータスの処理方法
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 鍵の名前。
リポジトリに CMEK を適用する
リポジトリの作成時に、Dataform リポジトリに CMEK 保護を適用できます。
Dataform リポジトリに CMEK 暗号化を適用するには、リポジトリの作成時に Cloud KMS 鍵を指定します。手順については、リポジトリを作成するをご覧ください。
リポジトリの作成後に Dataform リポジトリの暗号化メカニズムを変更することはできません。
詳細については、制限事項をご覧ください。
次のステップ
- CMEK について詳しくは、CMEK の概要をご覧ください。
- Cloud KMS の割り当ての詳細については、Cloud KMS の割り当てをご覧ください。
- Cloud KMS の料金については、Cloud KMS の料金をご覧ください。
- Dataform リポジトリの詳細については、リポジトリの概要をご覧ください。