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 clĂ© principale : 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é qui ne sont plus nécessaires permet de réduire les coûts.

Configurer la rotation automatique

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. Pour 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 Ă  compter 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).Unix(),
			},
		},
	}

	// Call the API.
	result, err := client.CreateCryptoKey(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to create key: %w", err)
	}
	fmt.Fprintf(w, "Created key: %s\n", result.Name)
	return nil
}

Java

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Java et installez le SDK Cloud KMS pour Java.

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose;
import com.google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm;
import com.google.cloud.kms.v1.CryptoKeyVersionTemplate;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.cloud.kms.v1.KeyRingName;
import com.google.protobuf.Duration;
import com.google.protobuf.Timestamp;
import java.io.IOException;
import java.time.temporal.ChronoUnit;

public class CreateKeyRotationSchedule {

  public void createKeyRotationSchedule() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String id = "my-key";
    createKeyRotationSchedule(projectId, locationId, keyRingId, id);
  }

  // Create a new key that automatically rotates on a schedule.
  public void createKeyRotationSchedule(
      String projectId, String locationId, String keyRingId, String id) throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the parent name from the project, location, and key ring.
      KeyRingName keyRingName = KeyRingName.of(projectId, locationId, keyRingId);

      // Calculate the date 24 hours from now (this is used below).
      long tomorrow = java.time.Instant.now().plus(24, ChronoUnit.HOURS).getEpochSecond();

      // Build the key to create with a rotation schedule.
      CryptoKey key =
          CryptoKey.newBuilder()
              .setPurpose(CryptoKeyPurpose.ENCRYPT_DECRYPT)
              .setVersionTemplate(
                  CryptoKeyVersionTemplate.newBuilder()
                      .setAlgorithm(CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION))

              // Rotate every 30 days.
              .setRotationPeriod(
                  Duration.newBuilder().setSeconds(java.time.Duration.ofDays(30).getSeconds()))

              // Start the first rotation in 24 hours.
              .setNextRotationTime(Timestamp.newBuilder().setSeconds(tomorrow))
              .build();

      // Create the key.
      CryptoKey createdKey = client.createCryptoKey(keyRingName, id, key);
      System.out.printf("Created key with rotation schedule %s%n", createdKey.getName());
    }
  }
}

Node.js

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Node.js, puis installez le SDK Cloud KMS pour Node.js.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const id = 'my-rotating-encryption-key';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the parent key ring name
const keyRingName = client.keyRingPath(projectId, locationId, keyRingId);

async function createKeyRotationSchedule() {
  const [key] = await client.createCryptoKey({
    parent: keyRingName,
    cryptoKeyId: id,
    cryptoKey: {
      purpose: 'ENCRYPT_DECRYPT',
      versionTemplate: {
        algorithm: 'GOOGLE_SYMMETRIC_ENCRYPTION',
      },

      // Rotate the key every 30 days.
      rotationPeriod: {
        seconds: 60 * 60 * 24 * 30,
      },

      // Start the first rotation in 24 hours.
      nextRotationTime: {
        seconds: new Date().getTime() / 1000 + 60 * 60 * 24,
      },
    },
  });

  console.log(`Created rotating key: ${key.name}`);
  return key;
}

return createKeyRotationSchedule();

PHP

Pour exĂ©cuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\CreateCryptoKeyRequest;
use Google\Cloud\Kms\V1\CryptoKey;
use Google\Cloud\Kms\V1\CryptoKey\CryptoKeyPurpose;
use Google\Cloud\Kms\V1\CryptoKeyVersion\CryptoKeyVersionAlgorithm;
use Google\Cloud\Kms\V1\CryptoKeyVersionTemplate;
use Google\Protobuf\Duration;
use Google\Protobuf\Timestamp;

function create_key_rotation_schedule(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $id = 'my-key-with-rotation-schedule'
): CryptoKey {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the parent key ring name.
    $keyRingName = $client->keyRingName($projectId, $locationId, $keyRingId);

    // Build the key.
    $key = (new CryptoKey())
        ->setPurpose(CryptoKeyPurpose::ENCRYPT_DECRYPT)
        ->setVersionTemplate((new CryptoKeyVersionTemplate())
            ->setAlgorithm(CryptoKeyVersionAlgorithm::GOOGLE_SYMMETRIC_ENCRYPTION))

        // Rotate the key every 30 days.
        ->setRotationPeriod((new Duration())
            ->setSeconds(60 * 60 * 24 * 30)
        )

        // Start the first rotation in 24 hours.
        ->setNextRotationTime((new Timestamp())
            ->setSeconds(time() + 60 * 60 * 24)
        );

    // Call the API.
    $createCryptoKeyRequest = (new CreateCryptoKeyRequest())
        ->setParent($keyRingName)
        ->setCryptoKeyId($id)
        ->setCryptoKey($key);
    $createdKey = $client->createCryptoKey($createCryptoKeyRequest);
    printf('Created key with rotation: %s' . PHP_EOL, $createdKey->getName());

    return $createdKey;
}

Python

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

import time

from google.cloud import kms


def create_key_rotation_schedule(
    project_id: str, location_id: str, key_ring_id: str, key_id: str
) -> kms.CryptoKey:
    """
    Creates a new key in Cloud KMS that automatically rotates.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to create (e.g. 'my-rotating-key').

    Returns:
        CryptoKey: Cloud KMS key.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the parent key ring name.
    key_ring_name = client.key_ring_path(project_id, location_id, key_ring_id)

    # Build the key.
    purpose = kms.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT
    algorithm = (
        kms.CryptoKeyVersion.CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION
    )
    key = {
        "purpose": purpose,
        "version_template": {
            "algorithm": algorithm,
        },
        # Rotate the key every 30 days.
        "rotation_period": {"seconds": 60 * 60 * 24 * 30},
        # Start the first rotation in 24 hours.
        "next_rotation_time": {"seconds": int(time.time()) + 60 * 60 * 24},
    }

    # Call the API.
    created_key = client.create_crypto_key(
        request={"parent": key_ring_name, "crypto_key_id": key_id, "crypto_key": key}
    )
    print(f"Created labeled key: {created_key.name}")
    return created_key

Ruby

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

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# id          = "my-key-with-rotation"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the parent key ring name.
key_ring_name = client.key_ring_path project: project_id, location: location_id, key_ring: key_ring_id

# Build the key.
key = {
  purpose:            :ENCRYPT_DECRYPT,
  version_template:   {
    algorithm: :GOOGLE_SYMMETRIC_ENCRYPTION
  },

  # Rotate the key every 30 days.
  rotation_period:    {
    seconds: 60 * 60 * 24 * 30
  },

  # Start the first rotation in 24 hours.
  next_rotation_time: {
    seconds: (Time.now + (60 * 60 * 24)).to_i
  }
}

# Call the API.
created_key = client.create_crypto_key parent: key_ring_name, crypto_key_id: id, crypto_key: key
puts "Created rotating key: #{created_key.name}"

API

Ces exemples utilisent curl comme client HTTP pour dĂ©montrer l'utilisation de l'API. Pour en savoir plus sur le contrĂŽle des accĂšs, consultez la page AccĂ©der Ă  l'API Cloud KMS.

Pour crĂ©er une clĂ©, utilisez la mĂ©thode CryptoKey.create :

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"purpose": "PURPOSE", "rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'

Remplacez les Ă©lĂ©ments suivants :

  • PURPOSE : objectif de la clĂ©.
  • 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). Pour en savoir plus, consultez la section CryptoKey.nextRotationTime.

Pour configurer la rotation automatique sur une clĂ© existante, procĂ©dez comme suit :

Console

  1. Accédez à la page Gestion des clés dans la console Google Cloud .

    Accéder à la page "Gestion des clés"

  2. Cliquez sur le nom du trousseau de clés contenant la clé pour laquelle vous souhaitez ajouter un calendrier de rotation.

  3. Cliquez sur la clé à laquelle vous souhaitez ajouter un calendrier de rotation.

  4. Dans l'en-tĂȘte, cliquez sur Modifier la pĂ©riode de rotation.

  5. Dans l'invite, choisissez de nouvelles valeurs pour les champs Période de rotation et Rotation à partir du.

  6. Dans l'invite, cliquez sur Enregistrer.

gcloud

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

gcloud kms keys update KEY_NAME \
    --location LOCATION \
    --keyring KEY_RING \
    --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 prochaine rotation, par exemple 2023-01-01T01:02:03. Vous pouvez omettre --next-rotation-time pour planifier la prochaine 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 UpdateKeyAddRotationSample
{
    public CryptoKey UpdateKeyAddRotation(string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            // Provide the name of the key to update.
            CryptoKeyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId),

            // 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(),
            }
        };

        // Build the update mask.
        FieldMask fieldMask = new FieldMask
        {
            Paths = { "rotation_period", "next_rotation_time" },
        };

        // Call the API.
        CryptoKey result = client.UpdateCryptoKey(key, fieldMask);

        // Return the updated key.
        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"
	fieldmask "google.golang.org/genproto/protobuf/field_mask"
	"google.golang.org/protobuf/types/known/durationpb"
	"google.golang.org/protobuf/types/known/timestamppb"
)

// addRotationSchedule updates a key to add a rotation schedule. If the key
// already has a rotation schedule, it is overwritten.
func addRotationSchedule(w io.Writer, name string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"

	// 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.UpdateCryptoKeyRequest{
		CryptoKey: &kmspb.CryptoKey{
			// Provide the name of the key to update
			Name: name,

			// 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).Unix(),
			},
		},
		UpdateMask: &fieldmask.FieldMask{
			Paths: []string{"rotation_period", "next_rotation_time"},
		},
	}

	// Call the API.
	result, err := client.UpdateCryptoKey(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to update key: %w", err)
	}
	fmt.Fprintf(w, "Updated key: %s\n", result.Name)
	return nil
}

Java

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Java et installez le SDK Cloud KMS pour Java.

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose;
import com.google.cloud.kms.v1.CryptoKeyName;
import com.google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm;
import com.google.cloud.kms.v1.CryptoKeyVersionTemplate;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.protobuf.Duration;
import com.google.protobuf.FieldMask;
import com.google.protobuf.Timestamp;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;
import java.time.temporal.ChronoUnit;

public class UpdateKeyAddRotation {

  public void updateKeyAddRotation() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String keyId = "my-key";
    updateKeyAddRotation(projectId, locationId, keyRingId, keyId);
  }

  // Update a key to add or change a rotation schedule.
  public void updateKeyAddRotation(
      String projectId, String locationId, String keyRingId, String keyId) throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the name from the project, location, and key ring.
      CryptoKeyName cryptoKeyName = CryptoKeyName.of(projectId, locationId, keyRingId, keyId);

      // Calculate the date 24 hours from now (this is used below).
      long tomorrow = java.time.Instant.now().plus(24, ChronoUnit.HOURS).getEpochSecond();

      // Build the key to update with a rotation schedule.
      CryptoKey key =
          CryptoKey.newBuilder()
              .setName(cryptoKeyName.toString())
              .setPurpose(CryptoKeyPurpose.ENCRYPT_DECRYPT)
              .setVersionTemplate(
                  CryptoKeyVersionTemplate.newBuilder()
                      .setAlgorithm(CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION))

              // Rotate every 30 days.
              .setRotationPeriod(
                  Duration.newBuilder().setSeconds(java.time.Duration.ofDays(30).getSeconds()))

              // Start the first rotation in 24 hours.
              .setNextRotationTime(Timestamp.newBuilder().setSeconds(tomorrow))
              .build();

      // Construct the field mask.
      FieldMask fieldMask = FieldMaskUtil.fromString("rotation_period,next_rotation_time");

      // Update the key.
      CryptoKey updatedKey = client.updateCryptoKey(key, fieldMask);
      System.out.printf("Updated key %s%n", updatedKey.getName());
    }
  }
}

Node.js

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Node.js, puis installez le SDK Cloud KMS pour Node.js.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';
// const versionId = '123';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the key name
const keyName = client.cryptoKeyPath(projectId, locationId, keyRingId, keyId);

async function updateKeyAddRotation() {
  const [key] = await client.updateCryptoKey({
    cryptoKey: {
      name: keyName,

      // Rotate the key every 30 days.
      rotationPeriod: {
        seconds: 60 * 60 * 24 * 30,
      },

      // Start the first rotation in 24 hours.
      nextRotationTime: {
        seconds: new Date().getTime() / 1000 + 60 * 60 * 24,
      },
    },
    updateMask: {
      paths: ['rotation_period', 'next_rotation_time'],
    },
  });

  console.log(`Updated rotation for: ${key.name}`);
  return key;
}

return updateKeyAddRotation();

PHP

Pour exĂ©cuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\CryptoKey;
use Google\Cloud\Kms\V1\UpdateCryptoKeyRequest;
use Google\Protobuf\Duration;
use Google\Protobuf\FieldMask;
use Google\Protobuf\Timestamp;

function update_key_add_rotation(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key'
): CryptoKey {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the key name.
    $keyName = $client->cryptoKeyName($projectId, $locationId, $keyRingId, $keyId);

    // Build the key.
    $key = (new CryptoKey())
        ->setName($keyName)

        // Rotate the key every 30 days.
        ->setRotationPeriod((new Duration())
            ->setSeconds(60 * 60 * 24 * 30)
        )

        // Start the first rotation in 24 hours.
        ->setNextRotationTime((new Timestamp())
            ->setSeconds(time() + 60 * 60 * 24)
        );

    // Create the field mask.
    $updateMask = (new FieldMask())
        ->setPaths(['rotation_period', 'next_rotation_time']);

    // Call the API.
    $updateCryptoKeyRequest = (new UpdateCryptoKeyRequest())
        ->setCryptoKey($key)
        ->setUpdateMask($updateMask);
    $updatedKey = $client->updateCryptoKey($updateCryptoKeyRequest);
    printf('Updated key: %s' . PHP_EOL, $updatedKey->getName());

    return $updatedKey;
}

Python

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

import time

from google.cloud import kms


def update_key_add_rotation(
    project_id: str, location_id: str, key_ring_id: str, key_id: str
) -> kms.CryptoKey:
    """
    Add a rotation schedule to an existing key.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to use (e.g. 'my-key').

    Returns:
        CryptoKey: Updated Cloud KMS key.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key name.
    key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)

    key = {
        "name": key_name,
        "rotation_period": {
            "seconds": 60 * 60 * 24 * 30  # Rotate the key every 30 days.
        },
        "next_rotation_time": {
            "seconds": int(time.time())
            + 60 * 60 * 24  # Start the first rotation in 24 hours.
        },
    }

    # Build the update mask.
    update_mask = {"paths": ["rotation_period", "next_rotation_time"]}

    # Call the API.
    updated_key = client.update_crypto_key(
        request={"crypto_key": key, "update_mask": update_mask}
    )
    print(f"Updated key: {updated_key.name}")
    return updated_key

Ruby

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

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the parent key name.
key_name = client.crypto_key_path project:    project_id,
                                  location:   location_id,
                                  key_ring:   key_ring_id,
                                  crypto_key: key_id

# Build the key.
key = {
  name:               key_name,

  # Rotate the key every 30 days.
  rotation_period:    {
    seconds: 60 * 60 * 24 * 30
  },

  # Start the first rotation in 24 hours.
  next_rotation_time: {
    seconds: (Time.now + (60 * 60 * 24)).to_i
  }
}

# Build the field mask.
update_mask = { paths: ["rotation_period", "next_rotation_time"] }

# Call the API.
updated_key = client.update_crypto_key crypto_key: key, update_mask: update_mask
puts "Updated key: #{updated_key.name}"

API

Ces exemples utilisent curl comme client HTTP pour dĂ©montrer l'utilisation de l'API. Pour en savoir plus sur le contrĂŽle des accĂšs, consultez la page AccĂ©der Ă  l'API Cloud KMS.

Pour mettre Ă  jour une clĂ©, utilisez la mĂ©thode CryptoKey.patch :

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'

Remplacez les Ă©lĂ©ments suivants :

  • 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 prochaine rotation, par exemple 2023-01-01T01:02:03. Pour en savoir plus, consultez la section CryptoKey.nextRotationTime.

Effectuer une rotation manuelle d'une clé

Commencez par crĂ©er une nouvelle version de clĂ© :

Console

  1. Accédez à la page Gestion des clés dans la console Google Cloud .

    Accéder à la page "Gestion des clés"

  2. Cliquez sur le nom du trousseau de clés contenant la clé pour laquelle vous souhaitez créer une nouvelle version.

  3. Cliquez sur la clé pour laquelle vous souhaitez créer une nouvelle version.

  4. Dans l'en-tĂȘte, cliquez sur Effectuer une rotation.

  5. Dans l'invite, cliquez sur Effectuer une rotation pour confirmer.

gcloud

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

gcloud kms keys versions create \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION

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.

Les versions de clé sont numérotées dans l'ordre.

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;

public class CreateKeyVersionSample
{
    public CryptoKeyVersion CreateKeyVersion(string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the parent key name.
        CryptoKeyName keyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);

        // Build the key version.
        CryptoKeyVersion keyVersion = new CryptoKeyVersion { };

        // Call the API.
        CryptoKeyVersion result = client.CreateCryptoKeyVersion(keyName, keyVersion);

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

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
)

// createKeyVersion creates a new key version for the given key.
func createKeyVersion(w io.Writer, parent string) error {
	// parent := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"

	// 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.CreateCryptoKeyVersionRequest{
		Parent: parent,
	}

	// Call the API.
	result, err := client.CreateCryptoKeyVersion(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to create key version: %w", err)
	}
	fmt.Fprintf(w, "Created key version: %s\n", result.Name)
	return nil
}

Java

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Java et installez le SDK Cloud KMS pour Java.

import com.google.cloud.kms.v1.CryptoKeyName;
import com.google.cloud.kms.v1.CryptoKeyVersion;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import java.io.IOException;

public class CreateKeyVersion {

  public void createKeyVersion() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String keyId = "my-key";
    createKeyVersion(projectId, locationId, keyRingId, keyId);
  }

  // Create a new key version.
  public void createKeyVersion(String projectId, String locationId, String keyRingId, String keyId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the parent name from the project, location, and key ring.
      CryptoKeyName cryptoKeyName = CryptoKeyName.of(projectId, locationId, keyRingId, keyId);

      // Build the key version to create.
      CryptoKeyVersion keyVersion = CryptoKeyVersion.newBuilder().build();

      // Create the key.
      CryptoKeyVersion createdVersion = client.createCryptoKeyVersion(cryptoKeyName, keyVersion);
      System.out.printf("Created key version %s%n", createdVersion.getName());
    }
  }
}

Node.js

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Node.js, puis installez le SDK Cloud KMS pour Node.js.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the parent key name
const keyName = client.cryptoKeyPath(projectId, locationId, keyRingId, keyId);

async function createKeyVersion() {
  const [version] = await client.createCryptoKeyVersion({
    parent: keyName,
  });

  console.log(`Created key version: ${version.name}`);
  return version;
}

return createKeyVersion();

PHP

Pour exĂ©cuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\CreateCryptoKeyVersionRequest;
use Google\Cloud\Kms\V1\CryptoKeyVersion;

function create_key_version(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key'
): CryptoKeyVersion {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the parent key name.
    $keyName = $client->cryptoKeyName($projectId, $locationId, $keyRingId, $keyId);

    // Build the key version.
    $version = new CryptoKeyVersion();

    // Call the API.
    $createCryptoKeyVersionRequest = (new CreateCryptoKeyVersionRequest())
        ->setParent($keyName)
        ->setCryptoKeyVersion($version);
    $createdVersion = $client->createCryptoKeyVersion($createCryptoKeyVersionRequest);
    printf('Created key version: %s' . PHP_EOL, $createdVersion->getName());

    return $createdVersion;
}

Python

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

from google.cloud import kms


def create_key_version(
    project_id: str, location_id: str, key_ring_id: str, key_id: str
) -> kms.CryptoKey:
    """
    Creates a new version of the given key.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key for which to create a new version (e.g. 'my-key').

    Returns:
        CryptoKeyVersion: Cloud KMS key version.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the parent key name.
    key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)

    # Build the key version.
    version = {}

    # Call the API.
    created_version = client.create_crypto_key_version(
        request={"parent": key_name, "crypto_key_version": version}
    )
    print(f"Created key version: {created_version.name}")
    return created_version

Ruby

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

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the parent key name.
key_name = client.crypto_key_path project:    project_id,
                                  location:   location_id,
                                  key_ring:   key_ring_id,
                                  crypto_key: key_id

# Build the version.
version = {}

# Call the API.
created_version = client.create_crypto_key_version parent: key_name, crypto_key_version: version
puts "Created key version: #{created_version.name}"

API

Ces exemples utilisent curl comme client HTTP pour dĂ©montrer l'utilisation de l'API. Pour en savoir plus sur le contrĂŽle des accĂšs, consultez la page AccĂ©der Ă  l'API Cloud KMS.

Pour effectuer manuellement la rotation d'une clé, commencez par créer une version de clé en appelant la méthode CryptoKeyVersions.create.

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions" \
    --request "POST" \
    --header "authorization: Bearer TOKEN"

Cette commande crée une version de clé, mais ne la définit pas comme version principale.

Pour définir votre nouvelle version de clé comme version primaire, consultez Définir une version de clé existante comme version primaire.

Si nécessaire, rechiffrez les données qui ont été chiffrées à l'aide de la version de clé précédente.

Définir une version existante comme version principale de la clé

Pour dĂ©finir une version de clĂ© diffĂ©rente comme version primaire pour une clĂ©, mettez Ă  jour la clĂ© avec les informations de la nouvelle version primaire. Une version de clĂ© doit ĂȘtre activĂ©e avant de pouvoir la configurer comme version primaire.

Console

  1. Accédez à la page Gestion des clés dans la console Google Cloud .

    Accéder à la page "Gestion des clés"

  2. Cliquez sur le nom du trousseau de clés contenant la clé dont vous souhaitez mettre à jour la version primaire.

  3. Cliquez sur la clé dont vous souhaitez mettre à jour la version primaire.

  4. Sur la ligne correspondant à la version de clé que vous souhaitez utiliser comme version primaire, cliquez sur Afficher plus .

  5. Cliquez sur Définir comme version primaire dans le menu.

  6. Dans l'invite de confirmation, cliquez sur Définir comme version primaire.

gcloud

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

gcloud kms keys update KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --primary-version KEY_VERSION

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.
  • KEY_VERSION : numĂ©ro de version de la nouvelle version de la clĂ© primaire.

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;

public class UpdateKeySetPrimarySample
{
    public CryptoKey UpdateKeySetPrimary(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key",
      string keyVersionId = "123")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key name.
        CryptoKeyName keyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);

        // Call the API.
        CryptoKey result = client.UpdateCryptoKeyPrimaryVersion(keyName, keyVersionId);

        // Return the updated key.
        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"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
)

// updateKeySetPrimary updates the primary key version on a Cloud KMS key.
func updateKeySetPrimary(w io.Writer, name, version string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"
	// version := "123"

	// 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.UpdateCryptoKeyPrimaryVersionRequest{
		Name:               name,
		CryptoKeyVersionId: version,
	}

	// Call the API.
	result, err := client.UpdateCryptoKeyPrimaryVersion(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to update key: %w", err)
	}
	fmt.Fprintf(w, "Updated key primary: %s\n", result.Name)

	return nil
}

Java

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Java et installez le SDK Cloud KMS pour Java.

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKeyName;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import java.io.IOException;

public class UpdateKeySetPrimary {

  public void updateKeySetPrimary() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String keyId = "my-key";
    String keyVersionId = "123";
    updateKeySetPrimary(projectId, locationId, keyRingId, keyId, keyVersionId);
  }

  // Update a key's primary version.
  public void updateKeySetPrimary(
      String projectId, String locationId, String keyRingId, String keyId, String keyVersionId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the name from the project, location, key ring, and keyId.
      CryptoKeyName cryptoKeyName = CryptoKeyName.of(projectId, locationId, keyRingId, keyId);

      // Create the key.
      CryptoKey createdKey = client.updateCryptoKeyPrimaryVersion(cryptoKeyName, keyVersionId);
      System.out.printf("Updated key primary version %s%n", createdKey.getName());
    }
  }
}

Node.js

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Node.js, puis installez le SDK Cloud KMS pour Node.js.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';
// const versionId = '123';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the key name
const keyName = client.cryptoKeyPath(projectId, locationId, keyRingId, keyId);

async function updateKeySetPrimary() {
  const [key] = await client.updateCryptoKeyPrimaryVersion({
    name: keyName,
    cryptoKeyVersionId: versionId,
  });

  console.log(`Set primary to ${versionId}`);
  return key;
}

return updateKeySetPrimary();

PHP

Pour exĂ©cuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\UpdateCryptoKeyPrimaryVersionRequest;

function update_key_set_primary(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key',
    string $versionId = '123'
) {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the key name.
    $keyName = $client->cryptoKeyName($projectId, $locationId, $keyRingId, $keyId);

    // Call the API.
    $updateCryptoKeyPrimaryVersionRequest = (new UpdateCryptoKeyPrimaryVersionRequest())
        ->setName($keyName)
        ->setCryptoKeyVersionId($versionId);
    $updatedKey = $client->updateCryptoKeyPrimaryVersion($updateCryptoKeyPrimaryVersionRequest);
    printf('Updated primary %s to %s' . PHP_EOL, $updatedKey->getName(), $versionId);

    return $updatedKey;
}

Ruby

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

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"
# version_id  = "123"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the parent key name.
key_name = client.crypto_key_path project:    project_id,
                                  location:   location_id,
                                  key_ring:   key_ring_id,
                                  crypto_key: key_id

# Call the API.
updated_key = client.update_crypto_key_primary_version name: key_name, crypto_key_version_id: version_id
puts "Updated primary #{updated_key.name} to #{version_id}"

Python

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

from google.cloud import kms


def update_key_set_primary(
    project_id: str, location_id: str, key_ring_id: str, key_id: str, version_id: str
) -> kms.CryptoKey:
    """
    Update the primary version of a key.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to use (e.g. 'my-key').
        version_id (string): ID of the key to make primary (e.g. '2').

    Returns:
        CryptoKey: Updated Cloud KMS key.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key name.
    key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)

    # Call the API.
    updated_key = client.update_crypto_key_primary_version(
        request={"name": key_name, "crypto_key_version_id": version_id}
    )
    print(f"Updated {updated_key.name} primary to {version_id}")
    return updated_key

API

Ces exemples utilisent curl comme client HTTP pour dĂ©montrer l'utilisation de l'API. Pour en savoir plus sur le contrĂŽle des accĂšs, consultez la page AccĂ©der Ă  l'API Cloud KMS.

Modifiez la version de la clé primaire en appelant la méthode CryptoKey.updatePrimaryVersion.

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:updatePrimaryVersion" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"cryptoKeyVersionId": "KEY_VERSION"}'

Remplacez les Ă©lĂ©ments suivants :

  • PROJECT_ID : ID du projet contenant le trousseau de clĂ©s.
  • LOCATION : emplacement Cloud KMS du trousseau de clĂ©s.
  • KEY_RING : nom du trousseau de clĂ©s qui inclut la clĂ©
  • KEY_NAME : nom de la clĂ©.
  • KEY_VERSION : numĂ©ro de version de la nouvelle version de la clĂ© primaire.

Lorsque vous modifiez la version de clĂ© primaire, la modification devient gĂ©nĂ©ralement cohĂ©rente en une minute. Toutefois, dans des cas exceptionnels, la propagation de cette modification peut prendre jusqu'Ă  trois heures. Pendant ce temps, la version primaire prĂ©cĂ©dente peut ĂȘtre utilisĂ©e pour chiffrer les donnĂ©es. Pour en savoir plus, consultez la page CohĂ©rence des ressources Cloud KMS.

Désactiver la rotation automatique

Pour dĂ©sactiver la rotation automatique sur une clĂ©, effacez le calendrier de rotation de la clĂ© :

Console

  1. Accédez à la page Gestion des clés dans la console Google Cloud .

    Accéder à la page "Gestion des clés"

  2. Cliquez sur le nom du trousseau de clés contenant la clé pour laquelle vous souhaitez supprimer le calendrier de rotation.

  3. Cliquez sur la clé pour laquelle vous souhaitez supprimer le calendrier de rotation.

  4. Dans l'en-tĂȘte, cliquez sur Modifier la pĂ©riode de rotation.

  5. Dans l'invite, cliquez sur le champ Période de rotation et sélectionnez Jamais (rotation manuelle).

  6. Dans l'invite, cliquez sur Enregistrer.

gcloud

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

gcloud kms keys update KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --remove-rotation-schedule

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.

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;

public class UpdateKeyRemoveRotationSample
{
    public CryptoKey UpdateKeyRemoveRotation(string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            CryptoKeyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId),
            RotationPeriod = null,
            NextRotationTime = null,
        };

        // Build the update mask.
        FieldMask fieldMask = new FieldMask
        {
            Paths = { "rotation_period", "next_rotation_time" },
        };

        // Call the API.
        CryptoKey result = client.UpdateCryptoKey(key, fieldMask);

        // Return the updated key.
        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"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	fieldmask "google.golang.org/genproto/protobuf/field_mask"
)

// removeRotationSchedule updates a key to remove a rotation schedule, if one
// exists.
func removeRotationSchedule(w io.Writer, name string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"

	// 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.UpdateCryptoKeyRequest{
		CryptoKey: &kmspb.CryptoKey{
			// Provide the name of the key to update
			Name: name,

			// Remove any rotation fields.
			RotationSchedule: nil,
			NextRotationTime: nil,
		},
		UpdateMask: &fieldmask.FieldMask{
			Paths: []string{"rotation_period", "next_rotation_time"},
		},
	}

	// Call the API.
	result, err := client.UpdateCryptoKey(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to update key: %w", err)
	}
	fmt.Fprintf(w, "Updated key: %s\n", result.Name)
	return nil
}

Java

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Java et installez le SDK Cloud KMS pour Java.

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKeyName;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

public class UpdateKeyRemoveRotation {

  public void updateKeyRemoveRotation() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String keyId = "my-key";
    updateKeyRemoveRotation(projectId, locationId, keyRingId, keyId);
  }

  // Update a key to remove all labels.
  public void updateKeyRemoveRotation(
      String projectId, String locationId, String keyRingId, String keyId) throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the name from the project, location, key ring, and keyId.
      CryptoKeyName cryptoKeyName = CryptoKeyName.of(projectId, locationId, keyRingId, keyId);

      // Build an empty key with no labels.
      CryptoKey key =
          CryptoKey.newBuilder()
              .setName(cryptoKeyName.toString())
              .clearRotationPeriod()
              .clearNextRotationTime()
              .build();

      // Construct the field mask.
      FieldMask fieldMask = FieldMaskUtil.fromString("rotation_period,next_rotation_time");

      // Create the key.
      CryptoKey createdKey = client.updateCryptoKey(key, fieldMask);
      System.out.printf("Updated key %s%n", createdKey.getName());
    }
  }
}

Node.js

Pour exĂ©cuter ce code, commencez par configurer un environnement de dĂ©veloppement Node.js, puis installez le SDK Cloud KMS pour Node.js.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';

// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');

// Instantiates a client
const client = new KeyManagementServiceClient();

// Build the key name
const keyName = client.cryptoKeyPath(projectId, locationId, keyRingId, keyId);

async function updateKeyRemoveRotation() {
  const [key] = await client.updateCryptoKey({
    cryptoKey: {
      name: keyName,
      rotationPeriod: null,
      nextRotationTime: null,
    },
    updateMask: {
      paths: ['rotation_period', 'next_rotation_time'],
    },
  });

  console.log(`Removed rotation for: ${key.name}`);
  return key;
}

return updateKeyRemoveRotation();

PHP

Pour exĂ©cuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.

use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\CryptoKey;
use Google\Cloud\Kms\V1\UpdateCryptoKeyRequest;
use Google\Protobuf\FieldMask;

function update_key_remove_rotation(
    string $projectId = 'my-project',
    string $locationId = 'us-east1',
    string $keyRingId = 'my-key-ring',
    string $keyId = 'my-key'
): CryptoKey {
    // Create the Cloud KMS client.
    $client = new KeyManagementServiceClient();

    // Build the key name.
    $keyName = $client->cryptoKeyName($projectId, $locationId, $keyRingId, $keyId);

    // Build the key.
    $key = (new CryptoKey())
        ->setName($keyName);

    // Create the field mask.
    $updateMask = (new FieldMask())
        ->setPaths(['rotation_period', 'next_rotation_time']);

    // Call the API.
    $updateCryptoKeyRequest = (new UpdateCryptoKeyRequest())
        ->setCryptoKey($key)
        ->setUpdateMask($updateMask);
    $updatedKey = $client->updateCryptoKey($updateCryptoKeyRequest);
    printf('Updated key: %s' . PHP_EOL, $updatedKey->getName());

    return $updatedKey;
}

Ruby

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

# TODO(developer): uncomment these values before running the sample.
# project_id  = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id      = "my-key"

# Require the library.
require "google/cloud/kms"

# Create the client.
client = Google::Cloud::Kms.key_management_service

# Build the parent key name.
key_name = client.crypto_key_path project:    project_id,
                                  location:   location_id,
                                  key_ring:   key_ring_id,
                                  crypto_key: key_id

# Build the key.
key = {
  name:               key_name,
  rotation_period:    nil,
  next_rotation_time: nil
}

# Build the field mask.
update_mask = { paths: ["rotation_period", "next_rotation_time"] }

# Call the API.
updated_key = client.update_crypto_key crypto_key: key, update_mask: update_mask
puts "Updated key: #{updated_key.name}"

Python

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

from google.cloud import kms


def update_key_remove_rotation(
    project_id: str, location_id: str, key_ring_id: str, key_id: str
) -> kms.CryptoKey:
    """
    Remove a rotation schedule from an existing key.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        key_id (string): ID of the key to use (e.g. 'my-key').

    Returns:
        CryptoKey: Updated Cloud KMS key.

    """

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key name.
    key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)

    key = {"name": key_name}

    # Build the update mask.
    update_mask = {"paths": ["rotation_period", "next_rotation_time"]}

    # Call the API.
    updated_key = client.update_crypto_key(
        request={"crypto_key": key, "update_mask": update_mask}
    )
    print(f"Updated key: {updated_key.name}")
    return updated_key

API

Ces exemples utilisent curl comme client HTTP pour dĂ©montrer l'utilisation de l'API. Pour en savoir plus sur le contrĂŽle des accĂšs, consultez la page AccĂ©der Ă  l'API Cloud KMS.

Pour mettre Ă  jour une clĂ©, utilisez la mĂ©thode CryptoKey.patch :

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"rotationPeriod": null, "nextRotationTime": null}'

Pour en savoir plus sur rotationPeriod et nextRotationTime, consultez keyRings.cryptoKeys.

Effectuer une rotation de clé externe

Effectuer une rotation d'une clé externe coordonnée

Vous pouvez configurer la rotation automatique pour les clés externes coordonnées symétriques. Vous pouvez également créer manuellement une version de clé pour les clés externes coordonnées symétriques ou asymétriques.

La rotation ou la création d'une version de clé entraßne le chiffrement de toutes les données nouvellement créées et protégées par cette clé à l'aide de la nouvelle version de clé. Les données protégées par une version de clé précédente ne sont pas rechiffrées. Par conséquent, votre gestionnaire de clés externe doit continuer à rendre le matériel de clé de la version précédente disponible pour utilisation.

Pour crĂ©er une version de clĂ© pour une clĂ© externe coordonnĂ©e, procĂ©dez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Gestion des clés.

    AccĂ©der Ă  Key Management

  2. Sélectionnez le trousseau de clés, puis la clé.

  3. Cliquez sur CrĂ©er une version. Un message indique que votre nouvelle version de clĂ© sera gĂ©nĂ©rĂ©e Ă  la fois dans Cloud KMS et dans votre EKM. Si vous voyez un champ Chemin d'accĂšs Ă  la clĂ© ou URI de la clĂ©, cela signifie que la clĂ© sĂ©lectionnĂ©e n'est pas une clĂ© externe coordonnĂ©e.

  4. Pour confirmer que vous souhaitez créer une version de clé, cliquez sur Créer une version.

La nouvelle version de clé s'affiche avec l'état Génération en attente. Pour les clés symétriques, les versions de clé créées manuellement ne sont pas automatiquement définies comme version de clé primaire. Vous pouvez définir votre nouvelle version de clé comme clé primaire.

gcloud CLI

Pour crĂ©er une version de clĂ© symĂ©trique et la dĂ©finir comme version principale, utilisez la commande kms keys versions create avec l'option --primary :

gcloud kms keys versions create \
  --key KEY_NAME \
  --keyring KEY_RING \
  --location LOCATION \
  --primary

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.

Pour crĂ©er une version de clĂ© asymĂ©trique ou une version de clĂ© symĂ©trique qui n'est pas la version de clĂ© principale, utilisez la commande kms keys versions create :

gcloud kms keys versions create \
  --key KEY_NAME \
  --keyring KEY_RING \
  --location LOCATION

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.

Faire pivoter une clĂ© Cloud EKM gĂ©rĂ©e manuellement via VPC

Commencez par effectuer la rotation du matĂ©riel de clĂ© externe dans votre gestionnaire de clĂ©s externe. Si cela gĂ©nĂšre un nouveau chemin d'accĂšs Ă  la clĂ©, vous devez effectuer la rotation ou crĂ©er une version de clĂ© Cloud EKM avec le nouveau chemin d'accĂšs. Pour les clĂ©s de chiffrement symĂ©triques, alternez la clĂ© Cloud EKM et spĂ©cifiez le nouveau chemin d'accĂšs Ă  la clĂ© depuis votre gestionnaire de clĂ©s externe. Pour les clĂ©s asymĂ©triques, crĂ©ez une version de clĂ© et spĂ©cifiez le nouveau chemin d'accĂšs Ă  la clĂ©.

La rotation ou la création d'une version de clé entraßne le chiffrement de toutes les données nouvellement créées et protégées par cette clé à l'aide de la nouvelle version de clé. Les données protégées par une version de clé précédente ne sont pas rechiffrées. Par conséquent, votre gestionnaire de clés externe doit continuer à rendre le matériel de clé de la version précédente disponible pour utilisation.

Si le matériel de la clé dans le systÚme partenaire de gestion des clés externes ne change pas, mais que le chemin d'accÚs à la clé change, vous pouvez mettre à jour le chemin d'accÚs externe de la clé sans effectuer la rotation de la clé.

Console

  1. Dans la console Google Cloud , accédez à la page Gestion des clés.

    AccĂ©der Ă  Key Management

  2. Sélectionnez le trousseau de clés, puis la clé.

  3. Cliquez sur Effectuer une rotation de la clé.

  4. Dans le champ Chemin d'accÚs à la clé, saisissez le chemin d'accÚs à la nouvelle version.

  5. Cliquez sur Faire pivoter la clé pour confirmer.

gcloud

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

Pour crĂ©er une version de clĂ© symĂ©trique et la dĂ©finir comme version principale, utilisez la commande kms keys versions create avec l'option --primary :

gcloud kms keys versions create \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --ekm-connection-key-path EXTERNAL_KEY_PATH \
    --primary

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.
  • EXTERNAL_KEY_PATH : chemin d'accĂšs Ă  la nouvelle version de la clĂ© externe.

Pour crĂ©er une version de clĂ© asymĂ©trique ou une version de clĂ© symĂ©trique qui n'est pas la version de clĂ© principale, utilisez la commande kms keys versions create :

gcloud kms keys versions create \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --ekm-connection-key-path EXTERNAL_KEY_PATH

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.
  • EXTERNAL_KEY_PATH : chemin d'accĂšs Ă  la nouvelle version de la clĂ© externe.

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

Une fois la version de clĂ© créée, vous pouvez l'utiliser comme n'importe quelle autre version de clĂ© Cloud KMS.

Faire pivoter une clĂ© Internet Cloud EKM gĂ©rĂ©e manuellement

Commencez par effectuer la rotation du matĂ©riel de clĂ© externe dans votre gestionnaire de clĂ©s externe. Si cela gĂ©nĂšre un nouvel URI, vous devez effectuer une rotation ou crĂ©er une version de clĂ© Cloud EKM avec le nouvel URI. Pour les clĂ©s de chiffrement symĂ©triques, effectuez la rotation de la clĂ© Cloud EKM et spĂ©cifiez le nouvel URI de clĂ© depuis votre gestionnaire de clĂ©s externe. Pour les clĂ©s asymĂ©triques, crĂ©ez une version de clĂ© et spĂ©cifiez le nouvel URI de clĂ©.

La rotation ou la création d'une version de clé entraßne le chiffrement de toutes les données nouvellement créées et protégées par cette clé à l'aide de la nouvelle version de clé. Les données protégées par une version de clé précédente ne sont pas rechiffrées. Par conséquent, votre gestionnaire de clés externe doit continuer à rendre le matériel de clé de la version précédente disponible pour utilisation.

Si le matériel de la clé dans le systÚme partenaire de gestion des clés externes ne change pas, mais que l'URI change, vous pouvez mettre à jour l'URI externe de la clé sans effectuer la rotation de la clé.

Console

  1. Dans la console Google Cloud , accédez à la page Gestion des clés.

    AccĂ©der Ă  Key Management

  2. Sélectionnez le trousseau de clés, puis la clé.

  3. Sélectionnez Faire pivoter la clé pour les clés symétriques ou Créer une version pour les clés asymétriques.

  4. Saisissez le nouvel URI de clé, puis sélectionnez Effectuer une rotation de clé pour les clés symétriques ou Créer une version pour les clés asymétriques.

La nouvelle version de clé devient la version primaire.

gcloud CLI

Pour crĂ©er une version de clĂ© symĂ©trique et la dĂ©finir comme version principale, utilisez la commande kms keys versions create avec l'option --primary :

gcloud kms keys versions create \
  --key KEY_NAME \
  --keyring KEY_RING \
  --location LOCATION \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

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.
  • EXTERNAL_KEY_URI : URI de la clĂ© de la nouvelle version de clĂ© externe.

Pour crĂ©er une version de clĂ© asymĂ©trique ou une version de clĂ© symĂ©trique qui n'est pas la version de clĂ© principale, utilisez la commande kms keys versions create :

gcloud kms keys versions create \
  --key KEY_NAME \
  --keyring KEY_RING \
  --location LOCATION \
  --external-key-uri EXTERNAL_KEY_URI

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.
  • EXTERNAL_KEY_URI : URI de la clĂ© de la nouvelle version de clĂ© externe.

Étapes suivantes