顧客管理の暗号鍵を使用する

デフォルトでは、Workflows は静止状態で保存されたデータを暗号化します。Google Cloud はこのデフォルトの暗号化を自動で処理して管理するので、ユーザーが操作する必要はありません。

データを保護する鍵について特定のコンプライアンスや規制の要件がある場合は、Workflows に顧客管理の暗号鍵(CMEK)を使用できます。ワークフローと関連する保存データは、本人だけがアクセスでき、Cloud Key Management Service(Cloud KMS)で制御と管理ができる暗号鍵を使用して保護されます。

CMEK による保護対象

ワークフローをデプロイするときに、Cloud KMS 鍵を指定できます。この鍵は、ワークフローとその実行を暗号化するために使用されます。

  • ワークフローには、有効なワークフロー定義を含むソースファイルが必要です。このソースファイルは鍵を使用して暗号化されます。

  • ワークフロー実行は、現在のワークフロー定義(特定のワークフロー リビジョン)を実行します。デプロイ時のワークフロー リビジョンに関連付けられた鍵を使用して、コンパイルされたワークフローと保存された実行の入力、出力、実行時データが暗号化されます。これには、実行引数、結果、エラー、例外、配信された Eventarc イベント、コールバック、HTTP のリクエストとレスポンスが含まれます。

始める前に

Workflows で CMEK を使用する前に、次の手順を行います。

  1. API を有効にします。

    コンソール

    1. Cloud KMS and Workflows API を有効にします。

      API を有効にする

    gcloud

    1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    2. gcloud コンポーネントを更新します。
      gcloud components update
      
    3. 暗号鍵を格納するプロジェクトで Cloud KMS API と Workflows API を有効にします。
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
      
  2. 鍵の有効化または無効化を行うと、Cloud KMS により Cloud Audit Logs が生成されます。このログは、データの暗号化または復号で Workflows リソースが鍵を使用したときにも生成されます。プロジェクト内の Cloud KMS API でロギングが有効になっていることと、ユースケースに適用されるロギング固有の権限とロールを決定していることを確認します。詳細については、Cloud KMS 監査ロギングの情報をご覧ください。

Cloud KMS キーリングと鍵を作成する

キーリングは新しく作成するか、既存のものを使用できます。キーリング内では、新しい鍵を追加することも、既存の鍵を使用することも可能です。

  1. キーリングを作成します

  2. 指定したキーリングの鍵を作成します

Cloud KMS 鍵のリソース ID を取得する

ワークフローで CMEK を有効にする場合は、Cloud KMS 鍵のリソース ID が必要です。このドキュメントの ワークフローで CMEK を有効にするをご覧ください。

コンソール

  1. Google Cloud コンソールで [鍵管理] ページに移動します。

    Key Management に移動

  2. 鍵を含むキーリングをクリックします。

  3. リソース ID を取得したい鍵について、[ その他] をクリックします。

  4. [リソース名をコピー] をクリックします。

    鍵のリソース ID がクリップボードにコピーされます。形式は次のようになります。

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    
  5. 鍵には、0 個以上の鍵バージョンが含まれています。鍵バージョンのリソース ID は、鍵 ID とスラッシュ(/)、およびバージョン ID です。鍵のすべてのバージョンを一覧表示するには:

    1. 鍵の名前をクリックします。
    2. 特定のバージョンの場合は、[ その他] をクリックします。
    3. [リソース名をコピー] をクリックします。

gcloud

  1. 指定した鍵リングのすべての鍵を一覧表示します。

    gcloud kms keys list --keyring RING_NAME --location LOCATION
    

    以下を置き換えます。

    • RING_NAME: キーリングの名前
    • LOCATION: キーリングのリージョン

    出力には、各鍵のリソース ID が含まれます。例:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
  2. 鍵には、0 個以上の鍵バージョンがあります。鍵バージョンのリソース ID は、鍵 ID とスラッシュ(/)、およびバージョン ID です。鍵のすべてのバージョンを一覧表示します。

    gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
    

    出力には、各鍵バージョンのリソース ID が含まれます。例:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
    

Workflows サービス エージェントに鍵へのアクセス権を付与する

Workflows サービス エージェントが Cloud KMS 鍵にアクセス権できるように、Cloud KMS CryptoKey Encrypter/Decrypter の Identity and Access Management(IAM)ロールを付与しておく必要があります。

コンソール

コンソールでワークフローの CMEK を有効にすると、サービス アカウントに Cloud KMS CryptoKey Encrypter/Decrypter ロールを付与するように求められます。詳細については、このドキュメントのワークフローの CMEK を有効にするをご覧ください。

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring RING_NAME \
    --location LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

次のように置き換えます。

  • KEY_NAME: 鍵の名前。例: my-key
  • RING_NAME: キーリングの名前。例: my-keyring
  • LOCATION: 鍵のロケーション。例: us-central1
  • PROJECT_NUMBER: Google Cloud プロジェクト番号。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud projects describe ${PROJECT} --format="value(projectNumber)"
    

サービス エージェントに roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがあれば、プロジェクト内のワークフローで CMEK 鍵を使用してデータを暗号化および復号できます。ロールの取り消しや、CMEK 鍵の無効化や破棄をすると、そのデータにアクセスできなくなります。このドキュメントの Cloud KMS を無効にするをご覧ください。

ワークフローの CMEK を有効にする

ワークフローの作成時または更新時に、ワークフローでデータ暗号化に使用する Cloud KMS 鍵を指定できます。

コンソール

  1. Google Cloud コンソールの [ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. 更新するワークフローの名前をクリックします。

    [Workflows details] ページが表示されます。

  3. [ 編集] をクリックします。

  4. [Customer-managed encryption key (CMEK)] を選択します。

  5. [顧客管理の暗号鍵を選択] リストで、Cloud KMS 鍵を選択またはフィルタリングします。

  6. (省略可)鍵のリソース名を手動で入力するには、[顧客管理の暗号鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵のリソース名を入力します。

  7. プロンプトが表示されたら、workflows.serviceAgent ロールを持つ Workflows サービス アカウントに cloudkms.cyptoKeyEncrypterDecrypter ロールを付与します。

  8. [Next(次へ)] をクリックします。

  9. 変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --kms-key=KEY \
    --location LOCATION \
    --service-account=SERVICE_ACCOUNT

以下を置き換えます。

  • WORKFLOW_NAME: ワークフローの名前
  • SOURCE_FILE: YAML ファイルの場合は yaml ファイル拡張子、JSON ファイルの場合は json ファイル拡張子を持つワークフロー ソースファイル(例: myWorkflow.yaml)。
  • KEY: 鍵のリソース ID(projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME 形式)。鍵 ID を取得できます。

  • LOCATION: ワークフローのロケーション

  • SERVICE_ACCOUNT: ワークフローが他の Google Cloud サービスにアクセスするために使用するサービス アカウント(例: SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com)。必要なリソースにアクセスするために必要な最小権限を持つサービス アカウントを使用することを強くおすすめします。空白のままにすると、デフォルトのサービス アカウントが使用されます。詳細については、Google Cloud リソースにアクセスする権限をワークフローに付与するをご覧ください。

次の点にご注意ください。

  • ワークフローのリビジョンと実行は、デプロイ時に指定された鍵で暗号化されますが、以前の鍵で暗号化されたリソースは、その以前の鍵で暗号化されたままです。その後ワークフローが編集されて、新しい鍵が指定された場合、ワークフローのリビジョンは新しい鍵で暗号化され、後続の実行ではその新しい鍵が使用されます。
  • 前もって CMEK で暗号化されていないリビジョンと実行は、暗号化されないままです。
  • ワークフロー リビジョンで CMEK を無効にすると、後続の実行は CMEK 暗号化なしで作成されます。このドキュメントのワークフローの CMEK を無効にするをご覧ください。既存のワークフローのリビジョンと実行は、これまでの暗号化で使用された鍵で暗号化されたままです。

Cloud KMS の統合を確認する

CMEK 統合を確認するには、ワークフローのメタデータを表示します。

コンソール

  1. Google Cloud コンソールの [ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. 確認するワークフローの名前をクリックします。

    [Workflows details] ページが表示されます。

  3. [詳細] タブをクリックします。

    [暗号化] 値には、ワークフローとその実行を保護するために使用される Cloud KMS 鍵のリソース ID が表示されます。

gcloud

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

出力例を以下に示します。

createTime: '2022-08-10T19:57:58.233177709Z'
cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME
revisionCreateTime: '2022-11-18T19:44:04.933633237Z'
revisionId: 000009-8be
serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com
sourceContents:
[...]
state: ACTIVE
updateTime: '2022-11-18T19:44:05.171793128Z'

cryptokeyName 値は、ワークフローとその実行を保護するために使用される Cloud KMS 鍵のリソース ID です。

ワークフローの CMEK を無効にする

ワークフローの CMEK を無効にして、関連する Cloud KMS 鍵が使用されないようにできます。

コンソール

  1. Google Cloud コンソールの [ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. 更新するワークフローの名前をクリックします。

    [Workflows details] ページが表示されます。

  3. [ 編集] をクリックします。

  4. [Customer-managed encryption key (CMEK)] ラジオボタンをクリアするには、[Google が管理する暗号鍵] を選択します。

  5. [Next(次へ)] をクリックします。

  6. 変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --clear-kms-key \
    --service-account=SERVICE_ACCOUNT

これにより、現在のワークフロー リビジョンで CMEK が無効になり、以降の実行は CMEK の暗号化なしで作成されます。既存のワークフローのリビジョンと実行は、これまでの暗号化で使用された鍵で暗号化されたままです。

Cloud KMS を無効にする

ワークフローまたはワークフローの実行へのデータアクセスを取り消す場合は、次のいずれかの方法で Cloud KMS を無効にします。

  • 顧客管理の暗号鍵のメインの鍵バージョンを無効化または破棄します。CMEK 鍵バージョンを無効にすると、その鍵バージョンで保護されているすべてのデータにアクセスできなくなります。鍵バージョンの破棄は、この操作を永続的に行うことを意味します。どちらも、特定の鍵に関連付けられたワークフローとワークフロー実行にのみ影響します。新しい実行を作成できません。また、無効化または破棄された鍵に関連するリソースを表示することもできません。アクティブな実行は、対応するエラー メッセージを出して失敗します。

  • Workflows サービス エージェントの cloudkms.cryptoKeyEncrypterDecrypter IAM ロールを取り消します。これは、CMEK を使用した暗号化をサポートする Google Cloud プロジェクトのすべてのワークフローに影響します。CMEK を統合したワークフローと実行を新規作成したり、CMEK で暗号化されたリソースを表示したりすることはできません。アクティブな実行は、対応するエラー メッセージを出して失敗します。

いずれのオペレーションでも即時のアクセス取り消しは保証されませんが、通常は IAM の変更のほうがより速く反映されます。詳細については、Cloud KMS リソースの整合性アクセス権の変更の伝播をご覧ください。

トラブルシューティング

ワークフローで Cloud KMS を使用すると、エラーが発生する可能性があります。次の表にさまざまな問題とその解決方法を示します。

問題 説明
権限 cloudkms.cryptoKeyVersions.useToEncrypt が拒否されます 指定された Cloud KMS 鍵が存在しないか、権限が適切に構成されていません。

解決方法:

鍵バージョンが有効になっていません 指定された Cloud KMS 鍵バージョンが無効になっています。

解決方法: Cloud KMS 鍵バージョンを再度有効にします

キーリング リージョンが保護対象のリソースと一致しません 指定された KMS キーリング リージョンがワークフローのリージョンとは異なります。

解決方法: Cloud KMS キーリングと同じリージョンの保護されたワークフローを使用します(異なるプロジェクトに存在することもあります)。詳細については、Cloud KMS のロケーションWorkflows のロケーションをご覧ください。

Cloud KMS の割り当て上限を超えています Cloud KMS リクエストの割り当て上限に達しました。

解決方法: Cloud KMS の呼び出し数を制限するか、割り当ての上限を増やします。詳細については、Cloud KMS の割り当てをご覧ください。

使用できない鍵のステータスの処理方法

なんらかの理由で Cloud KMS が使用できない場合、Workflows で Cloud KMS から鍵のステータスを取得できないことがあります。

鍵のステータスが使用できない場合、ワークフローまたはその実行により state: UNAVAILABLE 値と関連する詳細情報が stateError フィールドに返されます。

ワークフローの実行中に鍵のステータスが使用できなくなった場合(たとえば、コールバック中に権限が取り消された場合)、ランタイム エラーが発生し、state: FAILED 値と関連する詳細情報が error フィールドに返されます。

料金

この統合により、鍵オペレーション以外の追加の費用は発生しません。鍵オペレーションの費用は Google Cloud プロジェクトに課金されます。最新の料金情報については、Cloud KMS の料金をご覧ください。