在Google Secret Manager中存储二进制数据



我第一次使用Google Secret Manager来存储一些二进制数据。当我访问秘密时,它似乎有不同的编码或格式。

实际的数据是一个证书捆绑包,但我已经能够使用较小的二进制数据来重现这个问题。复制步骤:

  1. 使用二进制数据创建文件:

    echo -e -n 'xedxfe' > secret.txt
    
  2. 创建机密和版本:

    gcloud secrets create "my-secret" 
    --data-file ./secret.txt 
    --replication-policy "automatic"
    
  3. 访问机密并将结果保存到文件中:

    gcloud secrets versions access latest --secret "my-secret" > result.txt
    
  4. 比较两个文件:

    od -t x1 secret.txt  # ed fe
    od -t x1 result.txt  # 3f 3f 0a
    

为什么结果不同?我必须做一些额外的事情才能让谷歌密钥管理器处理二进制数据吗?

Secret Manager完全按照给定的方式存储数据。不幸的是,gcloudCLI工具中存在一个错误,在响应的末尾添加了一个额外的换行符。

此错误已在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

最新更新