数据完整性保证

本主题介绍了如何在添加访问密文版本时使用校验和来维护和验证密文数据的完整性。

添加密文版本时,您可以选择将 CRC32C 校验和与数据一起传递,Secret Manager 会对其进行验证,以确保数据完整性。

校验和应采用小数格式编码,以与 SecretPayload 中的 int64 编码一致。返回的 SecretVersion 表示服务器是否已收到校验和。

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

如果秘密数据存储在数据文件中,请使用 gcloud storage hash 计算校验和。 必须将校验和转换为小数格式;它在 SecretPayload proto 中编码为 int64。

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

在命令行中传递 Secret 数据后,请按如下方式计算校验和:

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

对密文数据进行 Base64 编码并将其另存为 shell 变量。

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

使用 curl 调用 API。

$ 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}}"

访问密文版本时,返回的 SecretPayload 会包含数据及其校验和。示例响应:

{
  "name": "projects/123/secrets/my_secret/versions/2",
  "payload": {
    "data": "YQo=",
    "dataCrc32c": "163439259"
  }
}

在控制台中,当您添加密文版本时,系统会在您输入密文的值时自动计算校验和。

使用客户管理的加密密钥 (CMEK) 加密且在 2021 年 7 月 16 日之前创建的密文版本不会存储校验和,因此在访问这些版本时不会返回校验和。

后续步骤