デフォルトでは、Cloud Tasks はお客様のコンテンツを保存時に暗号化します。暗号化は Cloud Tasks が行うため、ユーザー側での操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。
暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Cloud Tasks などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、監査ログを表示し、鍵のライフサイクルを管理することもできます。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵を制御および管理します。
CMEK を使用してリソースを設定した後は、Cloud Tasks リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。
CMEK による保護対象
Cloud Tasksで CMEK を有効にすると、リージョンで有効になります。有効にすると、そのリージョンで作成されたタスクの本文とヘッダーが、保存時にユーザーの鍵で保護されます。CMEK が有効である間にタスクが作成され、その後で鍵が非アクティブになる(鍵の無効化や削除、または CMEK の無効化によって)と、タスクは鍵で暗号化されますが、実行できません。
次の場合、タスクは CMEK で保護されません。
- CMEK を有効にする前にタスクが作成された
- タスクが CMEK が有効になっているリージョンにない
- タスクが互換性の制限事項の影響を受けている
互換性の制限事項
Cloud Tasks と CMEK のインテグレーションでは、次の操作はサポートされていません。
google-gax
の4.0.0
以下のバージョン: Node.js の npm パッケージgoogle-gax
のサポートは、4.0.0
より前のバージョンでは限定されています。これらのバージョンでは、CEMK はリージョンus-central1
でのみサポートされます。このリージョンだけにタスクがある場合でも、バージョン4.0.0
以降にアップグレードすることをおすすめします。App Engine 組み込みの Taskqueue サービス: App Engine 組み込みの Taskqueue サービスを使用して作成されたタスクは、有効になっているリージョンにある場合でも、CMEK では保護されません。CMEK を有効にしても、これらのタスクの作成やオペレーション(実行や削除など)は妨げられません。
pull キュー: CMEK を有効にすると、pull キューでタスクを作成して実行できますが、これらのタスクは CMEK で保護されません。pull キューは一般的ではありません。 キューが pull キューかどうかを確認するには、ターミナルで次の gcloud CLI コマンドを実行します。
gcloud tasks queues describe QUEUE_NAME
QUEUE_NAME
は、キューの名前に置き換えます。リストにある
type
がpull
の場合、キューは pull キューです。リストにあるtype
がpush
である場合、この制限はキューのタスクには影響しません。キューレベルのルーティング: CMEK が有効になっている場合、キューレベルのルーティングを適用することはできません。また、キューレベルのルーティングが有効になっている場合、CMEK は有効にすることはできません。キューレベルのルーティングが有効になっているかどうかを確認する手順は次のとおりです。
ターミナルで、次の gcloud CLI コマンドを実行します。
gcloud tasks queues describe QUEUE_NAME
QUEUE_NAME
は、キューの名前に置き換えます。出力で
httpTarget
フィールドを探し、uriOverride
が設定されているかどうかを確認します。host
が指定されている場合、キューレベルのルーティングが有効で、CMEK との互換性はありません。キューレベルのルーティングを削除するには、キューレベルのルーティングを更新または削除するをご覧ください。出力にhost
を指定したuriOverride
が表示されない場合、キューはキューレベルのルーティングを使用していません。
タスクの TTL: CMEK が有効になっている場合、
task_ttl
を 60 日以上に設定できません。また、task_ttl
が 60 日を超える値に設定されている場合、CMEK は有効にできません。
準備
Cloud Tasks で CMEK を使用する前に、次の手順を行います。
API を有効にします。
コンソール
-
Enable the Cloud KMS and Cloud Tasks 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.
デフォルト プロジェクトを設定します。これは、CMEK で保護する Cloud Tasks リソースを含むプロジェクトである必要があります。別のプロジェクト(Cloud KMS リソースを含むプロジェクトなど)でコマンドを実行する必要がある場合は、このページは gcloud CLI コマンドの
--project
フラグを含み、どのプロジェクトを指定するのかを示します。gcloud config set project PROJECT_ID
PROJECT_ID
は、Cloud Tasks リソースを含むプロジェクトの ID に置き換えます。gcloud
コンポーネントを更新します。gcloud components update
暗号鍵を格納するプロジェクトで Cloud KMS API と Cloud Tasks API を有効にします。
gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com
--project=PROJECT_IDPROJECT_ID
は、暗号鍵を保存するプロジェクトの ID に置き換えます。これは、Cloud Tasks のリソースと同じプロジェクトにすることもできますが、Cloud KMS 鍵へのアクセスを制限するため、別々のプロジェクトでの Cloud KMS の設定を検討してください。
-
鍵の有効化または無効化を行うと、Cloud KMS により Cloud Audit Logs が生成されます。このログは、データの暗号化または復号で Cloud Tasks リソースが鍵を使用したときにも生成されます。プロジェクト内の Cloud KMS API でロギングが有効になっていることと、ユースケースに適用されるロギング固有の権限とロールを決定していることを確認します。詳細については、Cloud KMS 監査ロギングの情報をご覧ください。
Identity and Access Management のロールを取得します。
Cloud Tasks で CMEK を使用するために必要な権限を取得するには、プロジェクトで次の IAM ロールを付与するよう管理者に依頼してください。
- CMEK の有効化または無効化:
roles/cloudtasks.admin
-
使用中の鍵を表示する:
roles/cloudtasks.viewer
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
- CMEK の有効化または無効化:
Cloud KMS キーリングと鍵を作成する
Cloud Tasks リソースと同じリージョンにキーリングがすでにあり、その鍵とキーリングを使用する場合は、このセクションをスキップしてください。作成していない場合は、次の手順で Cloud KMS 鍵とキーリングを作成します。
-
キーリングは、保護する Cloud Tasks リソースを含むリージョン内に存在する必要があります。詳細については、Cloud KMS のロケーションと Cloud Tasks のロケーションをご覧ください。
キーリングと CMEK で保護された Cloud Tasks リソースは、同じプロジェクト内に存在することができますが、Cloud KMS 鍵へのアクセスを制限するために、別々のプロジェクトでの Cloud KMS の設定を検討してください。
Cloud KMS 鍵の ID を取得する
Cloud Tasks で CMEK を有効にする場合は、Cloud KMS 鍵のリソース ID が必要です。
Console
Google Cloud コンソールで、[鍵管理] ページに移動し、鍵のインベントリタブを選択します。
リソース ID を取得したい鍵のmore_vertアクション をクリックします。
[リソース名をコピーする] をクリックします。
鍵のリソース ID がクリップボードにコピーされます。形式は次のようになります。
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
gcloud
指定したキーリングのすべての鍵を一覧表示します。
gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
以下を置き換えます。
KEY_RING
: キーリングの名前LOCATION
: キーリングのリージョンPROJECT_ID
: キーリングを含むプロジェクトの ID
出力には、各鍵の鍵 ID が含まれます。次に例を示します。
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
Cloud Tasks サービス エージェントに鍵へのアクセス権を付与する
Cloud Tasks サービス エージェントに Cloud KMS 暗号鍵の暗号化/復号の Identity and Access Management(IAM)ロールを付与して、Cloud KMS 鍵にアクセスできるようにする必要があります。次にその手順を示します。
コンソール
Google Cloud コンソールで、Identity and Access Management ページに移動します。
[Google 提供のロール付与を含める] チェックボックスをオンにします。
フィルタに「
cloudtasks.iam.gserviceaccount.com
」と入力して、Cloud Tasks サービス アカウントを検索します。Cloud Tasks サービス アカウントの形式は
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
です。[プリンシパルを編集] の鉛筆アイコンをクリックします。
表示されたパネルで、[別のロールを追加] をクリックします。
[Cloud KMS 暗号鍵の暗号化/復号] のロールを検索して選択します。
[保存] をクリックします。
gcloud
gcloud kms keys add-iam-policy-binding KEY_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
以下を置き換えます。
KEY_ID
: 鍵の完全修飾リソース ID。確認手順については、Cloud KMS 鍵の ID を取得するをご覧ください。鍵のバージョン番号は含めないでください。鍵のバージョン番号を含めると、このコマンドが失敗する可能性があります。PROJECT_NUMBER
: Google Cloud プロジェクト番号。プロジェクト番号は、Google Cloud コンソールの [スタート] ページで確認できます。また、次のコマンドを実行して確認することもできます。PROJECT=$(gcloud info --format='value(config.project)') gcloud projects describe ${PROJECT} --format="value(projectNumber)"
サービス エージェントに roles/cloudkms.cryptoKeyEncrypterDecrypter
ロールがあれば、CMEK 対応リージョンのタスクは CMEK 鍵を使用してデータを暗号化および復号できます。ロールの取り消しや、CMEK 鍵の無効化や破棄をすると、そのデータにアクセスできなくなります。このドキュメントのCloud Tasks の CMEK を無効にするをご覧ください。
Cloud Tasks で CMEK を有効にする
CMEK は、API または gcloud CLI を使用して有効にできます。Cloud Tasks では、CMEK はリージョン単位で有効になります。個々のタスクでは有効になりません。Cloud Tasks の特定のリージョンで CMEK が有効になっている場合、そのリージョン内のすべてのタスクが CMEK によって保護されます。
gcloud
Google Cloud CLI を使用して CMEK を有効にするには、次のコマンドを使用します。
gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID
以下を置き換えます。
LOCATION
: Cloud Tasks リソースのリージョンKEY_ID
: 鍵の完全修飾リソース ID。確認手順については、Cloud KMS 鍵の ID を取得するをご覧ください。鍵のバージョン番号は含めないでください。鍵バージョン番号を含めると、このコマンドが失敗する可能性があります。
REST
CMEK を有効にするには、Update CMEK config
メソッドを呼び出します。Cloud Tasks API は、REST API と RPC API の両方で Update CMEK config
メソッドを提供します。
- REST:
updateCmekConfig
メソッドを使用します。 - RPC:
UpdateCmekConfigRequest
メソッドを使用します。
鍵が正常に有効化されたことを確認するには、使用中の鍵の特定セクションの手順に従います。
既存のタスクで有効にする
CMEK では、Cloud Tasks で CMEK を有効にする前に作成されたタスクは保護されません。CMEK で既存のタスクを保護する手順は、次のとおりです。
- CMEK を有効にします(CMEK の有効化に関するセクションをご覧ください)。
既存のタスクを置き換えます。これには主に次の 2 つの方法があります。最適な方法は、重視されるものに応じて次のように異なります。
継続的実行: 継続的デリバリー(少なくとも 1 回以上の配信)を確実に行うためには、最初にタスクを再作成し、新しいタスクが想定どおりに動作することを検証してから、既存のタスクを削除します。これにより、古いタスクを削除する前に、古いタスクと新しいタスクの両方が実行される可能性があるため、実行が重複することがあります。
重複防止: 実行の重複を防ぐ(多くても 1 回までの配信)には、まず古いタスクを削除してから再作成します。これにより、古いタスクの削除と新しいタスクの作成の間に時間が経過するため、実行が失われる可能性があります。
使用中の鍵を特定する
Cloud Tasks リソースで使用されている CMEK キーを特定するには、ターミナルで次の gcloud CLI コマンドを実行します。
gcloud tasks cmek-config describe --location=LOCATION
LOCATION
は、Cloud Tasks リソースのリージョンに置き換えます。
出力がない場合は、CMEK は指定されたロケーションに構成されていません。
Cloud Tasks の CMEK を無効にする
CMEK は、API または gcloud CLI を使用して無効にできます。Cloud Tasks の場合、CMEK はリージョンごとに無効になります。個々のタスクでは無効になりません。Cloud Tasksの特定のリージョンで CMEK が無効になっている場合、そのリージョンのタスクは CMEK で保護されません。
CMEK を無効にすると、過去に作成されたタスクには影響せず、今後作成されるタスクに影響します。
- 新しいタスク: CMEK では保護されません。
既存のタスク: CMEK を有効にして作成されたタスクは、その Cloud KMS 鍵がアクティブである限り、引き続き暗号化され、実行されます。
gcloud
Google Cloud CLI を使用して CMEK を無効にするには、次のコマンドを使用します。
gcloud tasks cmek-config update --location=LOCATION --clear-kms-key
以下を置き換えます。
LOCATION
: Cloud Tasks リソースのリージョン。
REST
CMEK を無効にするには、Update CMEK config
メソッドを呼び出して、Cloud KMS 鍵を空の文字列に置き換えて消去します。Cloud Tasks API は、REST API と RPC API の両方で Update CMEK config
メソッドを提供します。
- REST:
updateCmekConfig
メソッドを使用します。 - RPC:
UpdateCmekConfigRequest
メソッドを使用します。
Cloud KMS を削除する
タスクへのデータアクセス権を取り消す場合は、Cloud KMS を削除できます。これには次の 3 つの方法があります。
顧客管理の暗号鍵を無効にします。CMEK 鍵を無効にすると、鍵が無効になっている間は、その鍵バージョンで保護されているすべてのデータにアクセスできなくなります。無効になっている鍵でタスクにアクセスしたり、タスクを作成したりすることはできません。鍵が無効になっているときに CMEK で保護されたタスクを実行しようとすると、Cloud Logging に
UNKNOWN
エラーが記録されます。鍵は後で再有効化できます。顧客管理の暗号鍵を無効にした場合、変更が適用されるまでに最大で 5 分かかることがあります。顧客管理の暗号鍵を破棄します。CMEK 鍵を破棄すると、その鍵バージョンで保護されているすべてのデータにアクセスできなくなります。破棄された鍵でタスクにアクセスしたり、タスクを作成したりすることはできません。CMEK が有効である間にタスクが作成され、後で鍵が破棄された場合と、このタスクは鍵で暗号化されますが、実行できません。タスクの実行が試行されると、Cloud Logging によって
UNKNOWN
エラーがログに記録されます。顧客管理の暗号鍵を破棄した場合、変更が適用されるまでに最大で 5 分かかることがあります。Cloud Tasks サービス エージェントから
cloudkms.cryptoKeyEncrypterDecrypter
IAM ロールを取り消します。 これは、CMEK を使用した暗号化をサポートする Google Cloud プロジェクト内のすべてのタスクに影響します。CMEK 統合タスクを新規作成したり、CMEK で暗号化されたリソースを表示することはできません。
いずれのオペレーションでも即時のアクセス取り消しは保証されませんが、通常は IAM の変更のほうがより速く反映されます。詳細については、Cloud KMS リソースの整合性とアクセス権の変更の伝播をご覧ください。
料金
この統合により、鍵オペレーション以外の追加の費用は発生しません。鍵オペレーションの費用は Google Cloud プロジェクトに課金されます。最新の料金情報については、Cloud KMS の料金をご覧ください。