デフォルトでは、Workflows は静止状態で保存されたデータを暗号化します。Google Cloud はこのデフォルトの暗号化を自動で処理して管理するので、ユーザーが操作する必要はありません。
データを保護する鍵について特定のコンプライアンスや規制の要件がある場合は、Workflows に顧客管理の暗号鍵(CMEK)を使用できます。ワークフローと関連する保存データは、本人だけがアクセスでき、Cloud Key Management Service(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 を有効にするをご覧ください。
コンソール
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] ページが表示されます。
[
編集] をクリックします。[Customer-managed encryption key (CMEK)] を選択します。
[顧客管理の暗号鍵を選択] リストで、Cloud KMS 鍵を選択またはフィルタリングします。
(省略可)鍵のリソース名を手動で入力するには、[顧客管理の暗号鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵のリソース名を入力します。
プロンプトが表示されたら、
workflows.serviceAgent
ロールを持つ Workflows サービス アカウントにcloudkms.cyptoKeyEncrypterDecrypter
ロールを付与します。[Next(次へ)] をクリックします。
変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。
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] ページが表示されます。
[
編集] をクリックします。[Customer-managed encryption key (CMEK)] ラジオボタンをクリアするには、[Google が管理する暗号鍵] を選択します。
[Next(次へ)] をクリックします。
変更を保存して更新済みのワークフローをデプロイするには、[デプロイ] をクリックします。
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 の料金をご覧ください。