数据完整性保证

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

添加 Secret 版本时,您可以选择通过数据传递 CRC32C 校验和,然后 Secret Manager 会对该校验和进行验证,以确保数据完整性。

校验和应采用十进制格式编码,以匹配 SecretPayload 中的 int64 编码。返回的 SecretVersion 指示服务器是否已收到校验和。

API

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

将 Secret 数据存储在数据文件中,利用 gsutil hash 计算校验和。校验和必须转换为十进制格式;它在 SecretPayload proto 中编码为 int64。

$ gsutil hash -c -h "/path/to/file.txt"

使用命令行传递 Secret 数据时,按如下方式计算校验和:

$ gsutil hash -c -h 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}}"

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

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

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

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

后续步骤