デフォルトでは、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 を使用する前に、次の手順を行います。
API を有効にします。
コンソール
-
Enable the Cloud KMS and Workflows APIs.
gcloud
-
In the Google Cloud console, 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.
gcloud
コンポーネントを更新します。gcloud components update
- 暗号鍵を格納するプロジェクトで Cloud KMS API と Workflows API を有効にします。
gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
-
鍵の有効化または無効化を行うと、Cloud KMS により Cloud Audit Logs が生成されます。このログは、データの暗号化または復号で Workflows リソースが鍵を使用したときにも生成されます。プロジェクト内の Cloud KMS API でロギングが有効になっていることと、ユースケースに適用されるロギング固有の権限とロールを決定していることを確認します。詳細については、Cloud KMS 監査ロギングの情報をご覧ください。
Cloud KMS キーリングと鍵を作成する
キーリングは新しく作成するか、既存のものを使用できます。キーリング内では、新しい鍵を追加することも、既存の鍵を使用することも可能です。
Cloud KMS 鍵のリソース ID を取得する
ワークフローの CMEK を有効にする場合は、Cloud KMS 鍵のリソース ID が必要です。このドキュメントの ワークフローの CMEK を有効にするをご覧ください。
Console
Google Cloud コンソールで [鍵管理] ページに移動します。
鍵を含むキーリングをクリックします。
リソース ID を取得したい鍵について、[more_vert その他] をクリックします。
[リソース名をコピーする] をクリックします。
鍵のリソース ID がクリップボードにコピーされます。形式は次のようになります。
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
鍵には、0 個以上の鍵バージョンが含まれています。鍵バージョンのリソース ID は、鍵 ID とスラッシュ(
/
)、およびバージョン ID です。鍵のすべてのバージョンを一覧表示するには:- 鍵の名前をクリックします。
- 特定のバージョンの場合は、[ その他] をクリックします。
- [リソース名をコピーする] をクリックします。
gcloud
指定したキーリングのすべての鍵を一覧表示します。
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
鍵には、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 鍵を指定できます。
コンソール
Google Cloud コンソールの [ワークフロー] ページに移動します。
更新するワークフローの名前をクリックします。
[Workflows details] ページが表示されます。
[
編集] をクリックします。[Cloud KMS 鍵] を選択します。
キーのタイプを選択します。
鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵を選択] リストで、Cloud KMS 鍵を選択またはフィルタします。
(省略可)鍵のリソース名を手動で入力するには、[顧客管理の暗号鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵のリソース名を入力します。
プロンプトが表示されたら、
workflows.serviceAgent
ロールを持つ Workflows サービス アカウントにcloudkms.cyptoKeyEncrypterDecrypter
ロールを付与します。[次へ] をクリックします。
変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。
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 統合を確認できます。
コンソール
Google Cloud コンソールの [ワークフロー] ページに移動します。
確認するワークフローの名前をクリックします。
[Workflows details] ページが表示されます。
[詳細] タブをクリックします。
[暗号化] 値には、ワークフローとその実行の保護に使用される 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 鍵を使用しなくなります。
コンソール
Google Cloud コンソールの [ワークフロー] ページに移動します。
更新するワークフローの名前をクリックします。
[Workflows details] ページが表示されます。
[
編集] をクリックします。[Cloud KMS 鍵] ラジオボタンをクリアするには、[Google が管理する暗号鍵] を選択します。
[次へ] をクリックします。
変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。
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 の料金をご覧ください。