Activer les clés de chiffrement gérées par le client pour Secret Manager

Cette rubrique traite de la prise en charge des clés de chiffrement gérées par le client (CMEK) dans Secret Manager.

Présentation

Secret Manager fournit des outils pour stocker et gérer les données sensibles de vos applications, ainsi que pour y accéder.

Par défaut, les secrets stockés dans Secret Manager sont chiffrés à l'aide du chiffrement par défaut de Google. Avec le chiffrement par défaut de Google, les charges utiles de secrets sont chiffrées par des clés gérées par Google avant d'être écrites sur un espace de stockage persistant, sans qu'aucune configuration ne soit requise.

Vous pouvez personnaliser le chiffrement utilisé par Secret Manager pour vos ressources en fournissant des clés de chiffrement de clé. Les clés de chiffrement de clés ne chiffrent pas directement vos données, mais les clés générées par Google utilisées pour les chiffrer. Vous pouvez créer des clés CMEK directement ou utiliser la clé automatique Cloud KMS (Preview) pour les créer en votre nom. Pour en savoir plus, consultez la présentation des clés automatiques.

Pour en savoir plus sur les options de chiffrement dans Google Cloud, consultez la page Chiffrement au repos par défaut. Pour en savoir plus sur les clés CMEK, y compris leurs avantages et leurs limites, consultez la page Clés de chiffrement gérées par le client.

Fonctionnement de CMEK dans Secret Manager

Avant d'écrire une version de secret sur un espace de stockage persistant à un emplacement particulier, Secret Manager chiffre les données à l'aide d'une clé de chiffrement des données unique (DEK). Cette DEK est ensuite chiffrée à l'aide d'une clé spécifique à l'instance répliquée, appelée clé de chiffrement de clé (KEK, Key Encryption Key) appartenant au service Secret Manager.

Lorsque vous utilisez une clé CMEK pour Secret Manager, la clé KEK est appelée "clé CMEK". Il s'agit d'une clé symétrique que vous gérez dans Cloud KMS. La clé CMEK doit se trouver dans le même emplacement Google Cloud que l'instance répliquée de la version du secret qu'elle chiffre. Vous pouvez également utiliser une clé Cloud EKM dans la stratégie CMEK pour le chiffrement et le déchiffrement.

Ce guide explique comment configurer Secret Manager pour qu'il utilise CMEK. Pour en savoir plus sur CMEK en général, y compris quand et pourquoi l'activer, consultez la documentation de Cloud Key Management Service.

Limites

CMEK n'est disponible que dans l'API v1 de Secret Manager et gcloud.

Avant de commencer

Vous pouvez choisir de stocker toutes les ressources dans le même projet, ou de stocker des secrets et des clés dans des projets distincts. Consultez la page Séparation des tâches de Cloud KMS pour mieux comprendre cette décision.

Remplissez les conditions préalables suivantes pour configurer Secret Manager et Cloud KMS:

  • Secret Manager :

    • Créez un projet ou utilisez un projet existant pour stocker vos ressources Secret Manager.
    • Si nécessaire, suivez la procédure décrite dans la section Configurer Secret Manager du guide de démarrage rapide de Secret Manager.
  • Cloud KMS :

    • Créez un projet ou utilisez un projet existant pour stocker vos ressources Cloud KMS.
    • Si nécessaire, activez l'API Cloud KMS.

Définissez les variables suivantes sur les ID de vos projets Secret Manager et Cloud KMS.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Authentifiez-vous sur Google Cloud :

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud auth login

Création manuelle ou automatique de clés

Vous pouvez créer des clés Cloud KMS manuellement ou utiliser la clé automatique Cloud KMS (bêta). La fonctionnalité de clé automatique simplifie la création et la gestion des clés Cloud KMS en automatisant le provisionnement et l'attribution. Avec la fonction de clé automatique, vous n'avez pas besoin de provisionner des trousseaux de clés, des clés et des comptes de service à l'avance. Ils sont générés à la demande lors de la création des ressources Secret Manager. Pour en savoir plus, consultez la page Présentation de la fonction de clé automatique. Pour activer la fonctionnalité de clé automatique pour Secret Manager, consultez la section Activer la clé automatique. Pour utiliser la fonctionnalité de clé automatique avec vos secrets, consultez la section Utiliser la fonctionnalité de clé automatique avec les ressources Secret Manager.

Les instructions de cette page concernent la création et l'attribution manuelles de clés Cloud KMS.

Créer une identité d'agent de service

Vous devez créer une identité d'agent de service pour chaque projet nécessitant des clés de chiffrement gérées par le client.

Pour créer une identité de service avec Google Cloud CLI, exécutez la commande suivante:

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

Cela renverra un nom d'identité de service au format suivant:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Enregistrez le nom de l'identité du service:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Vous accorderez à cette identité de service l'accès aux clés Cloud KMS CMEK utilisées pour chiffrer et déchiffrer vos secrets.

CMEK avec réplication automatique

Cette section traite des secrets configurés via une règle de réplication automatique.

Pour les secrets utilisant la règle de réplication automatique, la clé CMEK doit se trouver dans l'emplacement multirégional Cloud KMS global. Si vous utilisez une clé Cloud EKM, vous ne pouvez pas configurer votre secret pour qu'il utilise la réplication automatique, car les clés Cloud EKM ne sont pas disponibles dans la région global. Pour en savoir plus sur l'utilisation des clés Cloud EKM, consultez la page Ajouter une clé Cloud EKM à une stratégie CMEK.

Créez une clé Cloud KMS symétrique dans la région Cloud KMS global ou utilisez une clé existante. Cet exemple crée un trousseau de clés appelé secret-manager-cmek, puis crée une clé nommée my-cmek-key sur celui-ci.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Accordez à l'identité du service l'accès à Secret Manager pour chiffrer et déchiffrer des données à l'aide de la clé CMEK. Cette commande accorde le rôle Chiffreur/Déchiffreur Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sur la clé Cloud KMS my-cmek-key à l'identité du service.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Créer un secret avec réplication automatique. Le nom de ressource de la clé CMEK est stocké en tant que métadonnées sur le secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

Définissez la valeur de replication.automatic.customerManagedEncryption.kmsKeyName sur le nom de ressource de la clé CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Désormais, chaque fois qu'une version de secret est créée dans ce secret, sa charge utile est automatiquement chiffrée à l'aide de la clé avant d'être écrite sur un espace de stockage persistant, à condition que l'identité du service ait accès à la clé CMEK. Si l'identité du service perd l'accès ou si la clé devient indisponible, toute tentative de création d'une nouvelle version de secret ou d'accès à une version existante renvoie une erreur.

Ajouter une nouvelle version de secret. Notez que vous ne spécifiez pas le nom de ressource de la clé Cloud KMS. Il est lu à partir des métadonnées du secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

La version du secret est créée, même si l'appelant ne dispose pas d'un accès direct pour utiliser la clé CMEK. L'identité du service pour Secret Manager, plutôt que pour l'appelant, est responsable du chiffrement et du déchiffrement des secrets lors de leur lecture ou de leur écriture.

De même, vous n'avez pas besoin d'un accès direct à la clé CMEK pour accéder au secret. L'identité du service accède à la clé et chiffre ou déchiffre le secret en votre nom.

Accédez à la version du secret que vous venez de créer :

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

Mettre à jour la configuration CMEK

Créez de nouvelles clés KMS symétriques dans l'emplacement multirégional global de Cloud KMS.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Accordez à l'identité du service l'accès à Secret Manager pour chiffrer et déchiffrer des données à l'aide de la nouvelle clé CMEK. Cette commande attribue à l'identité du service le rôle Chiffreur / Déchiffreur Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sur la clé Cloud KMS my-other-key.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifiez la configuration CMEK sur un secret en mettant à jour la réplication sur le secret avec les nouveaux noms de ressources de clé Cloud KMS.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK avec réplication gérée par l'utilisateur

Cette section traite des secrets configurés à l'aide d'une règle de réplication gérée par l'utilisateur. Avec une règle de réplication gérée par l'utilisateur, vous contrôlez l'emplacement Google Cloud dans lequel le secret est stocké. Les secrets sont toujours accessibles depuis n'importe quel emplacement Google Cloud.

Les secrets associés à une règle de réplication gérée par l'utilisateur doivent utiliser des clés Cloud KMS qui correspondent exactement aux emplacements où les versions de secrets sont stockées. Les exemples de ce guide stockent un secret à deux emplacements distincts: us-east1 et us-central1. Les requêtes d'accès à ce secret sont acheminées vers l'un de ces emplacements.

Dans chacune des deux régions, créez un trousseau de clés et une clé Cloud KMS à des fins de chiffrement, ou utilisez une clé existante. Cet exemple crée un trousseau de clés nommé "secret-manager-cmek", puis crée une clé nommée "my-cmek-key" dans chaque région.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Accordez à l'identité du service l'autorisation pour Secret Manager de chiffrer et déchiffrer des données à l'aide de la clé CMEK en attribuant le rôle Chiffreur/Déchiffreur Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) pour chacune des clés CMEK individuellement ou pour toutes les clés du projet.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Créer un secret CMEK activé dont la réplication est gérée par l'utilisateur Le nom de ressource de la clé CMEK est stocké en tant que métadonnées sur le secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

Définissez la valeur de replication.userManaged.replicas.customerManagedEncryption.kmsKeyName sur les noms de ressource des clés CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Désormais, chaque fois qu'une version de secret est créée dans ce secret, sa charge utile est automatiquement chiffrée à l'aide de la clé avant d'être écrite sur un espace de stockage persistant, à condition que l'identité du service ait accès à la clé CMEK. Si l'identité du service perd l'accès ou si la clé devient indisponible, toute tentative de création d'une nouvelle version de secret ou d'accès à une version existante renvoie une erreur.

Ajouter une nouvelle version de secret. Notez que vous ne spécifiez pas le nom de ressource de la clé Cloud KMS. Il est lu à partir des métadonnées du secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La version du secret est créée, même si l'appelant ne dispose pas d'un accès direct pour utiliser la clé CMEK. L'identité du service pour Secret Manager, plutôt que pour l'appelant, est responsable du chiffrement et du déchiffrement des secrets lors de leur lecture ou de leur écriture.

De même, vous n'avez pas besoin d'un accès direct à la clé CMEK pour accéder au secret. L'identité du service accède à la clé et chiffre ou déchiffre le secret en votre nom.

Accédez à la version du secret que vous venez de créer.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

Mettre à jour la configuration CMEK

Créez deux clés KMS symétriques dans les mêmes régions que le secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Accordez à l'identité du service l'accès à Secret Manager pour chiffrer et déchiffrer des données à l'aide des nouvelles clés CMEK. Cette commande accorde le rôle Chiffreur / Déchiffreur Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sur les clés Cloud KMS my-other-key à l'identité du service.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifiez la configuration CMEK sur un secret en mettant à jour la réplication sur le secret avec les nouveaux noms de ressources de clé Cloud KMS.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Pour mettre à jour plusieurs clés dans un secret simultanément, vous pouvez obtenir et définir la règle de réplication via un fichier.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Mettez à jour le fichier pour refléter la configuration CMEK souhaitée dans l'éditeur de votre choix. Définissez ensuite la nouvelle stratégie:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

Afficher la configuration CMEK de la version de secret

Pour inspecter les métadonnées d'une version de secret, y compris si elle est compatible avec CMEK et le nom de ressource de la version de clé CMEK, affichez ses métadonnées.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Cette opération renvoie le nom de ressource Cloud KMS complet de la version de clé utilisée pour chiffrer la version du secret.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Ajouter une clé Cloud EKM à une stratégie CMEK

Cette section explique comment ajouter une clé Cloud EKM à une stratégie CMEK. Ces étapes permettent d'utiliser une clé Cloud EKM pour chiffrer ou déchiffrer des secrets.

Étant donné que Cloud EKM n'est actuellement pas compatible avec l'emplacement multirégional global, les clés Cloud EKM ne peuvent être utilisées qu'avec des secrets configurés pour la réplication gérée par l'utilisateur.

Créez une clé symétrique dans la région Cloud KMS us-central1 (ou dans toute autre région à l'exception de global). Dans cet exemple, on crée un trousseau de clés nommé secret-manager-cmek-ekm, puis une clé appelée my-ekm-key sur le trousseau.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

Créez un trousseau de clés :

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Créez une clé dans ce trousseau:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

Ensuite, créez une version de my-ekm-key à l'aide de l'URI externe de la clé. Pour en savoir plus sur les URI externes des clés Cloud EKM, consultez la section Créer une clé externe.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Accordez à l'identité du service l'accès à Secret Manager pour chiffrer et déchiffrer des données à l'aide de la clé externe. Cette commande attribue à l'identité du service le rôle Chiffreur / Déchiffreur Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sur my-ekm-key.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Créez un secret compatible CMEK qui utilise une clé Cloud EKM.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Désormais, chaque fois qu'une version de secret est créée dans my-ekm-secret, sa charge utile est automatiquement chiffrée à l'aide de la clé Cloud EKM avant d'être écrite sur un espace de stockage persistant, à condition que l'identité du service ait accès à la clé. Si l'identité du service perd l'accès ou si la clé devient indisponible, toute tentative de création d'une nouvelle version de secret ou d'accès à une version existante renvoie une erreur.

Ajouter une nouvelle version de secret. Notez que le nom de ressource de la clé est lu à partir des métadonnées du secret.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La version du secret est créée, même si l'appelant ne dispose pas d'un accès direct pour utiliser la clé. L'identité du service pour Secret Manager, plutôt que pour l'appelant, est responsable du chiffrement et du déchiffrement des secrets lors de leur lecture ou de leur écriture.

Accédez à la version du secret que vous venez de créer. C'est là que l'identité du service accède à la clé et chiffre ou déchiffre le secret en votre nom.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

Désactiver les CMEK

Supprimez la configuration CMEK d'un secret en mettant à jour la règle de réplication.

gcloud

Pour utiliser Secret Manager dans la ligne de commande, commencez par installer la Google Cloud CLI ou passer à la version 378.0.0 ou ultérieure. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

Étapes suivantes

  • En savoir plus sur CMEK