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

デフォルトでは、Workflows はお客様のコンテンツを保存時に暗号化します。暗号化は Workflows が行うため、ユーザー側での操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。

暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Workflows などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、鍵の使用状況を追跡すること、監査ログを表示すること、鍵のライフサイクルを管理することが可能です。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵を制御および管理します。

CMEK を使用してリソースを設定した後は、Workflows リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。

ワークフローと関連する保存データは、本人だけがアクセスでき、Cloud KMS で制御と管理ができる暗号鍵を使用して保護できます。

CMEK による保護対象

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

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

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

始める前に

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

  1. API を有効にします。

    コンソール

    1. Enable the Cloud KMS and Workflows APIs.

      Enable the APIs

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    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 を有効にするをご覧ください。

Console

  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. [Cloud KMS 鍵] を選択します。

  5. キーのタイプを選択します。

    鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。

  6. [Cloud KMS 鍵を選択] リストで、Cloud KMS 鍵を選択またはフィルタします。

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

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

  9. [次へ] をクリックします。

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

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. [Cloud KMS 鍵] ラジオボタンをクリアするには、[Google が管理する暗号鍵] を選択します。

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

  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 が使用できない場合、ワークフローが Cloud KMS から鍵のステータスを取得できない可能性があります。

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

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

料金

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