Applica o limita i tipi di crittografia per un bucket

Questo documento descrive come configurare i metodi di crittografia consentiti o limitati per i nuovi oggetti in un bucket Cloud Storage. Puoi configurare un bucket per applicare o limitare l'utilizzo della crittografia standard (crittografia predefinita di Google), delle chiavi di crittografia gestite dal cliente (CMEK) o delle chiavi di crittografia fornite dal cliente (CSEK) per tutti i nuovi oggetti creati all'interno del bucket.

Ad esempio, per soddisfare i requisiti di conformità relativi alla gestione delle chiavi di crittografia, puoi richiedere che tutti i nuovi oggetti vengano criptati con la crittografia standard o CMEK e limitare l'utilizzo delle chiavi di crittografia fornite dal cliente.

Per ulteriori informazioni sui metodi di crittografia disponibili, vedi Opzioni di crittografia dei dati.

Cloud Storage applica la configurazione della crittografia a tutte le azioni che creano un nuovo oggetto, ad esempio caricare un oggetto, copiarlo, comporre oggetti e ripristinare un oggetto eliminato temporaneamente.

Prima di iniziare

Per ottenere le autorizzazioni necessarie per configurare l'applicazione della crittografia per un bucket, chiedi all'amministratore di concederti il ruolo IAM Storage Admin (roles/storage.admin) sul bucket. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per configurare l'applicazione della crittografia per un bucket. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per configurare l'applicazione della crittografia per un bucket sono necessarie le seguenti autorizzazioni:

  • Imposta la configurazione durante la creazione di un nuovo bucket: storage.buckets.create
  • Aggiorna la configurazione di un bucket esistente: storage.buckets.update

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Crea un bucket che applichi i tipi di crittografia

Puoi specificare i metodi di crittografia consentiti o limitati per gli oggetti in un bucket quando crei un nuovo bucket.

Se imposti una chiave Cloud KMS predefinita per il bucket, devi anche consentire la crittografia utilizzando le chiavi di crittografia gestite dal cliente (CMEK) o le chiavi di crittografia fornite dal cliente.

gcloud

  1. Crea un file JSON contenente le seguenti informazioni:

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

    Sostituisci quanto segue:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia. Se ometti la configurazione dell'applicazione per un tipo di crittografia specifico, questo tipo di crittografia è consentito per impostazione predefinita.

  2. Utilizza il comando gcloud storage buckets create con il flag --encryption-enforcement-file:

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

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket.
    • ENCRYPTION_ENFORCEMENT_FILE: il percorso del file JSON creato nel passaggio precedente.

Librerie client

C#

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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.")

API REST

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni del bucket. Per un elenco completo delle impostazioni, consulta la documentazione Bucket: inserimento. Le seguenti impostazioni definiscono solo il nome del bucket e la crittografia:

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

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket.
    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia. Se ometti la configurazione dell'applicazione per un tipo di crittografia specifico, questo tipo di crittografia è consentito per impostazione predefinita.

  3. Utilizza cURL per chiamare l'API JSON con una richiesta 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"

    Sostituisci quanto segue:

    • JSON_FILE_NAME: il percorso del file JSON creato nel passaggio precedente.
    • PROJECT_ID: l'ID o il numero del progetto per il bucket.

API XML

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file XML che contenga le impostazioni per il bucket. Per un elenco completo delle impostazioni, consulta la documentazione XML: Create a bucket. Le seguenti impostazioni definiscono solo l'applicazione della crittografia:

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

    Sostituisci quanto segue:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia. Se ometti la configurazione dell'applicazione per un tipo di crittografia specifico, questo tipo di crittografia è consentito per impostazione predefinita.

  3. Utilizza cURL per chiamare l'API XML con una richiesta PUT Bucket:

    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"

    Sostituisci quanto segue:

    • XML_FILE_NAME: il percorso del file XML che hai creato nel passaggio precedente.
    • PROJECT_ID: l'ID o il numero del progetto per il bucket.
    • BUCKET_NAME: il nome del bucket.

Aggiorna i tipi di crittografia consentiti per un bucket

Per aggiornare i metodi di crittografia consentiti per i nuovi oggetti in un bucket esistente, completa i seguenti passaggi.

Se il bucket ha impostato una chiave KMS predefinita, non puoi limitare sia CMEK sia le chiavi di crittografia fornite dal cliente perché ciò impedirebbe la creazione di nuovi oggetti. Consenti CMEK o CSEK in questo bucket oppure rimuovi la chiave Cloud KMS predefinita dal bucket.

gcloud

  1. Crea un file JSON contenente le seguenti informazioni:

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

    Sostituisci quanto segue:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia. Se ometti un tipo di crittografia, la configurazione esistente viene mantenuta.

  2. Utilizza il comando gcloud storage buckets update con il flag --encryption-enforcement-file:

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

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket.
    • ENCRYPTION_ENFORCEMENT_FILE: il percorso del file JSON creato nel passaggio precedente.

    Potrebbero essere necessari fino a due minuti prima che la configurazione aggiornata diventi effettiva.

Librerie client

C#

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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'}")

API REST

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le seguenti informazioni:

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

    Sostituisci quanto segue:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia. Se ometti un tipo di crittografia, la configurazione esistente viene mantenuta.

  3. Utilizza cURL per chiamare l'API JSON con una richiesta PATCH Bucket:

    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"

    Sostituisci quanto segue:

    • JSON_FILE_NAME: il percorso del file JSON creato nel passaggio precedente.
    • BUCKET_NAME: il nome del bucket.

    Potrebbero essere necessari fino a due minuti prima che la configurazione aggiornata diventi effettiva.

API XML

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file XML che contenga le impostazioni di crittografia per il bucket. Le seguenti impostazioni definiscono solo la configurazione dell'applicazione della crittografia.

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

    Sostituisci quanto segue:

    • STANDARD_ENCRYPTION_RESTRICTION_MODE: Indica se la crittografia che utilizza la crittografia standard (crittografia predefinita di Google) è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare la crittografia standard.
      • FullyRestricted: i nuovi oggetti non possono utilizzare la crittografia standard.
    • CMEK_RESTRICTION_MODE: Indica se la crittografia con CMEK è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare le chiavi CMEK.
      • FullyRestricted: i nuovi oggetti non possono utilizzare CMEK.
    • CSEK_RESTRICTION_MODE: Indica se la crittografia con chiavi di crittografia fornite dal cliente è consentita durante la creazione di oggetti in questo bucket. Sono supportati i seguenti valori:
      • NotRestricted: i nuovi oggetti possono utilizzare chiavi di crittografia fornite dal cliente.
      • FullyRestricted: i nuovi oggetti non possono utilizzare chiavi di crittografia fornite dal cliente.

    Devi consentire almeno un tipo di crittografia.

  3. Utilizza cURL per chiamare l'API XML con una richiesta PUT Bucket con ambito ?encryptionConfig:

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

    Sostituisci quanto segue:

    • XML_FILE_NAME: il percorso del file XML che hai creato nel passaggio precedente.
    • BUCKET_NAME: il nome del bucket.

    Potrebbero essere necessari fino a due minuti prima che la configurazione aggiornata diventi effettiva.

Visualizzare le impostazioni di crittografia per un bucket

Per i passaggi per visualizzare i metodi di crittografia consentiti per un bucket, consulta Recuperare i metadati del bucket.

Passaggi successivi