本页介绍如何使用校验和来维护和验证密钥数据的完整性 添加和 访问 Secret 版本。
您可以将校验和视为数据的唯一指纹。它是通过 使用 CRC32C 算法进行加密。即使只有一点点 Secret 数据发生更改时,校验和也会更改。这样 Secret Manager 就可以检测到 修改或损坏。
Secret Manager 通过以下方式使用校验和:
-
添加 Secret 版本时:
-
Secret Manager 会计算密文数据的 CRC32C 校验和。
-
此校验和与 Secret 数据一起存储。
-
-
当您访问密钥版本时:
-
Secret Manager 会返回 Secret 数据及其校验和。
-
您可以使用此校验和来验证您收到的数据是否与 Secret Manager 中存储的数据完全相同。
-
为了确保校验和与 SecretPayload 兼容 结构中,必须使用 CRC32C 算法计算机密数据的校验和, 十进制整数SecretVersion 响应中包含一个 字段,用于指示服务器是否已成功接收并验证了该 校验和。
以下示例展示了校验和在 Secret Manager 中的工作原理:
API
这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。 在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证。
利用存储在数据文件中的 Secret 数据,计算校验和, 使用 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.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}}"
访问密钥版本时,返回的 SecretPayload 包含数据及其校验和。以下是一个示例响应:
{ "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "payload": { "data": "YQo=", "dataCrc32c": "163439259" } }
在控制台中 添加密钥版本, 当您输入密钥的值时,系统会自动计算校验和。
使用客户管理的加密密钥 (CMEK) 加密且在 2021 年 7 月 16 日之前创建的 Secret 版本不会存储校验和。