如何配置Rundeck ACL限制跨项目密钥的使用权限?
解决Rundeck跨项目密钥访问的ACL配置方案
针对你遇到的USER_2跨项目调用密钥的安全问题,可以通过系统级ACL控制密钥可见性+项目级ACL限制密钥引用的组合配置来解决,具体步骤如下:
1. 系统级ACL配置:限制USER_2查看PRG_A的密钥
编辑Rundeck系统ACL文件(默认路径:/etc/rundeck/system.aclpolicy),添加以下规则(若用角色管理用户,可将users替换为roles):
description: "Lock down cross-project key visibility" context: project: 'PRG_A' for: # 拒绝USER_2查看PRG_A的密钥 resource: - equals: kind: 'key' deny: ['read'] users: ['USER_2'] # 保留USER_2在PRG_A的作业执行权限 job: - allow: ['run', 'read'] users: ['USER_2'] context: project: 'PRG_B' for: # 赋予USER_2 PRG_B的密钥全权限 resource: - equals: kind: 'key' allow: ['create', 'read', 'update', 'delete'] users: ['USER_2'] # 赋予USER_2 PRG_B的作业全权限 job: - allow: ['create', 'read', 'update', 'delete', 'run'] users: ['USER_2'] context: project: '*' for: # 赋予USER_1所有项目的全权限 resource: - equals: kind: 'key' allow: ['create', 'read', 'update', 'delete'] users: ['USER_1'] job: - allow: ['create', 'read', 'update', 'delete', 'run'] users: ['USER_1']
2. 项目级ACL配置:限制PRG_B作业仅使用本项目密钥
编辑PRG_B项目的ACL文件(默认路径:/var/rundeck/projects/PRG_B/etc/acls/acls.yaml),添加规则拦截跨项目密钥引用:
description: "Restrict PRG_B jobs to local project keys only" context: project: PRG_B for: job: - rule: allow: create,update # 仅允许引用PRG_B项目的密钥 condition: all: # 检查节点步骤的密码选项(引用密钥的常见场景) - match: node: job property: "config.nodeStep.pluginConfig.passwordOption" value: "^keys/PRG_B/.*$" # 检查作业脚本中是否包含PRG_A密钥路径 - match: node: job property: "config.nodeStep.pluginConfig.script" value: "(?!.*keys/PRG_A/.*)" # 检查工作流步骤中的密钥引用 - match: node: job property: "config.workflow.steps[*].pluginConfig.passwordOption" value: "^keys/PRG_B/.*$"
3. 生效与验证
- 重启Rundeck服务加载新配置:
sudo systemctl restart rundeckd - 验证USER_2权限:
- 进入PRG_A:无法查看密钥列表,但可正常执行作业。
- 进入PRG_B:尝试创建引用PRG_A密钥的作业,系统会拒绝保存。
- 验证USER_1权限:两个项目的密钥、作业操作均不受限制。
内容的提问来源于stack exchange,提问作者user2025149
相关产品推荐
相关产品推荐

