我第一次使用Google Secret Manager来存储一些二进制数据。当我访问秘密时,它似乎有不同的编码或格式。
实际的数据是一个证书捆绑包,但我已经能够使用较小的二进制数据来重现这个问题。复制步骤:
-
使用二进制数据创建文件:
echo -e -n 'xedxfe' > secret.txt
-
创建机密和版本:
gcloud secrets create "my-secret" --data-file ./secret.txt --replication-policy "automatic"
-
访问机密并将结果保存到文件中:
gcloud secrets versions access latest --secret "my-secret" > result.txt
-
比较两个文件:
od -t x1 secret.txt # ed fe od -t x1 result.txt # 3f 3f 0a
为什么结果不同?我必须做一些额外的事情才能让谷歌密钥管理器处理二进制数据吗?
Secret Manager完全按照给定的方式存储数据。不幸的是,gcloud
CLI工具中存在一个错误,在响应的末尾添加了一个额外的换行符。
此错误已在gcloud v288.0.0中修复。请确保您使用的是v288.0.0或更高版本。
如果您担心本地编码问题,则应该获取原始JSON响应。该响应将包括base64编码的秘密有效载荷,这对于传输来说要安全得多:
gcloud secrets versions access latest --secret "my-secret" --format "json"
您可以使用像jq这样的工具在命令行上解析JSON。注意,秘密有效载荷数据是base64编码的,因此在使用它之前需要对值进行解码
gcloud secrets versions access latest --secret "my-secret" --format "json" |
jq -r .payload.data |
base64 --decode > results_binary.txt
验证:
od -t x1 results_binary.txt # ed fe