【问题标题】:Google Deployment Manager stored runtime-config variables appear corruptedGoogle 部署管理器存储的运行时配置变量显示已损坏
【发布时间】:2018-07-12 11:10:06
【问题描述】:

我在 Google 部署管理器中通过 runtimeconfig.v1beta1.config 资源声明使用加密的 base64 编码值时遇到问题。

在我执行部署后,我使用 Deployment Manager 存储的值似乎与我使用 gcloud beta 运行时配置检索的值完全不同。结果,我无法解密该值。

首先我对一些秘密文本进行了加密和base64编码:

$ echo "secret"|gcloud kms encrypt --key my-crypto-key \
  --keyring my-keyring --location australia-southeast1 \
  --plaintext-file - --ciphertext-file - | base64 -w0

CiQAsOSNmVXBs2ayUjRePnE5+Oi5dUPuVvjn6UKKUXgxMTA56koSMABDkVUGnXlocFgdUEsQ5qLCF3PVIz5zit+ZCSXjSvNzEAO5XRv6WBRkxBJMjVcheg==

然后我将其存储在部署管理器 YAML 文件中:

resources:
- name: my-config
  type: runtimeconfig.v1beta1.config
  properties:
    config: my-config
    description: "A demo configuration"

- name: dummy-secret
  type: runtimeconfig.v1beta1.variable
  properties:
    parent: $(ref.my-config.name)
    variable: 'dummy/secret'
    value: "CiQAsOSNmVXBs2ayUjRePnE5+Oi5dUPuVvjn6UKKUXgxMTA56koSMABDkVUGnXlocFgdUEsQ5qLCF3PVIz5zit+ZCSXjSvNzEAO5XRv6WBRkxBJMjVcheg=="

然后我创建部署(完成时没有错误或警告):

$ gcloud deployment-manager deployments create my-config \
  --config my-config.yaml

但是当我尝试提取变量值时,它与我存储的完全不同:

$ gcloud beta runtime-config configs variables \
  get-value 'dummy/secret' --config-name my-config|base64 -w0
CiQAPz8/P1U/P2Y/UjRePnE5Pz8/dUM/Vj8/P0I/UXgxMTA5P0oSMABDP1UGP3locFgdUEsQPz8/F3M/Iz5zPz8/CSU/Sj9zEAM/XRs/WBRkPxJMP1cheg==

这是可重复的/可重现的,我不知道我做错了什么。使用gcloud beta runtime-config variables set 后跟get-value 没有这个问题。

【问题讨论】:

    标签: google-cloud-platform google-deployment-manager google-cloud-kms


    【解决方案1】:

    查看您内容的解码 base64 二进制文件,我们注意到所有值 >= 0x80 的字节都已更改为 0x3F,ASCII '?'。我们怀疑您正在通过 shell 或其他一些不是二进制干净的管道传递二进制数据。

    损坏的值:

    dierks@dierks:~$ base64 -d | hexdump -C
    CiQAPz8/P1U/P2Y/UjRePnE5Pz8/dUM/Vj8/P0I/UXgxMTA5P0oSMABDP1UGP3locFgdUEsQPz8/F3M/Iz5zPz8/CSU/Sj9zEAM/XRs/WBRkPxJMP1cheg==
    00000000  0a 24 00 3f 3f 3f 3f 55  3f 3f 66 3f 52 34 5e 3e  |.$.????U??f?R4^>|
    00000010  71 39 3f 3f 3f 75 43 3f  56 3f 3f 3f 42 3f 51 78  |q9???uC?V???B?Qx|
    00000020  31 31 30 39 3f 4a 12 30  00 43 3f 55 06 3f 79 68  |1109?J.0.C?U.?yh|
    00000030  70 58 1d 50 4b 10 3f 3f  3f 17 73 3f 23 3e 73 3f  |pX.PK.???.s?#>s?|
    00000040  3f 3f 09 25 3f 4a 3f 73  10 03 3f 5d 1b 3f 58 14  |??.%?J?s..?].?X.|
    00000050  64 3f 12 4c 3f 57 21 7a                           |d?.L?W!z|
    00000058
    

    原值:

    dierks@dierks:~$ base64 -d | hexdump -C
    CiQAsOSNmVXBs2ayUjRePnE5+Oi5dUPuVvjn6UKKUXgxMTA56koSMABDkVUGnXlocFgdUEsQ5qLCF3PVIz5zit+ZCSXjSvNzEAO5XRv6WBRkxBJMjVcheg==
    00000000  0a 24 00 b0 e4 8d 99 55  c1 b3 66 b2 52 34 5e 3e  |.$.....U..f.R4^>|
    00000010  71 39 f8 e8 b9 75 43 ee  56 f8 e7 e9 42 8a 51 78  |q9...uC.V...B.Qx|
    00000020  31 31 30 39 ea 4a 12 30  00 43 91 55 06 9d 79 68  |1109.J.0.C.U..yh|
    00000030  70 58 1d 50 4b 10 e6 a2  c2 17 73 d5 23 3e 73 8a  |pX.PK.....s.#>s.|
    00000040  df 99 09 25 e3 4a f3 73  10 03 b9 5d 1b fa 58 14  |...%.J.s...]..X.|
    00000050  64 c4 12 4c 8d 57 21 7a                           |d..L.W!z|
    

    【讨论】:

    • 嗨蒂姆,gcloud encrypt 命令在我上面的第一个代码块中输出二进制文件,但管道不会在那里损坏它,因为我可以获取它产生的 base64 编码值,直接使用 gcloud 存储:@987654324 @而且还是可以解密的:gcloud beta runtime-config configs variables get-value 'dummy/secret' --config-name my-config|base64 -d | gcloud kms decrypt --key my-crypto-key --keyring my-keyring .. --plaintext-file - --ciphertext-file - secret
    • 好的。我对部署管理器一无所知(我在 KMS 上工作),但可以看到您从 KMS 中获得的价值看起来还不错。我不知道值是否被高位八位字节替换为“?”在进入部署或退出的途中。鉴于它在 YAML 文件中是 base64 编码的,该文件的编码不是问题。如果您可以使用 gcloud 设置一个值并将其取回,那么 gcloud 和值提取不太可能成为问题。那么也许是 YAML 解析器?我会 ping 团队中的某个人。
    • 解决方法是修改 YAML,将 dummy-secret 属性“value”更改为“text”,从而将 base64 编码的加密密钥作为字符串存储在 runtime-config 中。跨度>
    • 已向 Google 提出请求:issuetracker.google.com/issues/111407084
    • 是 gcloud 中的一个错误。根据上述票证。
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2023-03-16
    • 2013-04-14
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多