You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Secrets Manager更新Secret String时额外JSON编码问题求助

问题描述

使用AWS CLI更新包含X509证书的JSON密钥时,传入--secret-string的Payload编码符合预期,但AWS Secrets Manager存储时会对换行符进行额外编码。导致Go应用调用tls.X509KeyPair()时无法识别证书内容;但手动将Payload粘贴到网页端更新密钥,格式可正常保留,代码也能正常运行。需要修复上传时的编码问题,而非在Go中获取密钥后再格式化/转义PEM/密钥内容。

示例

  • 执行的CLI命令:
aws secretsmanager update-secret --secret-id my-secret --secret-string '{"PEM":"-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
","KEY":"..."}'
  • 实际存储的密钥:
{"PEM":"-----BEGIN CERTIFICATE-----\\n...\\n...\\n...\\n-----END CERTIFICATE-----\\n","KEY":"..."}

当前使用的命令:

  • 拼接PEM内容:STRING_PEM=$(awk '{printf "%s\n", $0}' $PemFile)
  • 生成JSON字符串:SECRET_STRING=$(jq -r 'tostring' $UPDATED_SECRET)
解决方案

问题出在当前的PEM处理和JSON序列化流程上,awk的拼接会引入不必要的换行处理,而jq -r 'tostring'会将JSON对象转为字符串,导致换行符被双重转义。改用以下方式直接生成正确的JSON:

  1. 直接用jq读取PEM和密钥文件内容,自动处理换行符转义:
SECRET_STRING=$(jq -n \
  --arg pem "$(cat "$PemFile")" \
  --arg key "$(cat "$KeyFile")" \
  '{PEM: $pem, KEY: $key}')
  1. 执行AWS CLI更新命令:
aws secretsmanager update-secret --secret-id my-secret --secret-string "$SECRET_STRING"

原理说明

  • jq -n用于创建新的JSON对象,--arg参数会自动将文件内容中的换行符转义为\n,生成符合JSON规范的字符串。
  • 直接将jq输出的JSON传给--secret-string,避免了shell对字符串的二次转义,确保AWS Secrets Manager存储的是正确的单转义换行符,Go应用调用tls.X509KeyPair()时可直接识别。

内容的提问来源于stack exchange,提问作者Tony M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:57:23