Effectuer la rotation d'une clé

Cette page explique comment effectuer la rotation automatique ou manuelle d'une clé. Pour en savoir plus sur la rotation des clés en général, consultez la page Rotation des clés.

Rôles requis

Pour obtenir les autorisations nécessaires pour faire pivoter les clés, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre clé :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour faire pivoter les clés. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour faire pivoter les clés :

  • Modifier la version de la clé primaire : cloudkms.cryptoKeys.update
  • Modifier ou désactiver la rotation automatique : cloudkms.cryptoKeys.update
  • Créer une version de clé : cloudkms.cryptoKeyVersions.create
  • Désactivez les anciennes versions de clé : cloudkms.cryptoKeyVersions.update
  • Rechiffrer des données :
    • cloudkms.cryptoKeyVersions.useToDecrypt
    • cloudkms.cryptoKeyVersions.useToEncrypt

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

Un seul utilisateur disposant d'un rôle personnalisé contenant toutes ces autorisations peut faire pivoter les clés et rechiffrer les données lui-même. Les utilisateurs disposant du rôle Administrateur Cloud KMS et du rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS peuvent collaborer pour faire pivoter les clés et rechiffrer les données. Respectez le principe du moindre privilège lorsque vous attribuez des rôles. Pour en savoir plus, consultez Autorisations et rôles.

Lors de la rotation d'une clé, les données chiffrées avec les versions de clé précédentes ne sont pas automatiquement rechiffrées. Pour en savoir plus, consultez Déchiffrer et rechiffrer. La rotation d'une clé n'entraîne ni la désactivation, ni la destruction automatique d'aucune version de clé existante. La destruction des versions de clé inutiles permet de réduire les coûts.

Configurer la rotation automatique

Créer une clé avec un calendrier de rotation personnalisé

Pour configurer la rotation automatique lors de la création d'une clé, procédez comme suit :

Console

Lorsque vous utilisez la console Google Cloud pour créer une clé, Cloud KMS définit automatiquement la période de rotation et la prochaine date de rotation. Vous pouvez choisir d'utiliser les valeurs par défaut ou d'en spécifier d'autres.

Pour spécifier une période de rotation et une date de début différentes, effectuez la procédure de création de la clé, mais effectuez les étapes ci-dessous avant de cliquer sur le bouton Create (Créer) :

  1. Dans le champ Période de rotation des clés, sélectionnez une option.

  2. Pour À partir du, sélectionnez la date à laquelle vous souhaitez que la première rotation automatique ait lieu. Vous pouvez laisser la valeur par défaut de À partir du pour que la première rotation automatique commence une période de rotation des clés après la création de la clé.

gcloud

Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour Google Cloud CLI.

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --rotation-period ROTATION_PERIOD \
    --next-rotation-time NEXT_ROTATION_TIME

Remplacez les éléments suivants :

  • KEY_NAME : nom de la clé.
  • KEY_RING : nom du trousseau de clés qui inclut la clé
  • LOCATION : emplacement Cloud KMS du trousseau de clés.
  • ROTATION_PERIOD : intervalle de rotation de la clé (par exemple, 30d pour effectuer une rotation de la clé tous les 30 jours). La période de rotation doit être d'au moins un jour et d'au plus 100 ans. Pour en savoir plus, consultez CryptoKey.rotationPeriod.
  • NEXT_ROTATION_TIME : code temporel auquel effectuer la première rotation, par exemple 2023-01-01T01:02:03. Vous pouvez omettre --next-rotation-time pour programmer la première rotation pour une période de rotation à partir du moment où vous exécutez la commande. Pour en savoir plus, consultez la page concernant CryptoKey.nextRotationTime

Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help.

C#

Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.


using Google.Cloud.Kms.V1;
using Google.Protobuf.WellKnownTypes;
using System;

public class CreateKeyRotationScheduleSample
{
    public CryptoKey CreateKeyRotationSchedule(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring",
      string id = "my-key-with-rotation-schedule")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the parent key ring name.
        KeyRingName keyRingName = new KeyRingName(projectId, locationId, keyRingId);

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            Purpose = CryptoKey.Types.CryptoKeyPurpose.EncryptDecrypt,
            VersionTemplate = new CryptoKeyVersionTemplate
            {
                Algorithm = CryptoKeyVersion.Types.CryptoKeyVersionAlgorithm.GoogleSymmetricEncryption,
            },

            // Rotate the key every 30 days.
            RotationPeriod = new Duration
            {
                Seconds = 60 * 60 * 24 * 30, // 30 days
            },

            // Start the first rotation in 24 hours.
            NextRotationTime = new Timestamp
            {
                Seconds = new DateTimeOffset(DateTime.UtcNow.AddHours(24)).ToUnixTimeSeconds(),
            }
        };

        // Call the API.
        CryptoKey result = client.CreateCryptoKey(keyRingName, id, key);

        // Return the result.
        return result;
    }
}

Go

Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.

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

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	"google.golang.org/protobuf/types/known/durationpb"
	"google.golang.org/protobuf/types/known/timestamppb"
)

// createKeyRotationSchedule creates a key with a rotation schedule.
func createKeyRotationSchedule(w io.Writer, parent, id string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring"
	// id := "my-key-with-rotation-schedule"

	// Create the client.
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("failed to create kms client: %w", err)
	}
	defer client.Close()

	// Build the request.
	req := &kmspb.CreateCryptoKeyRequest{
		Parent:      parent,
		CryptoKeyId: id,
		CryptoKey: &kmspb.CryptoKey{
			Purpose: kmspb.CryptoKey_ENCRYPT_DECRYPT,
			VersionTemplate: &kmspb.CryptoKeyVersionTemplate{
				Algorithm: kmspb.CryptoKeyVersion_GOOGLE_SYMMETRIC_ENCRYPTION,
			},

			// Rotate the key every 30 days
			RotationSchedule: &kmspb.CryptoKey_RotationPeriod{
				RotationPeriod: &durationpb.Duration{
					Seconds: int64(60 * 60 * 24 * 30), // 30 days
				},
			},

			// Start the first rotation in 24 hours
			NextRotationTime: &timestamppb.Timestamp{
				Seconds: time.Now().Add(24 * time.Hour).