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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:40:36