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

Google cloud platform 在Google Secret Manager中存储二进制数据,google-cloud-platform,google-secret-manager,Google Cloud Platform,Google Secret Manager,我第一次使用它来存储一些二进制数据。当我访问这个秘密时,它似乎有不同的编码或格式 实际数据是一个证书包,但我已经能够使用较小的二进制数据重现问题。复制步骤: 使用二进制数据创建文件: echo -e -n '\xed\xfe' > secret.txt 创建密码和版本: gcloud secrets create "my-secret" \ --data-file ./secret.txt \ --replication-policy "automatic" 访问机密并将结

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

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

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

    echo -e -n '\xed\xfe' > 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
    
  • 为什么结果不同?要让Google Secret Manager处理二进制数据,我需要做些额外的工作吗?

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

    这只虫子被杀死了。请确保您使用的是v288.0.0或更高版本

    如果您关心本地编码问题,那么应该获取原始JSON响应。此响应将包括base64编码的秘密负载,这对于传输来说更安全:

    gcloud secrets versions access latest --secret "my-secret" --format "json"
    
    您可以使用类似的工具在命令行上解析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
    

    如果您的环境中没有安装
    jq
    ,则可以使用gcloud的--format参数解析json中所需的字段。有关更多信息,请参阅谷歌的此文档。