バケットの暗号化タイプを適用または制限する

このドキュメントでは、Cloud Storage バケット内の新しいオブジェクトで許可または制限される暗号化方法を構成する方法について説明します。バケット内で作成される新しいオブジェクトに対して、標準の暗号化(Google のデフォルトの暗号化)、顧客管理の暗号鍵(CMEK)、顧客指定の暗号鍵(CSEK)の使用を適用または制限するようにバケットを構成できます。

たとえば、ランサムウェア攻撃から保護するために、すべての新しいオブジェクトを標準の暗号化または CMEK で暗号化し、顧客指定の暗号鍵の使用を制限できます。

使用可能な暗号化方法の詳細については、データ暗号化オプションをご覧ください。

Cloud Storage は、オブジェクトのアップロード、オブジェクトのコピー、オブジェクトの構成、削除済み(復元可能)オブジェクトの復元など、新しいオブジェクトを作成するすべてのアクションに暗号化構成を適用します。

始める前に

バケットの暗号化の適用を構成するために必要な権限を取得するには、バケットに対するストレージ管理者 roles/storage.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、バケットの暗号化の適用を構成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

バケットの暗号化適用を構成するには、次の権限が必要です。

  • 新しいバケットを作成するときに構成を設定します。 storage.buckets.create
  • 既存のバケットの構成を更新します。 storage.buckets.update

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

暗号化タイプを適用するバケットを作成する

新しいバケットを作成するときに、バケット内のオブジェクトに対して許可または制限する暗号化方式を指定できます。

バケットにデフォルトの Cloud KMS 鍵を設定する場合は、CMEK または顧客指定の暗号鍵を使用した暗号化も許可する必要があります。

gcloud

  1. 次の情報が含まれる JSON ファイルを作成します。

    {
      "gmekEnforcement": {"restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"},
      "cmekEnforcement": {"restrictionMode": "CMEK_RESTRICTION_MODE"},
      "csekEnforcement": {"restrictionMode": "CSEK_RESTRICTION_MODE"}
    }

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

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。特定の暗号化タイプの適用構成を省略すると、その暗号化タイプはデフォルトで許可されます。

  2. gcloud storage buckets create コマンドを使用し、--encryption-enforcement-file フラグを指定します。

    gcloud storage buckets create gs://BUCKET_NAME \
      --encryption-enforcement-file=ENCRYPTION_ENFORCEMENT_FILE

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

    • BUCKET_NAME: バケットの名前。
    • ENCRYPTION_ENFORCEMENT_FILE: 前の手順で作成した JSON ファイルのパス。

REST API

JSON API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. バケットの設定を含む JSON ファイルを作成します。設定の一覧については、 Buckets: Insert のドキュメントをご覧ください。次の設定では、バケット名と暗号化のみを定義します。

    {
      "name": "BUCKET_NAME",
      "encryption": {
        "googleManagedEncryptionEnforcementConfig": {
          "restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"
        },
        "customerManagedEncryptionEnforcementConfig": {
          "restrictionMode": "CMEK_RESTRICTION_MODE"
        },
        "customerSuppliedEncryptionEnforcementConfig": {
          "restrictionMode": "CSEK_RESTRICTION_MODE"
        }
      }
    }

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

    • BUCKET_NAME: バケットの名前。
    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。特定の暗号化タイプの適用構成を省略すると、その暗号化タイプはデフォルトで許可されます。

  3. cURL を使用して JSON API を呼び出し、POST Bucket リクエストを行います。

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b?project=PROJECT_ID"

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

    • JSON_FILE_NAME: 前の手順で作成した JSON ファイルのパス。
    • PROJECT_ID: バケットのプロジェクトの ID または番号。

XML API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. バケットの設定を含む XML ファイルを作成します。設定の一覧については、 XML: バケットを作成するのドキュメントをご覧ください。次の設定は、暗号化の適用のみを定義します。

    <CreateBucketConfiguration>
      <EncryptionConfiguration>
        <GoogleManagedEncryptionEnforcement>
          <RestrictionMode>STANDARD_ENCRYPTION_RESTRICTION_MODE</RestrictionMode>
        </GoogleManagedEncryptionEnforcement>
        <CustomerManagedEncryptionEnforcement>
          <RestrictionMode>CMEK_RESTRICTION_MODE</RestrictionMode>
        </CustomerManagedEncryptionEnforcement>
        <CustomerSuppliedEncryptionEnforcement>
          <RestrictionMode>CSEK_RESTRICTION_MODE</RestrictionMode>
        </CustomerSuppliedEncryptionEnforcement>
      </EncryptionConfiguration>
    </CreateBucketConfiguration>

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

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。特定の暗号化タイプの適用構成を省略すると、その暗号化タイプはデフォルトで許可されます。

  3. cURL を使用して、PUT Bucket リクエストで XML API を呼び出します。

    curl -X PUT --data-binary @XML_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "x-goog-project-id: PROJECT_ID" \
      "https://storage.googleapis.com/BUCKET_NAME"

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

    • XML_FILE_NAME: 前の手順で作成した XML ファイルのパス。
    • PROJECT_ID: バケットのプロジェクトの ID または番号。
    • BUCKET_NAME: バケットの名前。

バケットで許可されている暗号化タイプを更新する

既存のバケット内の新しいオブジェクトに許可される暗号化方法を更新する手順は次のとおりです。

バケットにデフォルトの KMS 鍵が設定されている場合、CMEK と顧客指定の暗号鍵の両方を制限することはできません。両方を制限すると、新しいオブジェクトを作成できなくなるためです。このようなバケットで CMEK または CSEK を許可するか、バケットからデフォルトの Cloud KMS 鍵を削除します。

gcloud

  1. 次の情報が含まれる JSON ファイルを作成します。

    {
      "gmekEnforcement": {"restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"},
      "cmekEnforcement": {"restrictionMode": "CMEK_RESTRICTION_MODE"},
      "csekEnforcement": {"restrictionMode": "CSEK_RESTRICTION_MODE"}
    }

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

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。暗号化タイプを省略すると、既存の構成が保持されます。

  2. gcloud storage buckets update コマンドを使用し、--encryption-enforcement-file フラグを指定します。

    gcloud storage buckets update gs://BUCKET_NAME \
      --encryption-enforcement-file=ENCRYPTION_ENFORCEMENT_FILE

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

    • BUCKET_NAME: バケットの名前。
    • ENCRYPTION_ENFORCEMENT_FILE: 前の手順で作成した JSON ファイルのパス。

    更新された構成が有効になるまでに、最長で 2 分かかることがあります。

REST API

JSON API

  1. gcloud CLI をインストールして初期化します。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
      "encryption": {
        "googleManagedEncryptionEnforcementConfig": {
          "restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"
        },
        "customerManagedEncryptionEnforcementConfig": {
          "restrictionMode": "CMEK_RESTRICTION_MODE"
        },
        "customerSuppliedEncryptionEnforcementConfig": {
          "restrictionMode": "CSEK_RESTRICTION_MODE"
        }
      }
    }

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

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。暗号化タイプを省略すると、既存の構成が保持されます。

  3. cURL を使用して、 PATCH Bucket リクエストで JSON API を呼び出します。

    curl -X PATCH --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"

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

    • JSON_FILE_NAME: 前の手順で作成した JSON ファイルのパス。
    • BUCKET_NAME: バケットの名前。

    更新された構成が有効になるまでに、最長で 2 分かかることがあります。

XML API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. バケットの暗号化設定を含む XML ファイルを作成します。次の設定では、暗号化の適用構成のみを定義します。

    <EncryptionConfiguration>
      <GoogleManagedEncryptionEnforcement>
        <RestrictionMode>STANDARD_ENCRYPTION_RESTRICTION_MODE</RestrictionMode>
      </GoogleManagedEncryptionEnforcement>
      <CustomerManagedEncryptionEnforcement>
        <RestrictionMode>CMEK_RESTRICTION_MODE</RestrictionMode>
      </CustomerManagedEncryptionEnforcement>
      <CustomerSuppliedEncryptionEnforcement>
        <RestrictionMode>CSEK_RESTRICTION_MODE</RestrictionMode>
      </CustomerSuppliedEncryptionEnforcement>
    </EncryptionConfiguration>

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

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: このバケットでオブジェクトを作成する際に、標準暗号化(Google のデフォルトの暗号化)を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは標準の暗号化を使用できます。
      • FullyRestricted: 新しいオブジェクトは標準の暗号化を使用できません。
    • CMEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに CMEK を使用した暗号化が許可されているかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは CMEK を使用できます。
      • FullyRestricted: 新しいオブジェクトは CMEK を使用できません。
    • CSEK_RESTRICTION_MODE: このバケットでオブジェクトを作成するときに、顧客指定の暗号鍵を使用した暗号化が許可されるかどうか。次の値を使用できます。
      • NotRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できます。
      • FullyRestricted: 新しいオブジェクトは顧客指定の暗号鍵を使用できません。

    少なくとも 1 つの暗号化タイプを許可する必要があります。

  3. cURL を使用して、?encryptionConfig をスコープとする PUT バケット リクエストで XML API を呼び出します。

    curl -X PUT --data-binary @XML_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"

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

    • XML_FILE_NAME: 前の手順で作成した XML ファイルのパス。
    • BUCKET_NAME: バケットの名前。

    更新された構成が有効になるまでに、最長で 2 分かかることがあります。

バケットの暗号化設定を表示する

バケットで許可されている暗号化方法を確認する手順については、バケットのメタデータを取得するをご覧ください。

次のステップ