社区版Rundeck对接AWS WAF:作业创建与身份认证咨询
解决Rundeck作业创建与AWS认证问题
一、创建带参数的Rundeck作业并调用现有Shell脚本
1. 新建作业基础配置
进入目标Rundeck项目,点击「Create Job」,填写作业名称(比如「检查WAF IP CIDR存在性」)和描述,保存基础信息。
2. 添加用户输入参数
在「Job Options」标签页添加两个参数:
- 参数1:环境类型
- 类型选择「Select」,名称设为
env_type,标签填「外部/内部」 - 选项值添加「外部」和「内部」,可设置默认值(比如「外部」)
- 类型选择「Select」,名称设为
- 参数2:IP CIDR
- 类型选择「Text」,名称设为
ip_cidr,标签填「IP CIDR」 - 可选添加验证正则:
^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$,确保输入格式合规
- 类型选择「Text」,名称设为
3. 配置工作流调用Shell脚本
切换到「Workflow」标签页,点击「Add a Step」选择「Execute Shell Script」:
- 如果脚本已存放在Rundeck服务器上,直接调用脚本并传入参数:
/path/to/your/check_waf_cidr.sh ${option.env_type} ${option.ip_cidr} - 如果要直接内嵌脚本,把你的Shell代码粘贴进去,注意参数引用用
${option.env_type}和${option.ip_cidr}
4. 确保aws-vault在Rundeck环境可用
Rundeck默认以rundeck系统用户运行作业,需确保该用户能正常使用aws-vault:
- 切换到rundeck用户:
sudo su - rundeck - 测试aws-vault命令:
aws-vault exec <your-aws-profile> -- aws wafv2 list-ip-sets,确认能正常返回结果 - 确保
rundeck用户的~/.aws目录配置正确(包含credentials、config文件),且aws-vault的密钥环能被该用户访问
二、用IAM角色实现Rundeck实例整体AWS认证
完全可以用IAM角色替代aws-vault,更适合服务端场景,避免存储敏感凭证,分两种场景处理:
1. Rundeck部署在AWS EC2上
- 给EC2实例附加IAM角色,角色权限需包含WAF操作的最小权限(比如
wafv2:ListIPSets、wafv2:GetIPSet等,根据脚本需求调整) - 移除脚本中的aws-vault调用,直接使用AWS CLI命令——EC2实例会自动通过实例元数据获取临时凭证,无需额外配置
2. Rundeck部署在非AWS环境(本地/其他云)
- 方式一:使用IAM用户凭证(推荐最小权限)
- 创建IAM用户,仅赋予WAF相关操作权限,生成Access Key和Secret Key
- 在Rundeck服务器的
rundeck用户目录下创建~/.aws/credentials文件,内容如下:[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY - 脚本中直接调用AWS CLI,无需aws-vault
- 方式二:使用STS AssumeRole(更安全)
- 创建一个拥有
sts:AssumeRole权限的基础IAM用户 - 在脚本中添加角色切换逻辑:
ROLE_ARN="arn:aws:iam::ACCOUNT_ID:role/YOUR_WAF_ROLE" CREDS=$(aws sts assume-role --role-arn $ROLE_ARN --role-session-name rundeck-waf-check) export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.Credentials.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.Credentials.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Credentials.SessionToken') # 后续执行WAF检查命令 aws wafv2 list-ip-sets ...
- 创建一个拥有
内容的提问来源于stack exchange,提问作者skp15
相关产品推荐
相关产品推荐

