2

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

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

  1. 创建一个包含二进制数据的文件:

    echo -e -n '\xed\xfe' > 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
    

为什么结果不一样?我是否需要做一些额外的事情才能让 Google Secret Manager 处理二进制数据?

4

1 回答 1

3

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
于 2020-04-07T16:14:07.527 回答