デフォルトの CMEK バケット ポリシーに違反するオブジェクトを再暗号化する

このページでは、Storage Intelligence アドバイザーを使用して、バケットのデフォルトの顧客管理の暗号鍵(CMEK)ポリシーに違反するオブジェクトを特定して再暗号化する方法について説明します。

バケットにデフォルトの Cloud KMS 鍵を設定すると、アップロード リクエストで別の鍵が指定されていない限り、Cloud Storage はその鍵で新しいオブジェクトを暗号化します。ただし、デフォルトの鍵を設定する前にアップロードした既存のオブジェクトは、Cloud Storage によって自動的に再暗号化されることはありません。これらのオブジェクトは、元の暗号化方法で暗号化されたままになります。利用可能な暗号化方法の詳細については、データ暗号化オプションをご覧ください。

Storage Intelligence アドバイザーは、デフォルトの Cloud Key Management Service(Cloud KMS)鍵を持つバケットに、CMEK で暗号化されていないオブジェクトが含まれている場合に、「オブジェクトがデフォルトの CMEK バケット ポリシーに違反している」という検出結果を表示します。検出結果は、指標とオブジェクト メタデータから検出された、注意が必要な異常またはセキュリティ構成のギャップです。Storage Intelligence アドバイザーの概要については、Storage Intelligence アドバイザーについてをご覧ください。検出結果の一覧については、検出結果リファレンス カタログをご覧ください。

検出結果をトリガーするしきい値

Storage Intelligence を有効にすると、Cloud Storage はプロジェクト、フォルダ、組織全体のバケットレベルとオブジェクトレベルの暗号化メタデータを自動的に評価します。Storage Intelligence アドバイザーは、バケットが次の両方の条件を満たす場合に検出結果を生成します。

  • バケットにデフォルトの Cloud KMS 鍵がある。つまり、encryption.defaultKmsKeyName フィールドが設定され、encryption.defaultEncryptionType フィールドが CMEK である。
  • バケットに、encryptionType メタデータ フィールドが CMEK ではないオブジェクト(GMEK や CSEK など)が 1 つ以上含まれている。

最初のベースラインの検出結果は、Storage Intelligence を有効にしてから 48 時間以内に表示され、24 時間ごとに更新されます。アラートの量を減らすため、Storage Intelligence アドバイザーは、ダッシュボードにバケットごとのオブジェクト レベルの違反を集計します。オブジェクト レベルの暗号化メタデータは、Storage Insights データセットでクエリできます。

検出結果に対応する

検出結果に対応するには、各バケットで影響を受けるオブジェクトを特定し、バケットのデフォルトの Cloud KMS 鍵で再暗号化します。

  1. 検出結果の詳細を表示して、影響を受けるバケットを特定し、各バケットのデフォルトの KMS 鍵のリソース名をコピーします。

  2. 省略可: CMEK で暗号化されていないバケット内のオブジェクトのリストを表示するには、BigQuery で Storage Insights データセットをクエリします。リンクされたデータセットを構成していない場合は、Storage Insights データセットを構成するをご覧ください。

    SELECT
      bucket,
      name,
      encryptionType
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType != 'CMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    次のように置き換えます。

    • DATASET_NAME: BigQuery の Storage Insights リンクされたデータセットの名前。
    • BUCKET_NAME: 影響を受けるバケットの名前。
  3. 次の表を使用して、ライブ オブジェクトの再暗号化方法を選択します。

    シナリオ 推奨される対処方法 詳細
    影響を受けるライブ オブジェクトは標準の暗号化(GMEK)を使用しています ストレージ バッチ オペレーションを使用して、GMEK で暗号化されたオブジェクトを大規模に再暗号化する 影響を受けるライブ GMEK オブジェクトの CSV マニフェスト ファイルを BigQuery からエクスポートし、ストレージ バッチ オペレーション ジョブを実行して、バケットのデフォルトの Cloud KMS 鍵でオブジェクトを書き換えます。
    影響を受けるライブ オブジェクトが顧客指定の暗号鍵(CSEK)を使用している Google Cloud CLI を使用して CSEK で暗号化されたオブジェクトを再暗号化する Google Cloud には顧客指定の暗号鍵(CSEK)が保存されないため、ストレージ バッチ オペレーションでは CSEK で暗号化されたオブジェクトを復号できません。gcloud storage objects update コマンドを使用して、CSEK で暗号化されたオブジェクトをバケットのデフォルトの Cloud KMS 鍵で書き換えます。

    バケット内のすべての非準拠オブジェクトを再暗号化すると、次の 24 時間の更新サイクル中に、そのバケットの検出結果がクリアされます。ただし、次の場合は、保持されているオブジェクト バージョンがユーザーまたは Cloud Storage によって完全に削除されるまで、検出結果はアクティブのままになります。

ストレージ バッチ オペレーションを使用して、GMEK で暗号化されたオブジェクトを大規模に再暗号化する

ライブ GMEK オブジェクトを大規模に再暗号化するには、BigQuery から CSV マニフェスト ファイルをエクスポートし、ストレージ バッチ オペレーション ジョブを実行します。

  1. BigQuery で次の EXPORT DATA クエリを実行して、Storage Insights データセットを使用して CSV マニフェストを作成します。

    EXPORT DATA OPTIONS(
      uri='gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv',
      format='CSV',
      overwrite=true,
      header=true
    ) AS
    SELECT
      bucket,
      name
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType = 'GMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    次のように置き換えます。

    • DESTINATION_BUCKET: エクスポートされた CSV マニフェスト ファイルを保存する Cloud Storage バケットの名前。
    • DATASET_NAME: BigQuery の Storage Insights リンクされたデータセットの名前。
    • BUCKET_NAME: 影響を受けるバケットの名前。
  2. ストレージ バッチ オペレーションの前提条件を完了し、バケットのデフォルトの Cloud KMS 鍵に対する Cloud KMS CryptoKey 暗号化 / 復号のロール(roles/cloudkms.cryptoKeyEncrypterDecrypter)を次の両方のサービス エージェントに付与するよう管理者に依頼します。

    • ストレージ バッチ オペレーション サービス エージェント(service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com)
    • Cloud Storage サービス エージェント(service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

    PROJECT_NUMBER は、バケットを含むプロジェクトのプロジェクト番号に置き換えます。

  3. gcloud storage batch-operations jobs create コマンドを実行して、マニフェスト ファイルを使用して Storage バッチ オペレーション ジョブを作成し、バケットのデフォルトの Cloud KMS 鍵でオブジェクトを再暗号化します。オブジェクトを変更する前にジョブ構成を確認するには、--dry-run フラグを指定します。

    gcloud storage batch-operations jobs create JOB_NAME \
      --bucket="BUCKET_NAME" \
      --manifest-location="gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv" \
      --rewrite-object="kms-key=DEFAULT_KMS_KEY"

    次のように置き換えます。

    • JOB_NAME: バッチジョブの一意の ID(update-encryption-to-cmek-job など)。
    • BUCKET_NAME: 影響を受けるバケットの名前。
    • DESTINATION_BUCKET: エクスポートされたマニフェスト ファイルを含むバケットの名前。
    • DEFAULT_KMS_KEY: バケットのデフォルトの Cloud KMS 鍵のリソース名。projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY 形式で指定します。

Google Cloud CLI を使用して CSEK 暗号化オブジェクトを再暗号化する

Google Cloud には顧客指定の暗号鍵(CSEK)が保存されないため、ストレージ バッチ オペレーションでは CSEK で暗号化されたオブジェクトを復号できません。CSEK で暗号化されたオブジェクトをバケットのデフォルトの Cloud KMS 鍵で再暗号化するには、--decryption-keys フラグと --encryption-key フラグの両方を指定して gcloud storage objects update コマンドを実行します。

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
  --decryption-keys=DECRYPTION_KEY \
  --encryption-key=DEFAULT_KMS_KEY

次のように置き換えます。

  • BUCKET_NAME: 影響を受けるバケットの名前。
  • OBJECT_NAME: 再暗号化する CSEK 暗号化オブジェクトの名前。1 つのコマンドで複数のオブジェクトを更新するには、URI ワイルドカードまたは --read-paths-from-stdin(-I)フラグを使用します。
  • DECRYPTION_KEY: オブジェクトを暗号化する RFC 4648 base64 でエンコードされた AES-256 鍵。
  • DEFAULT_KMS_KEY: バケットのデフォルトの Cloud KMS 鍵のリソース名。projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY 形式で指定します。

次のステップ