Appliquer ou restreindre les types de chiffrement pour un bucket

Ce document explique comment configurer les méthodes de chiffrement autorisées ou restreintes pour les nouveaux objets d'un bucket Cloud Storage. Vous pouvez configurer un bucket pour appliquer ou limiter l'utilisation du chiffrement standard (chiffrement par défaut de Google), des clés de chiffrement gérées par le client (CMEK) ou des clés de chiffrement fournies par le client (CSEK) pour tous les nouveaux objets créés dans le bucket.

Par exemple, pour répondre à vos exigences de conformité concernant la gestion des clés de chiffrement, vous pouvez exiger que tous les nouveaux objets soient chiffrés avec le chiffrement standard ou CMEK, et limiter l'utilisation des clés de chiffrement fournies par le client.

Pour en savoir plus sur les méthodes de chiffrement disponibles, consultez Options de chiffrement des données.

Cloud Storage applique la configuration de chiffrement à toutes les actions qui créent un objet, comme l'importation, la copie ou la composition d'objets, ou la restauration d'un objet supprimé de façon réversible.

Avant de commencer

Pour obtenir les autorisations nécessaires pour configurer l'application du chiffrement pour un bucket, demandez à votre administrateur de vous accorder le rôle IAM Administrateur Storage (roles/storage.admin) sur le bucket. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour configurer l'application du chiffrement pour un bucket. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour configurer l'application du chiffrement pour un bucket :

  • Définissez la configuration lorsque vous créez un bucket : storage.buckets.create
  • Mettez à jour la configuration d'un bucket existant : storage.buckets.update

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Créer un bucket qui applique des types de chiffrement

Vous pouvez spécifier les méthodes de chiffrement autorisées ou restreintes pour les objets d'un bucket lorsque vous créez un bucket.

Si vous définissez une clé Cloud KMS par défaut pour le bucket, vous devez également autoriser le chiffrement à l'aide de clés CMEK ou de clés de chiffrement fournies par le client.

gcloud

  1. Créez un fichier JSON contenant les informations suivantes :

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

    Remplacez les éléments suivants :

    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement. Si vous omettez la configuration de l'application pour un type de chiffrement spécifique, ce type de chiffrement est autorisé par défaut.

  2. Exécutez la commande gcloud storage buckets create avec l'option --encryption-enforcement-file :

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

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket.
    • ENCRYPTION_ENFORCEMENT_FILE : chemin d'accès au fichier JSON que vous avez créé à l'étape précédente.

Bibliothèques clientes

C#

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C#.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.


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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Go.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Java.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.


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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage PHP.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Python.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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. Vous devez installer et initialiser la gcloud CLI afin de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les paramètres du bucket. Pour obtenir la liste complète des paramètres, consultez la documentation Buckets: Insert. Les paramètres suivants ne définissent que le nom du bucket et le chiffrement :

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

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket.
    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement. Si vous omettez la configuration de l'application pour un type de chiffrement spécifique, ce type de chiffrement est autorisé par défaut.

  3. Utilisez cURL pour appeler l'API JSON avec une requête de 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"

    Remplacez les éléments suivants :

    • JSON_FILE_NAME : chemin d'accès au fichier JSON que vous avez créé à l'étape précédente.
    • PROJECT_ID : ID ou numéro du projet pour votre bucket.

API XML

  1. Vous devez installer et initialiser la gcloud CLI afin de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier XML contenant les paramètres du bucket. Pour obtenir la liste complète des paramètres, consultez la documentation XML : Créer un bucket. Les paramètres suivants ne définissent que l'application du chiffrement :

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

    Remplacez les éléments suivants :

    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement. Si vous omettez la configuration de l'application pour un type de chiffrement spécifique, ce type de chiffrement est autorisé par défaut.

  3. Utilisez cURL pour appeler l'API XML avec une requête de 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"

    Remplacez les éléments suivants :

    • XML_FILE_NAME : chemin d'accès au fichier XML que vous avez créé à l'étape précédente.
    • PROJECT_ID : ID ou numéro du projet pour votre bucket.
    • BUCKET_NAME : nom du bucket.

Mettre à jour les types de chiffrement autorisés pour un bucket

Pour modifier les méthodes de chiffrement autorisées pour les nouveaux objets d'un bucket existant, procédez comme suit.

Si une clé KMS par défaut est définie pour le bucket, vous ne pouvez pas restreindre à la fois les clés de chiffrement CMEK et celles fournies par le client, car cela empêcherait la création de nouveaux objets. Autorisez CMEK ou CSEK sur un tel bucket, ou supprimez la clé Cloud KMS par défaut du bucket.

gcloud

  1. Créez un fichier JSON contenant les informations suivantes :

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

    Remplacez les éléments suivants :

    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement. Si vous omettez un type de chiffrement, la configuration existante est conservée.

  2. Exécutez la commande gcloud storage buckets update avec l'option --encryption-enforcement-file :

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

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket.
    • ENCRYPTION_ENFORCEMENT_FILE : chemin d'accès au fichier JSON que vous avez créé à l'étape précédente.

    L'application de la configuration mise à jour peut prendre jusqu'à deux minutes.

Bibliothèques clientes

C#

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C#.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.


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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Go.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Java.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.


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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage PHP.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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

Pour en savoir plus, consultez la documentation de référence des API Cloud Storage en langage Python.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour les bibliothèques clientes.

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. Vous devez installer et initialiser la gcloud CLI afin de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les informations suivantes :

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

    Remplacez les éléments suivants :

    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement. Si vous omettez un type de chiffrement, la configuration existante est conservée.

  3. Utilisez cURL pour appeler l'API JSON avec une requête de 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"

    Remplacez les éléments suivants :

    • JSON_FILE_NAME : chemin d'accès au fichier JSON que vous avez créé à l'étape précédente.
    • BUCKET_NAME : nom du bucket.

    L'application de la configuration mise à jour peut prendre jusqu'à deux minutes.

API XML

  1. Vous devez installer et initialiser la gcloud CLI afin de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier XML contenant les paramètres de chiffrement du bucket. Les paramètres suivants ne définissent que la configuration de l'application du chiffrement.

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

    Remplacez les éléments suivants :

    • STANDARD_ENCRYPTION_RESTRICTION_MODE : indique si le chiffrement à l'aide du chiffrement standard (chiffrement par défaut de Google) est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser le chiffrement standard.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser le chiffrement standard.
    • CMEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés CMEK est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des CMEK.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de CMEK.
    • CSEK_RESTRICTION_MODE : indique si le chiffrement à l'aide de clés de chiffrement fournies par le client est autorisé lors de la création d'objets dans ce bucket. Les valeurs suivantes sont acceptées :
      • NotRestricted : les nouveaux objets peuvent utiliser des clés de chiffrement fournies par le client.
      • FullyRestricted : les nouveaux objets ne peuvent pas utiliser de clés de chiffrement fournies par le client.

    Vous devez autoriser au moins un type de chiffrement.

  3. Utilisez cURL pour appeler l'API XML avec une requête PUT Bucket limitée à ?encryptionConfig :

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

    Remplacez les éléments suivants :

    • XML_FILE_NAME : chemin d'accès au fichier XML que vous avez créé à l'étape précédente.
    • BUCKET_NAME : nom du bucket.

    L'application de la configuration mise à jour peut prendre jusqu'à deux minutes.

Afficher les paramètres de chiffrement d'un bucket

Pour savoir comment afficher les méthodes de chiffrement autorisées pour un bucket, consultez Obtenir les métadonnées d'un bucket.

Étapes suivantes