Bash中解析AWS Secrets Manager带转义JSON字符串并赋值给变量
AWS Secrets Manager 密钥提取与Shell变量导入方案
转义问题解决方法
你遇到的转义符问题是因为jq默认输出字符串时会自动添加外层双引号并转义特殊字符,添加-r(raw output)参数即可直接输出无转义的原始内容。
1. 提取无转义的SecretString JSON内容
执行如下命令即可得到标准JSON格式的密钥键值对:
aws secretsmanager get-secret-value --secret-id snowflake-access-uat | jq -r '.SecretString'
输出结果无任何转义符:
{"sf-user":"USER_123_ADMIN","sf-password":"FooBaarPassword","sf-db":"MY_SPL_DB","wh_name":"JOB_EXECUTOR","sf-role":"JOB_EXECUTOR_ROLE","sf-account":"icy-party"}
2. 批量导入密钥为当前Bash会话变量
不需要安装任何第三方工具,以下命令兼容CodeBuild全新运行实例的自动化场景,直接把所有密钥键值对导出为当前会话的环境变量:
eval "$(aws secretsmanager get-secret-value --secret-id snowflake-access-uat | jq -r '.SecretString | fromjson | to_entries[] | "export \(.key)=\(.value|@sh)"')"
命令逻辑说明:
jq -r输出原始字符串,自动去除外层引号和转义符fromjson将SecretString存储的JSON字符串解析为可遍历的JSON对象to_entries[]把所有键值对拆分为数组循环处理@sh自动对变量值做Shell安全转义,避免值内含空格、特殊符号时导出报错- 生成的
export语句通过eval执行,所有变量直接在当前Bash会话生效
3. 可选优化(适配Bash变量名规范)
Bash环境变量名不允许使用横杠,如果你需要把密钥键名中的横杠自动替换为下划线,可使用调整后的命令:
eval "$(aws secretsmanager get-secret-value --secret-id snowflake-access-uat | jq -r '.SecretString | fromjson | to_entries[] | "export \(.key|gsub("-";"_"))=\(.value|@sh)"')"
执行后变量名将自动转为sf_user、sf_password等符合Bash规范的格式,调用更安全。
效果验证
执行完成后直接打印对应变量即可验证是否生效:
echo $sf_user echo $sf_password
内容的提问来源于stack exchange,提问作者T3J45
相关产品推荐
相关产品推荐

