如何配置SOPS加密Shell脚本中的指定字符串?
解决SOPS加密Shell脚本中ARN特定部分的问题
首先明确:SOPS的encrypted_suffix是用来匹配变量/键名的后缀,从而自动加密对应的值,不是直接匹配要加密的内容本身。你的当前配置错误在于把要加密的账号ID内容当成了后缀,同时KMS ARN可能格式有误(应该指向KMS密钥而非IAM角色)。以下是正确的配置和操作步骤:
1. 调整Shell脚本结构
把需要加密的ARN中的账号ID提取为带特定后缀的变量,比如用_encrypted作为后缀:
# 将需要加密的账号ID定义为带后缀的变量 AWS_ACCOUNT_ID_encrypted="XXXXXXXXXXXXX" # 在ARN中引用该变量 aws=($(aws sts assume-role --role-arn arn:aws:iam::${AWS_ACCOUNT_ID_encrypted}:role/dummy --role-session-name sandbox | jq -r '.Credentials[]'))
2. 修正SOPS配置文件
将encrypted_suffix改为你选的变量后缀(比如_encrypted),同时确保KMS ARN指向正确的KMS密钥(格式应为arn:aws:kms:eu-west-1:<账号ID>:key/<密钥ID>):
--- creation_rules: - path_regex: upgrade.sh kms: 'arn:aws:kms:eu-west-1:<你的KMS密钥ARN>' encrypted_suffix: '_encrypted'
3. 执行加密操作
运行SOPS命令加密脚本:
sops -e -i upgrade.sh
执行后,AWS_ACCOUNT_ID_encrypted的原值会被SOPS替换为加密后的字符串(类似ENC[AES256_GCM,data:...,iv:...,tag:...,type:str])。
4. 使用加密后的脚本
需要解密后再执行脚本:
sops -d upgrade.sh | bash
补充说明
如果不想修改脚本结构,也可以用SOPS的 inline 加密标记,在要加密的内容前后添加注释:
aws=($(aws sts assume-role --role-arn arn:aws:iam::# sops:encrypt XXXXXXXXXXXXX# sops:end :role/dummy --role-session-name sandbox | jq -r '.Credentials[]'))
这种方式不需要配置encrypted_suffix,直接运行sops -e -i upgrade.sh即可加密标记内的内容,但变量方式更便于维护和批量管理。
内容的提问来源于stack exchange,提问作者Bluz
相关产品推荐
相关产品推荐

