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

デフォルトでは、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-gax4.0.0 以下のバージョン: Node.js の npm パッケージgoogle-gaxのサポートは、4.0.0 よりも前のバージョンでは限定されています。これらのバージョンでは、CMEK はリージョン 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. Cloud KMS API と Cloud Tasks API を有効にします。

      API を有効にするために必要なロール

      API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

      API を有効にする

    gcloud

    1. Google Cloud コンソールで Cloud Shell をアクティブにします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    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 が必要です。

コンソール

  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 コンソールで、[IAM](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。この 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。この ID を確認する手順については、Cloud KMS 鍵の ID を取得するをご覧ください。キーのバージョン番号は含めないでください。鍵バージョンの番号を指定すると、このコマンドが失敗する可能性があります。

REST

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

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

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

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 は指定されたロケーションに構成されていません。

CMEK の組織のポリシーの適用

Cloud Tasks は、組織全体で CMEK が使用されるように、2 つの組織のポリシーの制約と統合されています。

  • constraints/gcp.restrictNonCmekServices は、CMEK 保護を要求するために使用されます。
  • constraints/gcp.restrictCmekCryptoKeyProjects は、CMEK の保護に使用される Cloud KMS 鍵を制限するために使用されます。

この統合により、組織内の Cloud Tasks リソースに対して次の暗号化コンプライアンス要件を指定できます。

組織のポリシーを適用する際の考慮事項

CMEK の組織のポリシーを適用する前に、次の点に注意してください。

反映の遅延に備える

組織のポリシーを設定または更新してから、新しいポリシーが有効になるまで最大 15 分かかることがあります。

既存のリソースを考慮する

既存のリソースは、新しく作成された組織のポリシーの対象になりません。たとえば、組織のポリシーは既存のタスクに遡って適用されません。これらのリソースには CMEK なしでアクセスでき、該当する場合は、既存の鍵で暗号化されたままになります。既存のタスクにポリシーを適用する場合は、既存のタスクで CMEK を有効にする必要があります。

組織のポリシーを設定するために必要な権限を確認する

組織のポリシーを、テスト目的で設定または更新する権限の取得は難しい場合があります。組織ポリシー管理者ロールが付与されている必要があります。このロールは、プロジェクト レベルやフォルダレベルではなく、組織レベルでのみ付与できます。

そのロールは組織レベルで付与する必要がありますが、特定のプロジェクトやフォルダにのみ適用されるポリシーを指定することもできます。

すべての新しい Cloud Tasks リソースで CMEK を必須にする

constraints/gcp.restrictNonCmekServices 制約を使用すると、組織内のすべての新しい Cloud Tasks リソースを保護するために CMEK を使用することを要求できます。

この組織のポリシーを設定すると、指定された Cloud KMS 鍵を持たないすべてのリソース作成リクエストは失敗します。

このポリシーを設定すると、それはプロジェクト内の新しいリソースにのみ適用されます。Cloud KMS 鍵が適用されていない既存のリソースは引き続き存在し、問題なくアクセスできます。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. [フィルタ] を使用して、次の制約を検索します。

    constraints/gcp.restrictNonCmekServices
    
  3. [名前] 列で、[CMEK を使用せずにリソースを作成できるサービスを制限する] をクリックします。

  4. [ ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。

  6. [ルール] で [ルールを追加] をクリックします。

  7. [ポリシーの値] リストで、[カスタム] を選択します。

  8. [ポリシータイプ] リストで、[拒否] を選択します。

  9. [カスタム値] フィールドに次のように入力します。

    is:cloudtasks.googleapis.com
    
  10. [完了]、[ポリシーを設定] の順にクリックします。

gcloud

  1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:cloudtasks.googleapis.com

    PROJECT_ID は、この制約を適用するプロジェクトの ID に置き換えます。

  2. org-policies set-policy コマンドを実行します。

    gcloud org-policies set-policy /tmp/policy.yaml

ポリシーが正常に適用されていることを確認するために、プロジェクトにキューを作成してみることができます。Cloud KMS 鍵を指定しない限り、プロセスは失敗します。

Cloud Tasks プロジェクトの Cloud KMS 鍵を制限する

Cloud Tasks プロジェクトでは、constraints/gcp.restrictCmekCryptoKeyProjects 制約を使用してリソースの保護に使用できる Cloud KMS 鍵を制限できます。

たとえば、「projects/my-company-data-project のすべての Cloud Tasks リソースに対して、このプロジェクトで使用される Cloud KMS 鍵は projects/my-company-central-keys または projects/team-specific-keys からのものでなければならない」というルールを指定できます。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. [フィルタ] を使用して、次の制約を検索します。

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. [名前] 列で、[CMEK 用の KMS CryptoKey を提供できるプロジェクトを制限する] をクリックします。

  4. [ ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。

  6. [ルール] で [ルールを追加] をクリックします。

  7. [ポリシーの値] リストで、[カスタム] を選択します。

  8. [ポリシーの種類] リストで、[許可] を選択します。

  9. [カスタム値] フィールドに次のように入力します。

    under:projects/KMS_PROJECT_ID
    

    KMS_PROJECT_ID は、使用する Cloud KMS 鍵が配置されているプロジェクトの ID に置き換えます。

    例: under:projects/my-kms-project

  10. [完了]、[ポリシーを設定] の順にクリックします。

gcloud

  1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    次のように置き換えます

    • PROJECT_ID: この制約を適用するプロジェクトの ID。
    • KMS_PROJECT_ID: 使用する Cloud KMS 鍵が配置されているプロジェクトの ID。
  2. org-policies set-policy コマンドを実行します。

    gcloud org-policies set-policy /tmp/policy.yaml

ポリシーが正常に適用されていることを確認するには、別のプロジェクトの Cloud KMS 鍵を使用してキューを作成してみることができます。このプロセスは失敗します。

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 メソッドを提供します。

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