Garanzia dell'integrità dei dati

Questa pagina descrive come utilizzare i checksum per mantenere e verificare l'integrità dei dati del secret quando aggiungi e accedi alle versioni del secret.

Considera un checksum come un'impronta digitale univoca per i tuoi dati. Si tratta di un codice breve generato dai dati segreti utilizzando l'algoritmo CRC32C. Se anche un solo bit dei dati segreti cambia, cambia anche il checksum. In questo modo, Secret Manager può rilevare eventuali modifiche o alterazioni accidentali.

Secret Manager utilizza i checksum nei seguenti modi:

  1. Quando aggiungi una versione del secret:

    • Secret Manager calcola il checksum CRC32C dei dati dello secret.

    • Questo checksum viene memorizzato insieme ai dati della secret.

  2. Quando accedi a una versione del secret:

    • Secret Manager restituisce i dati dello secret insieme al relativo checksum.

    • Puoi utilizzare questo checksum per verificare che i dati che hai ricevuto siano esattamente gli stessi dei dati archiviati in Secret Manager.

Per garantire che il checksum sia compatibile con la struttura SecretPayload, il checksum dei dati della secret deve essere calcolato utilizzando l'algoritmo CRC32C e codificato come numero intero decimale. La risposta SecretVersion include un campo che indica se il server ha ricevuto e convalidato correttamente questo checksum.

L'esempio seguente mostra come funzionano i checksum in Secret Manager:

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. Su Compute Engine o GKE, devi autenticarti con l'ambito cloud-platform.

Con i dati segreti archiviati in un file di dati, calcola il checksum utilizzando gcloud storage hash. Il checksum deve essere convertito in formato decimale; viene codificato come int64 nel proto SecretPayload.

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

Con i dati del segreto passati sulla riga di comando, calcola il checksum come segue:

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

Codifica i dati segreti in base64 e salvali come variabile di shell.

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

Richiama l'API utilizzando 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}}"

Quando viene eseguito l'accesso alla versione del secret, il valore SecretPayload restituito contiene i dati e il relativo checksum. Di seguito è riportata una risposta di esempio:

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

Nella console, quando aggiungi una versione del segreto, il checksum viene calcolato automaticamente quando inserisci un valore per il segreto.

Le versioni dei secret criptate con chiavi di crittografia gestite dal cliente (CMEK) e create prima del 16 luglio 2021 non hanno i checksum memorizzati.

Passaggi successivi