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

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

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

CMEK による保護対象

Cloud Tasksで CMEK を有効にすると、リージョンで有効になります。有効にすると、そのリージョンで作成されたタスクの本文とヘッダーが、保存時にユーザーの鍵で保護されます。CMEK が有効である間にタスクが作成され、その後で鍵が非アクティブになる(鍵の無効化や削除、または CMEK の無効化によって)と、タスクは鍵で暗号化されますが、実行できません。

次の場合、タスクは CMEK で保護されません。

  • CMEK を有効にする前にタスクが作成された
  • タスクが CMEK が有効になっているリージョンにない
  • タスクが互換性の制限事項の影響を受けている

互換性の制限事項

Cloud Tasks と CMEK のインテグレーションでは、次の操作はサポートされていません。

  • google-gax4.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 は、キューの名前に置き換えます。

    リストにある typepull の場合、キューは pull キューです。リストにある typepush である場合、この制限はキューのタスクには影響しません。

  • キューレベルのルーティング: CMEK が有効になっている場合、キューレベルのルーティングを適用することはできません。また、キューレベルのルーティングが有効になっている場合、CMEK は有効にすることはできません。キューレベルのルーティングが有効になっているかどうかを確認する手順は次のとおりです。

    1. ターミナルで、次の gcloud CLI コマンドを実行します。

      gcloud tasks queues describe QUEUE_NAME
      QUEUE_NAME は、キューの名前に置き換えます。

    2. 出力で httpTarget フィールドを探し、uriOverride が設定されているかどうかを確認します。host が指定されている場合、キューレベルのルーティングが有効で、CMEK との互換性はありません。キューレベルのルーティングを削除するには、キューレベルのルーティングを更新または削除するをご覧ください。出力に host を指定した uriOverride が表示されない場合、キューはキューレベルのルーティングを使用していません。

  • タスクの TTL: CMEK が有効になっている場合、task_ttl を 60 日以上に設定できません。また、task_ttl が 60 日を超える値に設定されている場合、CMEK は有効にできません。

準備

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

  1. API を有効にします。

    コンソール

    1. Enable the Cloud KMS and Cloud Tasks 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. デフォルト プロジェクトを設定します。これは、CMEK で保護する Cloud Tasks リソースを含むプロジェクトである必要があります。別のプロジェクト(Cloud KMS リソースを含むプロジェクトなど)でコマンドを実行する必要がある場合は、このページは gcloud CLI コマンドの --project フラグを含み、どのプロジェクトを指定するのかを示します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、Cloud Tasks リソースを含むプロジェクトの ID に置き換えます。

    3. gcloud コンポーネントを更新します。

      gcloud components update

    4. 暗号鍵を格納するプロジェクトで Cloud KMS API と Cloud Tasks API を有効にします。

      gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com 
      --project=PROJECT_ID

      PROJECT_ID は、暗号鍵を保存するプロジェクトの ID に置き換えます。これは、Cloud Tasks のリソースと同じプロジェクトにすることもできますが、Cloud KMS 鍵へのアクセスを制限するため、別々のプロジェクトでの Cloud KMS の設定を検討してください。

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

  3. Identity and Access Management のロールを取得します。

    Cloud Tasks で CMEK を使用するために必要な権限を取得するには、プロジェクトで次の IAM ロールを付与するよう管理者に依頼してください。

    • CMEK の有効化または無効化: roles/cloudtasks.admin
    • 使用中の鍵を表示する: roles/cloudtasks.viewer

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

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

Cloud Tasks リソースと同じリージョンにキーリングがすでにあり、その鍵とキーリングを使用する場合は、このセクションをスキップしてください。そうでない場合は、以下の手順で Cloud KMS 鍵とキーリングを作成します。

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

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

Cloud KMS 鍵の ID を取得する

Cloud Tasks で CMEK を有効にする場合は、Cloud KMS 鍵のリソース ID が必要です。

Console

  1. Google Cloud コンソールで、[鍵管理] ページに移動し、鍵のインベントリタブを選択します。

    [鍵のインベントリ] に移動

  2. リソース ID を取得したい鍵のアクション をクリックします。

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

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

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

gcloud

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

    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 鍵にアクセスできるようにする必要があります。次にその手順を示します。

コンソール

  1. Google Cloud コンソールで、Identity and Access Management ページに移動します。

    [IAM] に移動

  2. [Google 提供のロール付与を含める] チェックボックスをオンにします。

  3. フィルタに「cloudtasks.iam.gserviceaccount.com」と入力して、Cloud Tasks サービス アカウントを検索します。

    Cloud Tasks サービス アカウントの形式は service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com です。

  4. [プリンシパルを編集] の鉛筆アイコンをクリックします。

  5. 表示されたパネルで、[別のロールを追加] をクリックします。

  6. [Cloud KMS 暗号鍵の暗号化/復号] のロールを検索して選択します。

  7. [保存] をクリックします。

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

Cloud Tasks で CMEK を有効にする

CMEK は、API または gcloud CLI を使用して有効にできます。Cloud Tasks では、CMEK はリージョン単位で有効になります。個々のタスクでは有効になりません。Cloud Tasks の特定のリージョンで CMEK が有効になっている場合、そのリージョン内のすべてのタスクが CMEK によって保護されます。

API

CMEK を有効にするには、Update CMEK config メソッドを呼び出します。Cloud Tasks API は、REST API と RPC API の両方で Update CMEK config メソッドを提供します。

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 を取得するをご覧ください。鍵のバージョン番号は含めないでください。鍵のバージョン番号を含めると、このコマンドが失敗する可能性があります。

鍵が正常に有効化されたことを確認するには、使用中の鍵の特定セクションの手順に従います。

既存のタスクで有効にする

CMEK では、Cloud Tasks で CMEK を有効にする前に作成されたタスクは保護されません。CMEK で既存のタスクを保護する手順は、次のとおりです。

  1. CMEK を有効にします(CMEK の有効化に関するセクションをご覧ください)。
  2. 既存のタスクを置き換えます。これには主に次の 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 鍵がアクティブである限り、引き続き暗号化され、実行されます。

API

CMEK を無効にするには、Update CMEK config メソッドを呼び出して、Cloud KMS 鍵を空の文字列に置き換えて消去します。Cloud Tasks API は、REST API と RPC API の両方で Update CMEK config メソッドを提供します。

gcloud

Google Cloud CLI を使用して CMEK を無効にするには、次のコマンドを使用します。

gcloud tasks cmek-config update --location=LOCATION --clear-kms-key

以下を置き換えます。

  • LOCATION: Cloud Tasks リソースのリージョン。

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 の料金をご覧ください。