Garantia de integridade dos dados

Nesta página, descrevemos como usar checksums para manter e verificar a integridade dos dados do seu secret ao adicionar e acessar versões dele.

Pense em um checksum como uma impressão digital exclusiva dos seus dados. É um código curto gerado com base nos dados secretos usando o algoritmo CRC32C. Se até mesmo um único bit nos seus dados secretos mudar, o checksum também vai mudar. Isso permite que o Secret Manager detecte modificações ou corrupções acidentais.

O Secret Manager usa checksums das seguintes maneiras:

  1. Ao adicionar uma versão do secret:

    • O Secret Manager calcula a soma de verificação CRC32C dos seus dados secretos.

    • Essa soma de verificação é armazenada com os dados secretos.

  2. Ao acessar uma versão do secret:

    • O Secret Manager retorna os dados secretos com a soma de verificação.

    • Use essa soma de verificação para verificar se os dados recebidos são exatamente iguais aos armazenados no Secret Manager.

Para garantir que a soma de verificação seja compatível com a estrutura SecretPayload, a soma de verificação dos dados secretos precisa ser calculada usando o algoritmo CRC32C e codificada como um número inteiro decimal. A resposta SecretVersion inclui um campo que indica se o servidor recebeu e validou a soma de verificação.

O exemplo a seguir mostra como os checksums funcionam no Secret Manager:

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

Com os dados secretos armazenados em um arquivo de dados, calcule o checksum usando gcloud storage hash. O checksum precisa ser convertido para o formato decimal. Ele é codificado como int64 no proto SecretPayload.

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

Com os dados secretos transmitidos na linha de comando, calcule o checksum da seguinte maneira:

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

Codifique os dados do secret em Base64 e salve-os como uma variável do shell.

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

Invoque a API usando curl.

$ curl "https://secretmanager.googleapis.com/v1/projects/project-id/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 a versão do secret é acessada, o SecretPayload retornado contém os dados com a soma de verificação. Confira um exemplo de resposta:

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

No console, quando você adiciona uma versão do secret, o checksum é calculado automaticamente quando você insere um valor para o secret.

As versões secretas criptografadas com chaves de criptografia gerenciadas pelo cliente (CMEK) e criadas antes de 16 de julho de 2021 não têm checksums armazenados.

A seguir