本主题介绍如何在添加和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 版本不会存储校验和,因此访问这些版本时不会返回校验和。
后续步骤
- 了解如何设置有关密钥的通知。
- 了解如何使用 Cloud Asset Inventory 分析 Secret。