Verschlüsselungstypen für einen Bucket erzwingen oder einschränken

In diesem Dokument wird beschrieben, wie Sie konfigurieren, welche Verschlüsselungsmethoden für neue Objekte in einem Cloud Storage-Bucket zulässig oder eingeschränkt sind. Sie können einen Bucket so konfigurieren, dass die Verwendung der Standardverschlüsselung (Google-Standardverschlüsselung), von Kunden verwalteter Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) oder von Kunden bereitgestellter Verschlüsselungsschlüssel (Customer-Supplied Encryption Keys, CSEK) für alle neuen Objekte, die im Bucket erstellt werden, erzwungen oder eingeschränkt wird.

So können Sie beispielsweise zur Erfüllung Ihrer Complianceanforderungen in Bezug auf die Verwaltung von Verschlüsselungsschlüsseln festlegen, dass alle neuen Objekte entweder mit der Standardverschlüsselung oder mit CMEK verschlüsselt werden müssen, und die Verwendung von vom Kunden bereitgestellten Verschlüsselungsschlüsseln einschränken.

Weitere Informationen zu den verfügbaren Verschlüsselungsmethoden finden Sie unter Datenverschlüsselungsoptionen.

Cloud Storage erzwingt die Verschlüsselungskonfiguration für alle Aktionen, die ein neues Objekt erstellen, z. B. das Hochladen eines Objekts, das Kopieren eines Objekts, das Zusammensetzen von Objekten und das Wiederherstellen eines vorläufig gelöschten Objekts.

Hinweis

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Storage Admin (roles/storage.admin) für den Bucket zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren der Verschlüsselungserzwingung für einen Bucket benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Konfigurieren der Verschlüsselungserzwingung für einen Bucket erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um die Verschlüsselung für einen Bucket zu erzwingen:

  • Legen Sie die Konfiguration beim Erstellen eines neuen Buckets fest: storage.buckets.create
  • Konfiguration für einen vorhandenen Bucket aktualisieren: storage.buckets.update

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Bucket erstellen, in dem Verschlüsselungstypen erzwungen werden

Sie können die Verschlüsselungsmethoden angeben, die für die Objekte in einem Bucket zulässig oder eingeschränkt sind, wenn Sie einen neuen Bucket erstellen.

Wenn Sie einen standardmäßigen Cloud KMS-Schlüssel für den Bucket festlegen, müssen Sie auch die Verschlüsselung mit CMEKs oder vom Kunden bereitgestellten Verschlüsselungsschlüsseln zulassen.

gcloud

  1. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

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

    Ersetzen Sie Folgendes:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen. Wenn Sie die Erzwingungskonfiguration für einen bestimmten Verschlüsselungstyp weglassen, ist dieser Verschlüsselungstyp standardmäßig zulässig.

  2. Führen Sie den Befehl gcloud storage buckets create mit dem Flag --encryption-enforcement-file aus.

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

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Buckets.
    • ENCRYPTION_ENFORCEMENT_FILE: der Pfad zur JSON-Datei, die Sie im vorherigen Schritt erstellt haben.

Clientbibliotheken

C#

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Go.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Java.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage PHP.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Python.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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 APIs

JSON-API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Erstellen Sie eine JSON-Datei mit den Einstellungen für den Bucket. Eine vollständige Liste der Einstellungen finden Sie in der Dokumentation zu Buckets: Insert. Die folgenden Einstellungen definieren nur den Bucket-Namen und die Verschlüsselung:

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

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: Der Name des Buckets.
    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen. Wenn Sie die Erzwingungskonfiguration für einen bestimmten Verschlüsselungstyp weglassen, ist dieser Verschlüsselungstyp standardmäßig zulässig.

  3. Verwenden Sie cURL, um die JSON API mit einer POST-Bucket-Anfrage aufzurufen:

    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"

    Ersetzen Sie Folgendes:

    • JSON_FILE_NAME: der Pfad zur JSON-Datei, die Sie im vorherigen Schritt erstellt haben.
    • PROJECT_ID: die ID oder Nummer des Projekts für Ihren Bucket.

XML API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Erstellen Sie eine XML-Datei mit den Einstellungen für den Bucket. Eine vollständige Liste der Einstellungen finden Sie in der Dokumentation XML: Bucket erstellen. Die folgenden Einstellungen definieren nur die Erzwingung der Verschlüsselung:

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

    Ersetzen Sie Folgendes:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen. Wenn Sie die Erzwingungskonfiguration für einen bestimmten Verschlüsselungstyp weglassen, ist dieser Verschlüsselungstyp standardmäßig zulässig.

  3. Verwenden Sie cURL, um die XML API mit einer PUT-Bucket-Anfrage aufzurufen:

    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"

    Ersetzen Sie Folgendes:

    • XML_FILE_NAME: der Pfad zur XML-Datei, die Sie im vorherigen Schritt erstellt haben.
    • PROJECT_ID: die ID oder Nummer des Projekts für Ihren Bucket.
    • BUCKET_NAME: der Name des Buckets.

Zulässige Verschlüsselungstypen für einen Bucket aktualisieren

So aktualisieren Sie die zulässigen Verschlüsselungsmethoden für neue Objekte in einem vorhandenen Bucket:

Wenn für den Bucket ein KMS-Standardschlüssel festgelegt ist, können Sie nicht sowohl CMEK- als auch vom Kunden bereitgestellte Verschlüsselungsschlüssel einschränken, da sonst keine neuen Objekte erstellt werden könnten. Lassen Sie entweder CMEK oder CSEK für einen solchen Bucket zu oder entfernen Sie den Cloud KMS-Standardschlüssel aus dem Bucket.

gcloud

  1. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

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

    Ersetzen Sie Folgendes:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen. Wenn Sie keinen Verschlüsselungstyp angeben, wird die vorhandene Konfiguration beibehalten.

  2. Führen Sie den Befehl gcloud storage buckets update mit dem Flag --encryption-enforcement-file aus.

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

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Buckets.
    • ENCRYPTION_ENFORCEMENT_FILE: der Pfad zur JSON-Datei, die Sie im vorherigen Schritt erstellt haben.

    Es kann bis zu zwei Minuten dauern, bis die aktualisierte Konfiguration wirksam wird.

Clientbibliotheken

C#

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Go.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Java.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage PHP.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Python.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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 APIs

JSON-API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

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

    Ersetzen Sie Folgendes:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen. Wenn Sie keinen Verschlüsselungstyp angeben, wird die vorhandene Konfiguration beibehalten.

  3. Verwenden Sie cURL, um die JSON API mit einer PATCH-Bucket-Anfrage aufzurufen:

    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"

    Ersetzen Sie Folgendes:

    • JSON_FILE_NAME: der Pfad zur JSON-Datei, die Sie im vorherigen Schritt erstellt haben.
    • BUCKET_NAME: der Name des Buckets.

    Es kann bis zu zwei Minuten dauern, bis die aktualisierte Konfiguration wirksam wird.

XML API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Erstellen Sie eine XML-Datei, die die Verschlüsselungseinstellungen für den Bucket enthält. Die folgenden Einstellungen definieren nur die Konfiguration für die Erzwingung der Verschlüsselung.

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

    Ersetzen Sie Folgendes:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit Standardverschlüsselung (Google-Standardverschlüsselung) beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können die Standardverschlüsselung verwenden.
      • FullyRestricted: Neue Objekte können nicht mit der Standardverschlüsselung verschlüsselt werden.
    • CMEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit CMEKs beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Neue Objekte können CMEKs verwenden.
      • FullyRestricted: Neue Objekte können keine CMEKs verwenden.
    • CSEK_RESTRICTION_MODE: Gibt an, ob die Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln beim Erstellen von Objekten in diesem Bucket zulässig ist. Folgende Werte werden unterstützt:
      • NotRestricted: Für neue Objekte können vom Kunden bereitgestellte Verschlüsselungsschlüssel verwendet werden.
      • FullyRestricted: Für neue Objekte können keine vom Kunden bereitgestellten Verschlüsselungsschlüssel verwendet werden.

    Sie müssen mindestens einen Verschlüsselungstyp zulassen.

  3. Verwenden Sie cURL, um die XML API mit einer PUT-Bucket-Anfrage aufzurufen, die auf ?encryptionConfig beschränkt ist:

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

    Ersetzen Sie Folgendes:

    • XML_FILE_NAME: der Pfad zur XML-Datei, die Sie im vorherigen Schritt erstellt haben.
    • BUCKET_NAME: der Name des Buckets.

    Es kann bis zu zwei Minuten dauern, bis die aktualisierte Konfiguration wirksam wird.

Verschlüsselungseinstellungen für einen Bucket ansehen

Eine Anleitung dazu, wie Sie herausfinden, welche Verschlüsselungsmethoden für einen Bucket zulässig sind, finden Sie unter Bucket-Metadaten abrufen.

Nächste Schritte