是否可创建OpenStack跨项目共享的安全组?
解决方案
Neutron安全组默认仅所属项目可见可用,要实现全项目共享,需通过RBAC(基于角色的访问控制)规则配置共享权限,操作步骤如下:
操作步骤(命令行方式)
- 首先获取已创建的corey-sg安全组ID:
openstack security group show corey-sg -f value -c id
记好输出的安全组ID,后续替换<corey-sg-id>参数。
- 为该安全组创建全局共享RBAC规则:
openstack network rbac create --target-all-projects --action access_as_shared --type security_group <corey-sg-id>
参数说明:
--target-all-projects:授权所有项目可访问该安全组--action access_as_shared:授权动作是作为共享资源被访问--type security_group:指定操作的资源类型为安全组
- 验证配置生效:
- 管理员侧执行
openstack network rbac list --type security_group可看到刚创建的RBAC规则 - 切换到任意其他项目,执行
openstack security group list可看到corey-sg即配置成功
Heat模板直接创建共享安全组示例
如果你要在编排模板中直接生成可全局共享的corey-sg,可直接在模板中新增RBACPolicy资源:
corey_sg: type: OS::Neutron::SecurityGroup properties: name: corey-sg # 此处添加corey-sg自身的出入站规则 # 全局共享规则配置 corey_sg_shared_rbac: type: OS::Neutron::RBACPolicy properties: object_type: security_group target_tenant: "*" action: access_as_shared object_id: { get_resource: corey_sg }
注意事项
- 上述操作需要管理员权限执行,普通项目用户无权限配置安全组全局共享
- 如果仅需要共享给指定项目,可将命令中的
--target-all-projects替换为--target-project <指定项目ID>,模板中的target_tenant: "*"替换为对应项目ID即可 - 其他项目引用该共享安全组作为远程访问源时,直接填写安全组ID即可,Neutron会自动识别跨项目的安全组规则
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

