Assurance de l'intégrité des données

Cette page explique comment utiliser des sommes de contrôle pour maintenir et vérifier l'intégrité des données de votre secret lorsque vous ajoutez et accédez à des versions de secret.

Considérez une somme de contrôle comme une empreinte unique de vos données. Il s'agit d'un code court généré à partir des données secrètes à l'aide de l'algorithme CRC32C. Si un seul bit de vos données secrètes change, la somme de contrôle change également. Cela permet à Secret Manager de détecter toute modification ou corruption accidentelle.

Secret Manager utilise les sommes de contrôle de la manière suivante:

  1. Lorsque vous ajoutez une version de secret:

    • Secret Manager calcule la somme de contrôle CRC32C de vos données secrètes.

    • Cette somme de contrôle est stockée avec les données secrètes.

  2. Lorsque vous accédez à une version de secret:

    • Secret Manager renvoie les données secrètes ainsi que leur somme de contrôle.

    • Vous pouvez utiliser cette somme de contrôle pour vérifier que les données que vous avez reçues sont exactement les mêmes que celles stockées dans Secret Manager.

Pour s'assurer que la somme de contrôle est compatible avec la structure SecretPayload, la somme de contrôle des données secrètes doit être calculée à l'aide de l'algorithme CRC32C et encodée en tant qu'entier décimal. La réponse SecretVersion inclut un champ indiquant si le serveur a bien reçu et validé cette somme de contrôle.

L'exemple suivant montre comment fonctionnent les sommes de contrôle dans Secret Manager:

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.

Avec des données secrètes stockées dans un fichier de données, calculez la somme de contrôle à l'aide de la fonction de hachage gcloud Storage. Le somme de contrôle doit être convertie au format décimal. Elle est encodée en tant que int64 dans le protocole SecretPayload.

$ gcloud storage hash "/path/to/file.txt" --hex

Avec les données secrètes transmises sur la ligne de commande, calculez la somme de contrôle comme suit:

$ gcloud storage hash --hex cat <(echo ${SECRET_DATA})

Encodez en base64 les données du secret et enregistrez-les comme variable d'interface système.

$ SECRET_DATA=$(echo "seCr3t" | base64)

Appelez l'API à l'aide de curl.

$ curl "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/secret-id:addVersion" \
    --request "POST" \
    --header "authorization: Bearer $(gcloud auth print-access-token)" \
    --header "content-type: application/json" \
    --data "{\"payload\": {\"data\": \"${SECRET_DATA}\", \"data_crc32c\": $CHECKSUM}}"

Lorsque vous accédez à la version du secret, la SecretPayload renvoyée contient les données ainsi que leur somme de contrôle. Voici un exemple de réponse:

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "payload": {
    "data": "YQo=",
    "dataCrc32c": "163439259"
  }
}

Dans la console, lorsque vous ajoutez une version de secret, la somme de contrôle est calculée automatiquement lorsque vous saisissez une valeur pour le secret.

Les versions secrètes chiffrées avec des clés de chiffrement gérées par le client (CMEK) et créées avant le 16 juillet 2021 ne stockent pas de sommes de contrôle.

Étape suivante