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.

Pensa a un checksum come a 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 rileva eventuali modifiche o il danneggiamento.

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 archiviato insieme ai dati secret.

  2. Quando accedi a una versione del secret:

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

    • Puoi utilizzare questo checksum per verificare che i dati ricevuti 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 stampa-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione 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 in Base64 i dati secret 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 si accede alla versione del secret, il valore restituito SecretPayload che contiene i dati insieme al checksum. Di seguito è riportato un esempio di risposta:

{
  "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.

Versioni del secret criptate con chiavi di crittografia gestite dal cliente (CMEK) e creati prima del 16 luglio 2021 non hanno checksum archiviati.

Passaggi successivi