適用される暗号化ルールに違反しているオブジェクトを再暗号化する

このページでは、Storage Intelligence アドバイザーを使用して、バケットの暗号化適用構成に違反するオブジェクトを特定して再暗号化する方法について説明します。

バケットの暗号化タイプを適用または制限すると、Cloud Storage はバケット内のすべての新しいオブジェクトまたは書き換えられたオブジェクトにその構成を適用します。ただし、構成が有効になる前にアップロードした既存のオブジェクトは、Cloud Storage によって自動的に再暗号化されません。これらのオブジェクトは、元の暗号化方法で暗号化されたままになります。利用可能な暗号化方法の詳細については、データ暗号化オプションをご覧ください。

Storage Intelligence アドバイザーは、制限された暗号化方法を使用するオブジェクトがバケットに含まれている場合に、オブジェクトが適用された暗号化ルールに違反しているという検出結果を表示します。検出結果は、指標とオブジェクト メタデータから検出された異常またはセキュリティ構成のギャップであり、注意が必要です。Storage Intelligence アドバイザーの概要については、Storage Intelligence アドバイザーについてをご覧ください。検出結果の一覧については、検出結果リファレンス カタログをご覧ください。

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

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

  • バケットは、enforcedEncryptionAllowedTypes 構成で 1 つ以上の暗号化方法を制限します。たとえば、標準暗号化(Google のデフォルトの暗号化、または GMEK)、顧客管理の暗号鍵(CMEK)、顧客指定の暗号鍵(CSEK)などです。
  • バケットに、encryptionType メタデータ フィールドがバケットの enforcedEncryptionAllowedTypes リストにないオブジェクトが 1 つ以上含まれている。

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

検出結果に対応する

検出結果に対応するには、各バケットで影響を受けるオブジェクトを特定し、許可された暗号化方式で非準拠オブジェクトを書き換えます。

  1. 検出結果の詳細を表示して、影響を受けるバケットと、許可されている暗号化タイプ(CMEK、GMEK、CSEK)を特定します。

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

    SELECT
      bucket,
      name,
      encryptionType
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType NOT IN (ALLOWED_ENCRYPTION_TYPES)
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

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

    • DATASET_NAME: BigQuery の Storage Insights リンクされたデータセットの名前。
    • BUCKET_NAME: 影響を受けるバケットの名前。
    • ALLOWED_ENCRYPTION_TYPES: バケットで許可される暗号化タイプのカンマ区切りのリスト('CMEK'、'CMEK', 'GMEK' など)。
  3. 次の表を使用して、ライブ オブジェクトの再暗号化方法を選択します。

    シナリオ 推奨される対処方法 詳細
    バケットで顧客管理の暗号鍵(CMEK)が許可されている CMEK でオブジェクトを再暗号化する ライブ GMEK オブジェクトの場合は、BigQuery から CSV マニフェスト ファイルをエクスポートし、ストレージ バッチ オペレーション ジョブを実行して、Cloud KMS 鍵でオブジェクトを書き換えます。CSEK で暗号化されたオブジェクトの場合は、gcloud storage objects update コマンドを実行します。
    バケットで標準の暗号化(GMEK)が許可されている 標準の暗号化(GMEK)でオブジェクトを再暗号化する バケットにデフォルトの Cloud KMS 鍵がないことを確認してから、--clear-encryption-key フラグを指定して gcloud storage objects update コマンドを使用し、影響を受けるオブジェクトを標準の暗号化で書き換えます。
    バケットでは顧客指定の暗号鍵(CSEK)のみが許可されます CSEK でオブジェクトを再暗号化する gcloud storage objects update コマンドを --encryption-key フラグとともに使用して、影響を受けるオブジェクトを AES-256 暗号鍵で書き換えます。

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

CMEK でオブジェクトを再暗号化する

バケットで顧客管理の暗号鍵(CMEK)が許可されている場合は、現在の暗号化方法に基づいて、影響を受けるオブジェクトを再暗号化します。

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

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

  1. BigQuery で次の EXPORT DATA クエリを実行して、標準暗号化(GMEK)を使用する影響を受けるライブ オブジェクトの Storage Insights データセットを使用して CSV マニフェストを作成します。

    EXPORT DATA OPTIONS(
      uri='gs://DESTINATION_BUCKET/manifests/objects_violating_enforced_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_enforced_policies_*.csv" \
      --rewrite-object="kms-key=KMS_KEY"

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

    • JOB_NAME: バッチジョブの一意の ID(re-encrypt-objects-job など)。
    • BUCKET_NAME: 影響を受けるバケットの名前。
    • DESTINATION_BUCKET: エクスポートされたマニフェスト ファイルを含むバケットの名前。
    • KMS_KEY: オブジェクトの暗号化に使用する Cloud KMS 鍵のリソース名。鍵はバケットと同じロケーションに存在し、projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY 形式を使用する必要があります。

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

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

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

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

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

標準暗号化(GMEK)でオブジェクトを再暗号化する

標準の暗号化(Google のデフォルトの暗号化、または GMEK)でオブジェクトを再暗号化するには、バケットにデフォルトの Cloud KMS 鍵がないことを確認し、影響を受ける各オブジェクトのカスタム暗号鍵をクリアします。

  1. バケットにデフォルトの Cloud KMS 鍵がないことを確認します。オブジェクトのカスタム暗号鍵を消去すると、Cloud Storage は標準の暗号化(GMEK)でオブジェクトを暗号化します。ただし、バケットにデフォルトの Cloud KMS 鍵がない場合に限ります。バケットにデフォルトの Cloud KMS 鍵がある場合、Cloud Storage はその鍵でオブジェクトを暗号化します。バケットでも CMEK が制限されている場合、書き換えは失敗します。

    バケットからデフォルトの Cloud KMS 鍵を削除するには、--clear-default-encryption-key フラグを指定して gcloud storage buckets update コマンドを実行します。

    gcloud storage buckets update gs://BUCKET_NAME \
      --clear-default-encryption-key

    BUCKET_NAME は、影響を受けるバケットの名前に置き換えます。

  2. --clear-encryption-key フラグを指定して gcloud storage objects update コマンドを使用し、影響を受けるオブジェクトを標準の暗号化で書き換えます。オブジェクトが顧客指定の暗号鍵(CSEK)で暗号化されている場合は、--decryption-keys フラグも指定します。

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

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

    • BUCKET_NAME: 影響を受けるバケットの名前。
    • OBJECT_NAME: 再暗号化するオブジェクトの名前。1 つのコマンドで複数のオブジェクトを更新するには、URI ワイルドカード(gs://BUCKET_NAME/** など)または --read-paths-from-stdin(-I) フラグを使用します。
    • DECRYPTION_KEY: オブジェクトが CSEK で暗号化されている場合、オブジェクトを暗号化する RFC 4648 base64 でエンコードされた AES-256 鍵。オブジェクトが CMEK で暗号化されている場合は、--decryption-keys フラグを省略します。

CSEK でオブジェクトを再暗号化する

バケットで顧客指定の暗号鍵(CSEK)のみが許可されている場合は、--encryption-key フラグを指定して gcloud storage objects update コマンドを使用し、影響を受けるオブジェクトを AES-256 暗号鍵で書き換えます。オブジェクトが別の CSEK で暗号化されている場合は、--decryption-keys フラグも指定します。

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

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

  • BUCKET_NAME: 影響を受けるバケットの名前。
  • OBJECT_NAME: 再暗号化するオブジェクトの名前。1 つのコマンドで複数のオブジェクトを更新するには、URI ワイルドカードまたは --read-paths-from-stdin(-I)フラグを使用します。
  • YOUR_ENCRYPTION_KEY: RFC 4648 の Base64 でエンコードされた AES-256 暗号鍵の文字列。
  • DECRYPTION_KEY: オブジェクトが別の CSEK で暗号化されている場合、オブジェクトを暗号化する RFC 4648 base64 でエンコードされた AES-256 鍵。オブジェクトが GMEK または CMEK で暗号化されている場合は、--decryption-keys フラグを省略します。

次のステップ