Jaminan integritas data

Halaman ini menjelaskan cara menggunakan checksum untuk mempertahankan dan memverifikasi integritas data secret Anda saat menambahkan dan mengakses versi secret.

Anggap checksum sebagai sidik jari unik untuk data Anda. Ini adalah kode singkat yang dihasilkan dari data rahasia menggunakan algoritma CRC32C. Jika satu bit saja dalam data rahasia Anda berubah, checksum juga akan berubah. Hal ini memungkinkan Secret Manager mendeteksi perubahan atau kerusakan yang tidak disengaja.

Secret Manager menggunakan checksum dengan cara berikut:

  1. Saat Anda menambahkan versi secret:

    • Secret Manager menghitung checksum CRC32C dari data rahasia Anda.

    • Checksum ini disimpan bersama dengan data rahasia.

  2. Saat Anda mengakses versi secret:

    • Secret Manager menampilkan data rahasia beserta checksum-nya.

    • Anda dapat menggunakan checksum ini untuk memverifikasi bahwa data yang Anda terima sama persis dengan data yang disimpan di Secret Manager.

Untuk memastikan bahwa checksum kompatibel dengan struktur SecretPayload, checksum data rahasia harus dihitung menggunakan algoritma CRC32C dan dienkode sebagai bilangan bulat desimal. Respons SecretVersion menyertakan kolom yang menunjukkan apakah server telah berhasil menerima dan memvalidasi checksum ini.

Contoh berikut menunjukkan cara kerja checksum di Pengelola Secret:

API

Contoh ini menggunakan curl untuk menunjukkan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

Dengan data rahasia yang disimpan dalam file data, hitung checksum, menggunakan gcloud storage hash. Checksum harus dikonversi ke format desimal; checksum dienkode sebagai int64 dalam proto SecretPayload.

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

Dengan data secret yang diteruskan di command line, hitung checksum sebagai berikut:

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

Enkode data rahasia dengan base64 dan simpan sebagai variabel shell.

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

Panggil API menggunakan 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}}"

Saat versi secret diakses, SecretPayload yang ditampilkan akan berisi data beserta checksum-nya. Berikut adalah contoh respons:

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

Di konsol, saat Anda menambahkan versi secret, checksum akan otomatis dihitung saat Anda memasukkan nilai untuk secret.

Versi secret yang dienkripsi dengan kunci enkripsi yang dikelola pelanggan (CMEK) dan dibuat sebelum 16 Juli 2021 tidak memiliki checksum yang disimpan.

Langkah selanjutnya