Menerapkan atau membatasi jenis enkripsi untuk bucket

Dokumen ini menjelaskan cara mengonfigurasi metode enkripsi yang diizinkan atau dibatasi untuk objek baru dalam bucket Cloud Storage. Anda dapat mengonfigurasi bucket untuk menerapkan atau membatasi penggunaan enkripsi standar (enkripsi default Google), kunci enkripsi yang dikelola pelanggan (CMEK), atau kunci enkripsi yang disediakan pelanggan (CSEK) untuk setiap objek baru yang dibuat dalam bucket.

Misalnya, untuk membantu memenuhi persyaratan kepatuhan Anda terkait pengelolaan kunci enkripsi, Anda dapat mewajibkan semua objek baru dienkripsi dengan enkripsi standar atau CMEK, dan membatasi penggunaan kunci enkripsi yang disediakan pelanggan.

Untuk mengetahui informasi selengkapnya tentang metode enkripsi yang tersedia, lihat Opsi enkripsi data.

Cloud Storage menerapkan konfigurasi enkripsi untuk semua tindakan yang membuat objek baru, seperti mengupload objek, menyalin objek, menggabungkan objek, dan memulihkan objek yang dihapus sementara.

Sebelum memulai

Untuk mendapatkan izin yang diperlukan guna mengonfigurasi penerapan enkripsi untuk bucket, minta administrator untuk memberi Anda peran IAM Storage Admin (roles/storage.admin) di bucket. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengonfigurasi penerapan enkripsi untuk bucket. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengonfigurasi penerapan enkripsi untuk bucket:

  • Tetapkan konfigurasi saat membuat bucket baru: storage.buckets.create
  • Perbarui konfigurasi untuk bucket yang ada: storage.buckets.update

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Membuat bucket yang menerapkan jenis enkripsi

Anda dapat menentukan metode enkripsi yang diizinkan atau dibatasi untuk objek dalam bucket saat membuat bucket baru.

Jika Anda menetapkan kunci Cloud KMS default untuk bucket, Anda juga harus mengizinkan enkripsi menggunakan CMEK atau kunci enkripsi yang disediakan pelanggan.

gcloud

  1. Buat file JSON yang berisi informasi berikut:

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

    Ganti kode berikut:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi. Jika Anda menghilangkan konfigurasi penerapan untuk jenis enkripsi tertentu, jenis enkripsi tersebut akan diizinkan secara default.

  2. Gunakan perintah gcloud storage buckets create dengan flag --encryption-enforcement-file:

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

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket.
    • ENCRYPTION_ENFORCEMENT_FILE: jalur ke file JSON yang Anda buat di langkah sebelumnya.

Library klien

C#

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage C# API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;

public class BucketSetEncryptionEnforcementConfigSample
{
    /// <summary>
    /// Set the encryption enforcement configuration for a bucket.
    /// </summary>
    /// <param name="bucketName">The name of the bucket.</param>
    /// <param name="kmsKeyName">
    /// The full resource name of the Cloud KMS key (CMEK). 
    /// Required if <paramref name="enforceCmek"/> is true.
    /// </param>
    /// <param name="enforceCmek">If true, enforces Customer-Managed Encryption Key.</param>
    /// <param name="enforceGmek">If true, enforces Google-Managed Encryption Key.</param>
    /// <param name="enforceCsek">If true, enforces Customer-Supplied Encryption Key.</param>
    public Bucket.EncryptionData SetBucketEncryptionEnforcementConfig(
        string bucketName = "your-unique-bucket-name",
        string kmsKeyName = null,
        bool enforceCmek = false,
        bool enforceGmek = false,
        bool enforceCsek = false)
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName);

        if (bucket.Encryption == null)
        {
            bucket.Encryption = new Bucket.EncryptionData();
        }

        if (!string.IsNullOrEmpty(kmsKeyName))
        {
            bucket.Encryption.DefaultKmsKeyName = kmsKeyName;
            Console.WriteLine($"Default Key Set: {kmsKeyName}");
        }
        else
        {
            bucket.Encryption.DefaultKmsKeyName = null;
            Console.WriteLine("Default Key Set: None");
        }

        string cmek = (enforceGmek || enforceCsek) ? "FullyRestricted" : "NotRestricted";
        string gmek = (enforceCmek || enforceCsek) ? "FullyRestricted" : "NotRestricted";
        string csek = (enforceCmek || enforceGmek) ? "FullyRestricted" : "NotRestricted";

        string message = enforceCmek ? "CMEK-only enforcement policy"
            : enforceGmek ? "GMEK-only enforcement policy"
            : enforceCsek ? "CSEK-only enforcement policy"
            : "no encryption enforcement policy";

        bucket.Encryption.CustomerManagedEncryptionEnforcementConfig = new Bucket.EncryptionData.CustomerManagedEncryptionEnforcementConfigData { RestrictionMode = cmek };
        bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig = new Bucket.EncryptionData.CustomerSuppliedEncryptionEnforcementConfigData { RestrictionMode = csek };
        bucket.Encryption.GoogleManagedEncryptionEnforcementConfig = new Bucket.EncryptionData.GoogleManagedEncryptionEnforcementConfigData { RestrictionMode = gmek };

        if (message != null)
        {
            Console.WriteLine($"Bucket {bucketName} updated with {message}");
        }

        var updatedBucket = storage.UpdateBucket(bucket);
        return updatedBucket.Encryption;
    }
}

Go

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Go API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// setBucketEncryptionEnforcementConfig sets a bucket's encryption enforcement configuration.
func setBucketEncryptionEnforcementConfig(w io.Writer, projectID, bucketName string) error {
	// projectID := "my-project-id"
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*30)
	defer cancel()

	bucket := client.Bucket(bucketName)
	if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
		GoogleManagedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.FullyRestricted,
		},
		CustomerManagedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.NotRestricted,
		},
		CustomerSuppliedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.FullyRestricted,
		},
	}); err != nil {
		return fmt.Errorf("Bucket(%q).Create: %w", bucketName, err)
	}
	fmt.Fprintf(w, "Bucket %v encryption enforcement policies set.\n", bucketName)
	return nil
}

Java

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Java API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.BucketInfo.CustomerManagedEncryptionEnforcementConfig;
import com.google.cloud.storage.BucketInfo.CustomerSuppliedEncryptionEnforcementConfig;
import com.google.cloud.storage.BucketInfo.EncryptionEnforcementRestrictionMode;
import com.google.cloud.storage.BucketInfo.GoogleManagedEncryptionEnforcementConfig;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class SetBucketEncryptionEnforcementConfig {
  public static void setBucketEncryptionEnforcementConfig(String projectId, String bucketName)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {

      // Example 1: Enforce GMEK Only
      setGmekEnforcedPolicy(storage, "g-" + bucketName);

      // Example 2: Enforce CMEK Only
      setCmekEnforcedPolicy(storage, "c-" + bucketName);

      // Example 3: Restrict CSEK (Ransomware Protection)
      restrictCsekPolicy(storage, "rc-" + bucketName);
    }
  }

  public static void setGmekEnforcedPolicy(Storage storage, String bucketName) {
    GoogleManagedEncryptionEnforcementConfig gmekConfig =
        GoogleManagedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.NOT_RESTRICTED);
    CustomerManagedEncryptionEnforcementConfig cmekConfig =
        CustomerManagedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);
    CustomerSuppliedEncryptionEnforcementConfig csekConfig =
        CustomerSuppliedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);

    BucketInfo bucketInfo =
        BucketInfo.newBuilder(bucketName)
            .setGoogleManagedEncryptionEnforcementConfig(gmekConfig)
            .setCustomerManagedEncryptionEnforcementConfig(cmekConfig)
            .setCustomerSuppliedEncryptionEnforcementConfig(csekConfig)
            .build();

    Bucket bucket = storage.create(bucketInfo);
    System.out.println(
        "Bucket " + bucket.getName() + " created with GMEK-only enforcement policy.");
  }

  public static void setCmekEnforcedPolicy(Storage storage, String bucketName) {
    GoogleManagedEncryptionEnforcementConfig gmekConfig =
        GoogleManagedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);
    CustomerManagedEncryptionEnforcementConfig cmekConfig =
        CustomerManagedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.NOT_RESTRICTED);
    CustomerSuppliedEncryptionEnforcementConfig csekConfig =
        CustomerSuppliedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);

    BucketInfo bucketInfo =
        BucketInfo.newBuilder(bucketName)
            .setGoogleManagedEncryptionEnforcementConfig(gmekConfig)
            .setCustomerManagedEncryptionEnforcementConfig(cmekConfig)
            .setCustomerSuppliedEncryptionEnforcementConfig(csekConfig)
            .build();

    Bucket bucket = storage.create(bucketInfo);
    System.out.println(
        "Bucket " + bucket.getName() + " created with CMEK-only enforcement policy.");
  }

  public static void restrictCsekPolicy(Storage storage, String bucketName) {
    CustomerSuppliedEncryptionEnforcementConfig csekConfig =
        CustomerSuppliedEncryptionEnforcementConfig.of(
            EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);

    BucketInfo bucketInfo =
        BucketInfo.newBuilder(bucketName)
            .setCustomerSuppliedEncryptionEnforcementConfig(csekConfig)
            .build();

    Bucket bucket = storage.create(bucketInfo);
    System.out.println("Bucket " + bucket.getName() + " created with a policy to restrict CSEK.");
  }
}

PHP

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage PHP API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

use Google\Cloud\Storage\StorageClient;

/**
 * Creates a bucket with specific encryption enforcement (e.g., CMEK-only).
 *
 * @param string $bucketName The ID of your GCS bucket (e.g. "my-bucket").
 * @param string $kmsKeyName The name of the KMS key to be used as the default (e.g. "projects/my-project/...").
 */
function set_bucket_encryption_enforcement_config(string $bucketName, string $kmsKeyName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    // This configuration enforces that all objects uploaded to the bucket
    // must use Customer Managed Encryption Keys (CMEK).
    $options = [
        'encryption' => [
            'defaultKmsKeyName' => $kmsKeyName,
            'googleManagedEncryptionEnforcementConfig' => [
                'restrictionMode' => 'FullyRestricted',
            ],
            'customerSuppliedEncryptionEnforcementConfig' => [
                'restrictionMode' => 'FullyRestricted',
            ],
            'customerManagedEncryptionEnforcementConfig' => [
                'restrictionMode' => 'NotRestricted',
            ],
        ],
    ];
    $storage->createBucket($bucketName, $options);

    printf('Bucket %s created with encryption enforcement configuration.' . PHP_EOL, $bucketName);
}

Python

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Python API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import storage
from google.cloud.storage.bucket import EncryptionEnforcementConfig


def set_bucket_encryption_enforcement_config(bucket_name):
    """Creates a bucket with encryption enforcement configuration."""
    # The ID of your GCS bucket
    # bucket_name = "your-unique-bucket-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Setting restriction_mode to "FullyRestricted" for Google-managed encryption (GMEK)
    # means objects cannot be created using the default Google-managed keys.
    bucket.encryption.google_managed_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="FullyRestricted")
    )

    # Setting restriction_mode to "NotRestricted" for Customer-managed encryption (CMEK)
    # ensures that objects ARE permitted to be created using Cloud KMS keys.
    bucket.encryption.customer_managed_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="NotRestricted")
    )

    # Setting restriction_mode to "FullyRestricted" for Customer-supplied encryption (CSEK)
    # prevents objects from being created using raw, client-side provided keys.
    bucket.encryption.customer_supplied_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="FullyRestricted")
    )

    bucket.create()

    print(f"Created bucket {bucket.name} with Encryption Enforcement Config.")

REST API

JSON API

  1. Instal dan lakukan inisialisasigcloud CLI, yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file JSON yang berisi setelan untuk bucket. Untuk mengetahui daftar lengkap setelan, lihat dokumentasi Buckets: Insert. Setelan berikut hanya menentukan nama bucket dan enkripsi:

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

    Ganti kode berikut:

    • BUCKET_NAME: Nama bucket.
    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi. Jika Anda menghilangkan konfigurasi penerapan untuk jenis enkripsi tertentu, jenis enkripsi tersebut akan diizinkan secara default.

  3. Gunakan cURL untuk memanggil JSON API dengan permintaan Bucket POST:

    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"

    Ganti kode berikut:

    • JSON_FILE_NAME: jalur ke file JSON yang Anda buat di langkah sebelumnya.
    • PROJECT_ID: ID atau nomor project untuk bucket Anda.

XML API

  1. Instal dan lakukan inisialisasigcloud CLI, yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file XML yang berisi setelan untuk bucket. Untuk mengetahui daftar lengkap setelan, lihat dokumentasi XML: Membuat bucket. Setelan berikut hanya menentukan penerapan enkripsi:

    <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>

    Ganti kode berikut:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi. Jika Anda menghilangkan konfigurasi penerapan untuk jenis enkripsi tertentu, jenis enkripsi tersebut akan diizinkan secara default.

  3. Gunakan cURL untuk memanggil XML API dengan permintaan Bucket PUT:

    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"

    Ganti kode berikut:

    • XML_FILE_NAME: jalur ke file XML yang Anda buat di langkah sebelumnya.
    • PROJECT_ID: ID atau nomor project untuk bucket Anda.
    • BUCKET_NAME: nama bucket.

Memperbarui jenis enkripsi yang diizinkan untuk bucket

Untuk memperbarui metode enkripsi yang diizinkan untuk objek baru di bucket yang ada, selesaikan langkah-langkah berikut.

Jika bucket memiliki setelan kunci KMS default, Anda tidak dapat membatasi kunci enkripsi yang disediakan pelanggan dan CMEK karena tindakan tersebut akan mencegah pembuatan objek baru. Izinkan CMEK atau CSEK di bucket tersebut, atau hapus kunci Cloud KMS default dari bucket.

gcloud

  1. Buat file JSON yang berisi informasi berikut:

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

    Ganti kode berikut:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi. Jika Anda tidak menentukan jenis enkripsi, konfigurasi yang ada akan dipertahankan.

  2. Gunakan perintah gcloud storage buckets update dengan flag --encryption-enforcement-file:

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

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket.
    • ENCRYPTION_ENFORCEMENT_FILE: jalur ke file JSON yang Anda buat di langkah sebelumnya.

    Mungkin perlu waktu hingga dua menit agar konfigurasi yang diperbarui diterapkan.

Library klien

C#

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage C# API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;

public class BucketUpdateEncryptionEnforcementConfigSample
{
    /// <summary>
    /// Updates the encryption enforcement configuration of the bucket.
    /// </summary>
    /// <param name="bucketName">The name of the bucket.</param>
    /// <param name="encryptionData">The encryption configuration for the bucket.</param>
    public Bucket.EncryptionData BucketUpdateEncryptionEnforcementConfig(string bucketName = "your-unique-bucket-name", Bucket.EncryptionData encryptionData = null)
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName);

        if (bucket.Encryption is null
            || (bucket.Encryption.CustomerManagedEncryptionEnforcementConfig is null
                && bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig is null
                && bucket.Encryption.GoogleManagedEncryptionEnforcementConfig is null))
        {
            Console.WriteLine($"No Encryption Enforcement Configuration found for bucket {bucketName}");
            return bucket.Encryption;
        }

        bucket.Encryption = encryptionData;
        bucket = storage.UpdateBucket(bucket);
        Console.WriteLine($"The Encryption Enforcement Configuration has been updated for the bucket {bucketName}");
        return bucket.Encryption;
    }
}

Go

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Go API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// updateBucketEncryptionEnforcementConfig updates a bucket's encryption enforcement configuration.
func updateBucketEncryptionEnforcementConfig(w io.Writer, bucketName string) error {
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*30)
	defer cancel()

	bucket := client.Bucket(bucketName)
	if _, err := bucket.Update(ctx, storage.BucketAttrsToUpdate{
		GoogleManagedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.NotRestricted,
		},
		CustomerManagedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.FullyRestricted,
		},
		CustomerSuppliedEncryptionEnforcementConfig: &storage.EncryptionEnforcementConfig{
			RestrictionMode: storage.FullyRestricted,
		},
	}); err != nil {
		return fmt.Errorf("Bucket(%q).Update: %w", bucketName, err)
	}
	fmt.Fprintf(w, "Bucket %v encryption enforcement policies updated.\n", bucketName)
	return nil
}

Java

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Java API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo.CustomerManagedEncryptionEnforcementConfig;
import com.google.cloud.storage.BucketInfo.CustomerSuppliedEncryptionEnforcementConfig;
import com.google.cloud.storage.BucketInfo.EncryptionEnforcementRestrictionMode;
import com.google.cloud.storage.BucketInfo.GoogleManagedEncryptionEnforcementConfig;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class UpdateBucketEncryptionEnforcementConfig {
  public static void updateBucketEncryptionEnforcementConfig(String projectId, String bucketName)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket with CMEK and CSEK restricted
    // String bucketName = "your-unique-bucket-name";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {

      Bucket bucket = storage.get(bucketName);
      if (bucket == null) {
        System.out.println("Bucket " + bucketName + " not found.");
        return;
      }

      // 1. Update a specific type (e.g., change GMEK to FULLY_RESTRICTED)
      GoogleManagedEncryptionEnforcementConfig newGmekConfig =
          GoogleManagedEncryptionEnforcementConfig.of(
              EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);

      // 2. Remove a specific type (e.g., remove CMEK enforcement)
      CustomerManagedEncryptionEnforcementConfig newCmekConfig =
          CustomerManagedEncryptionEnforcementConfig.of(
              EncryptionEnforcementRestrictionMode.NOT_RESTRICTED);

      // For the update, need to specify all three configs, so keeping this same as before
      CustomerSuppliedEncryptionEnforcementConfig sameCsekConfig =
          CustomerSuppliedEncryptionEnforcementConfig.of(
              EncryptionEnforcementRestrictionMode.FULLY_RESTRICTED);

      bucket.toBuilder()
          .setGoogleManagedEncryptionEnforcementConfig(newGmekConfig)
          .setCustomerManagedEncryptionEnforcementConfig(newCmekConfig)
          .setCustomerSuppliedEncryptionEnforcementConfig(sameCsekConfig)
          .build()
          .update();

      System.out.println("Encryption enforcement policy updated for bucket " + bucketName);
      System.out.println("GMEK is now fully restricted, and CMEK enforcement has been removed.");
    }
  }
}

PHP

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage PHP API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

use Google\Cloud\Storage\StorageClient;

/**
 * Updates or removes encryption enforcement configurations from a bucket.
 *
 * @param string $bucketName The ID of your GCS bucket (e.g. "my-bucket").
 */
function update_bucket_encryption_enforcement_config(string $bucketName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    // Update a specific encryption type's restriction mode
    // This partial update preserves other existing encryption settings.
    $updateOptions = [
        'encryption' => [
            'googleManagedEncryptionEnforcementConfig' => [
                'restrictionMode' => 'FullyRestricted'
            ]
        ]
    ];
    $bucket->update($updateOptions);
    printf('Google-managed encryption enforcement set to FullyRestricted for %s.' . PHP_EOL, $bucketName);

    // Remove all encryption enforcement configurations altogether
    // Setting these values to null removes the policies from the bucket metadata.
    $clearOptions = [
        'encryption' => [
            'defaultKmsKeyName' => null,
            'googleManagedEncryptionEnforcementConfig' => null,
            'customerSuppliedEncryptionEnforcementConfig' => null,
            'customerManagedEncryptionEnforcementConfig' => null,
        ],
    ];

    $bucket->update($clearOptions);
    printf('All encryption enforcement configurations removed from bucket %s.' . PHP_EOL, $bucketName);
}

Python

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Python API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import storage
from google.cloud.storage.bucket import EncryptionEnforcementConfig


def update_bucket_encryption_enforcement_config(bucket_name):
    """Updates the encryption enforcement policy for a bucket."""
    # The ID of your GCS bucket with GMEK and CSEK restricted
    # bucket_name = "your-unique-bucket-name"

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)

    # Update a specific type (e.g., change GMEK to NotRestricted)
    bucket.encryption.google_managed_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="NotRestricted")
    )

    # Update another type (e.g., change CMEK to FullyRestricted)
    bucket.encryption.customer_managed_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="FullyRestricted")
    )

    # Keeping CSEK unchanged
    bucket.encryption.customer_supplied_encryption_enforcement_config = (
        EncryptionEnforcementConfig(restriction_mode="FullyRestricted")
    )

    bucket.patch()

    print(f"Encryption enforcement policy updated for bucket {bucket.name}.")

    gmek = bucket.encryption.google_managed_encryption_enforcement_config
    cmek = bucket.encryption.customer_managed_encryption_enforcement_config
    csek = bucket.encryption.customer_supplied_encryption_enforcement_config

    print(f"GMEK restriction mode: {gmek.restriction_mode if gmek else 'None'}")
    print(f"CMEK restriction mode: {cmek.restriction_mode if cmek else 'None'}")
    print(f"CSEK restriction mode: {csek.restriction_mode if csek else 'None'}")

REST API

JSON API

  1. Instal dan lakukan inisialisasigcloud CLI, yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file JSON yang berisi informasi berikut:

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

    Ganti kode berikut:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi. Jika Anda tidak menentukan jenis enkripsi, konfigurasi yang ada akan dipertahankan.

  3. Gunakan cURL untuk memanggil JSON API dengan permintaan Bucket PATCH:

    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"

    Ganti kode berikut:

    • JSON_FILE_NAME: jalur ke file JSON yang Anda buat di langkah sebelumnya.
    • BUCKET_NAME: nama bucket.

    Mungkin perlu waktu hingga dua menit agar konfigurasi yang diperbarui diterapkan.

XML API

  1. Instal dan lakukan inisialisasigcloud CLI, yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file XML yang berisi setelan enkripsi untuk bucket. Setelan berikut hanya menentukan konfigurasi penerapan enkripsi.

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

    Ganti kode berikut:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Apakah enkripsi menggunakan enkripsi standar (enkripsi default Google) diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan enkripsi standar.
      • FullyRestricted: objek baru tidak dapat menggunakan enkripsi standar.
    • CMEK_RESTRICTION_MODE: Apakah enkripsi menggunakan CMEK diizinkan saat membuat objek di bucket ini. Nilai berikut didukung:
      • NotRestricted: objek baru dapat menggunakan CMEK.
      • FullyRestricted: objek baru tidak dapat menggunakan CMEK.
    • CSEK_RESTRICTION_MODE: Apakah enkripsi menggunakan kunci enkripsi yang disediakan pelanggan diizinkan saat membuat objek di bucket ini. Nilai berikut ini didukung:
      • NotRestricted: objek baru dapat menggunakan kunci enkripsi yang disediakan pelanggan.
      • FullyRestricted: objek baru tidak dapat menggunakan kunci enkripsi yang disediakan pelanggan.

    Anda harus mengizinkan setidaknya satu jenis enkripsi.

  3. Gunakan cURL untuk memanggil XML API dengan permintaan Bucket PUT yang dicakup ke ?encryptionConfig:

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

    Ganti kode berikut:

    • XML_FILE_NAME: jalur ke file XML yang Anda buat di langkah sebelumnya.
    • BUCKET_NAME: nama bucket.

    Mungkin perlu waktu hingga dua menit agar konfigurasi yang diperbarui diterapkan.

Melihat setelan enkripsi untuk bucket

Untuk mengetahui langkah-langkah melihat metode enkripsi yang diizinkan untuk bucket, lihat Mendapatkan metadata bucket.

Langkah berikutnya