如何通过Rundeck社区版实现AWS WAF Regional IP集自动化更新?
实现AWS WAF IP集自动更新的Rundeck最佳方案
针对你用Rundeck社区版实现AWS WAF IP白名单自动化的需求,这里有几个实用方案,完全不需要工程师手动获取ChangeToken:
最推荐:直接调用AWS API获取最新令牌
AWS WAF Regional本身提供了get-change-token命令,不需要依赖上一次更新的输出,直接就能拿到可用的ChangeToken。这个方法最省心,不用维护令牌存储,AWS会自动处理令牌的有效性。
在Rundeck作业的脚本步骤里这么写:
# 获取最新的ChangeToken CHANGE_TOKEN=$(aws waf-regional get-change-token --query 'ChangeToken' --output text) # 执行IP集更新 aws waf-regional update-ip-set \ --ip-set-id "你的IP集ID" \ --change-token "${CHANGE_TOKEN}" \ --updates '[{"Action": "INSERT", "IPSetDescriptor": {"Type": "IPV4", "Value": "要添加的IP/32"}}]'
方案二:用Rundeck存储持久化令牌
如果因为某些原因不能用get-change-token,可以把每次更新返回的令牌存在Rundeck的Key Storage里,供下一次作业调用:
- 第一步:在更新命令后用
jq提取令牌,并存入Key Storage# 执行更新并提取令牌 NEW_TOKEN=$(aws waf-regional update-ip-set ... | jq -r '.ChangeToken') # 存入Rundeck Key Storage(路径可自定义) rd storage create --path keys/waf/ip_set_changetoken --value "${NEW_TOKEN}" --type string --force - 第二步:下一次执行作业时,先读取存储的令牌
# 从Key Storage读取令牌 EXISTING_TOKEN=$(rd storage read --path keys/waf/ip_set_changetoken) # 用读取到的令牌执行更新,之后再覆盖存储的令牌 NEW_TOKEN=$(aws waf-regional update-ip-set --change-token "${EXISTING_TOKEN}" ... | jq -r '.ChangeToken') rd storage create --path keys/waf/ip_set_changetoken --value "${NEW_TOKEN}" --type string --force
注意要给Rundeck执行节点配置好Key Storage的读写权限,避免令牌泄露。
方案三:用Rundeck作业链传递变量
如果你的更新流程是分多个作业执行的,可以用Rundeck的作业链功能传递令牌:
- 第一个作业执行更新后,把ChangeToken设为作业输出变量(在步骤的"Output"里配置,比如
CHANGE_TOKEN=${NEW_TOKEN}) - 第二个作业通过作业引用的方式调用,直接引用上一个作业的输出变量:
${jobref.output.CHANGE_TOKEN}
这个方法适合固定流程的链式作业,但如果是单独触发的作业就不太适用。
额外注意事项
- 确保Rundeck执行节点的IAM角色/用户拥有
waf-regional:GetChangeToken和waf-regional:UpdateIPSet权限 - 测试阶段可以手动执行命令验证令牌有效性,再集成到Rundeck作业中
内容的提问来源于stack exchange,提问作者skp15
相关产品推荐
相关产品推荐

