概述
黑石负载均衡支持细化到实例级别的权限管理,您可以为人员分配管理特定负载均衡实例的权限;或者特定 VPC 内所有负载均衡或者监听器的管理权限。
预设策略
预设策略,能帮助您快速授权,而不需要编写策略,但授权粒度会粗些,以下是黑石负载均衡的两个预设策略,分别为:
预设策略名 | 授权范围描述 |
QcloudBMLBFullAccess | 关联后,获得所有黑石负载均衡实例的增、删、改、查等操作的权限。 |
QcloudBMLBReadOnlyAccess | 关联后,只能获得查询黑石负载均衡列表及基本信息的权限。 |
Action、Resource、Condtion 列表
Action:即操作,对应的是 API。编写策略时,您可以复制表格里内容并粘贴在 Action 字段中。关联该策略后,即可获得特定 API 的调用权限。
Resource:即云资源,当列表中 Action 的鉴权参数不为空时,则表示在调用 API 需要指定云资源,否则不需要指定。编写策略时,您可以复制表格里内容并粘贴在策略生成器的 Resource 字段中。但请记得替换 $VpcId、$lbId 及 $LblistenId 为真实的实例 ID;关联该策略后,即可获得特定资源的操作权限。
注意
部分 API 鉴权时需要不同类型的实例 ID,例如 CreateBmForwardRules,分别需要负载均衡和监听器的实例 ID,这时需要把两种资源描述都写在 Resource 里。
Condition:即生效条件。换句话说 Action 和 Resource 需要在特定的生效条件下,才能鉴权通过。您可以灵活使用 condtion 以实现 VPC 或者 Subnet 粒度的权限管理,例如授权人员管理特定子网内的所有监听器。
注意
Describe* 或者 Get* 指查询操作,例如拉取多个实例详情等,查询操作鉴权通过后可能会把所有实例信息都返回,而无法区别哪些是有权限哪些是没有权限的实例。但再修改、删除实例时,会再次鉴权。
Action | 鉴权参数 | 功能描述 | 条件密钥 |
bmlb:CreateBmLoadBalancer | qcs::bmvpc:::unVpcId/$unVpcIdqcs::bmvpc::uin/:unSubnetId/$SubnetId(内网) | 创建负载均衡 | - |
bmlb:ModifyBmLoadBalancerAttributes | qcs::bmlb:::loadBalancerId/$Lbid | 修改负载均衡属性信息 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:DeleteBmLoadBalancers | qcs::bmlb:::loadBalancerId/$Lbid | 删除负载均衡 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:CreateBmListeners | qcs::bmlb:::loadBalancerId/$Lbid | 创建负载均衡四层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmListener | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 创建负载均衡四层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:BindBmL4ListenerRs | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 绑定物理服务器到四层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:BindBmL4ListenerVmIp | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 绑定虚机IP到负载均衡四层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmL4ListenerBackendWeight | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 修改负载均衡四层监听器后端实例权重 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmL4ListenerBackendPort | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 修改负载均衡四层监听器后端实例端口 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:UnbindBmL4ListenerRs | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 解绑负载均衡四层监听器物理服务器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:UnbindBmL4ListenerVmIp | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 解绑负载均衡四层监听器虚机 IP | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:DeleteBmListeners | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 删除负载均衡四层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:CreateBmForwardListeners | qcs::bmlb:::loadBalancerId/$Lbid | 创建负载均衡七层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmForwardListener | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 修改负载均衡七层监听器 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:CreateBmForwardRules | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 创建负载均衡七层转发规则 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmForwardLocation | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 修改负载均衡七层转发路径 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:BindBmLocationInstances | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 绑定物理服务器到七层转发路径 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:BindBmL7LocationVmIp | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 绑定虚机 IP 到负载均衡七层转发路径 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmLocationBackendWeight | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 修改负载均衡七层转发路径后端实例权重 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmLocationBackendPort | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 修改负载均衡七层转发路径后端实例端口 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:UnbindBmLocationInstances | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 解绑物理服务器到七层转发路径 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:UnbindBmL7LocationVmIp | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 解绑负载均衡七层转发路径虚机 IP | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:DeleteBmForwardRules | qcs::bmlb:::loadBalancerId/$Lbid | 删除负载均衡七层转发规则 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmLoadBalancerChargeMode | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenId | 更改黑石 LB 的计费方式 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:ModifyBmL4ListenerBackendProbePort | qcs::bmlb:::loadBalancerId/$Lbidqcs::bmlb:::listenerId/$LlistenIdqcs::bm:::instance/$InstanceId | 修改4层 LB 后端实例探测端口 | bmvpc:unVpcIdbmvpc:unSubnetId |
bmlb:DescribeBmListeners | - | 获取负载均衡四层监听器 | - |
bmlb:DescribeBmListenerInfo | - | 获取负载均衡四层监听器详细信息 | - |
bmlb:DescribeBmBindInfo | - | 获取主机的负载均衡的绑定详情 | - |
bmlb:DescribeBmVportInfo | - | 获取负载均衡端口信息 | - |
bmlb:DescribeBmLoadBalancers | - | 获取负载均衡实例列表 | - |
bmlb:DescribeBmL4ListenerBackends | - | 获取负载均衡四层监听器绑定的主机列表 | - |
bmlb:DescribeBmForwardListeners | - | 获取负载均衡七层监听器 | - |
bmlb:DescribeBmForwardListenerInfo | - | 获取负载均衡七层监听器详细信息 | - |
bmlb:DescribeBmForwardRules | - | 获取负载均衡七层转发规则 | - |
bmlb:DescribeBmLocationBackends | - | 获取负载均衡七层转发路径绑定的主机列表 | - |
bmlb:UploadBmCert | - | 创建负载均衡证书 | - |
bmlb:GetBmCertDetail | - | 获取负载均衡证书详情 | - |
bmlb:ReplaceBmCert | - | 更新负载均衡证书 | qcs::bmlb::uin/:certId/$certId |
Condition(生效条件)
灵活使用 Condtion,即可做到 VPC 或者 Subnet 粒度的权限管理,例如授权管理特定 VPC 内的所有负载均衡
注意
在使用 Condtion时,要做到 Vpc 或者 Subetnet 粒度的授权,策略的 Resource 字段建议只需填写
*
。书写规范
"condition":{"Option1":{"key1":["value1","value2"]),"key2":["value1","value2"])},"Option2":{"key1":["value1","value2"]),"key2":["value1","value2"])}}
Option 即操作符,理解为传入的鉴权参数和 key 的运算规则。Key 和 Value 是对应的,以下是对应关系。传入的鉴权参数经过运算后应该满足 key 和 value 的要求。
key | value |
bmvpc:unVpcId | vpc-yyyyyy(VPC 的实例 ID) |
bmvpc:unSubnetId | subnet-xxxxx(Subnet 的实例 ID) |
操作符(Option)
黑石负载均衡只推荐使用
string_equal
以及 for_all_value:string_equal_if_exist
:string_equal,用于 condition 只有一个 key 和一个 value 的情况,要求传入的鉴权参数满足 key:value,可以做到特定 VPC 或者 subnet 的授权。
for_all_value:string_equal_if_exist,用于 condition 有一个 key 多个 value 的情况 key:value1,value2,可以做到多个 VPC 或者 subnet 的授权。
例子
策略如下:
{"version":"2.0","statement":[{"effect":"allow","action":["bmlb:BindBmL4ListenerRs"],"resource":["qcs::bmlb:::loadBalancerId/lb-dtrzsshx","qcs::bmlb:::listenerId/lbl-6l1q8cdf","qcs::bm:::instance/*"],"condition":{"for_all_value:string_equal_if_exist":{"bmvpc:unSubnetId":["subnet-1so5ae8m","subnet-jv24ivq0"]}}}]}
场景:调用 BindBmL4ListenerRs,为内网 LB 监听器 lbl-6l1q8cdf 绑定同 vpc 的物理服务器 cpm-6y3le68b 时。
1. 鉴权逻辑发现关联了 effect:allow 的策略且 action:bm:BindBmL4ListenerRs 和 lb、listen、cpm 等实例
2. 但前提是,上述三种资源需要在 subnet-1so5ae8m 或者 subnet-jv24ivq0 才能鉴权通过。
最佳实践
本章节,我们举例两个场景的策略内容和评估逻辑,帮助您了解如何实现黑石服务器的权限分配。
场景 1:授权在 vpc-muinpf9p 里创建一个外网监听器
场景 2:授权在 subnet-c6bzyq4a 里的所有内网负载均衡七层监听器创建七层转发路径
场景1
策略如下:
{"version":"2.0","statement":[{"effect":"allow","action":["bmlb:CreateBmLoadBalancer"],"resource":["qcs::bmvpc:::unVpcId/vpc-muinpf9p"]}]}
评估逻辑:
调用 CreateBmLoadBalancer时,CAM 判断传入的 VpcId 参数是否为 vpc-muinpf9p,【是】则鉴权通过,【否】则鉴权失败。
场景2
策略如下:
{"version":"2.0","statement":[{"effect":"allow","action":["bmlb:CreateBmForwardRules"],"resource":["qcs::bmlb:::loadBalancerId/*","qcs::bmlb:::listenerId/*"],"condition":{"string_equal":{"bmvpc:unSubnetId":"subnet-c6bzyq4a"}}}]}
评估逻辑:
当调用 CreateBmForwardRules时,CAM 会对传入 loadBalancerId 和 listenerId 做鉴权,发现满足 resource(*)的要求。
但要求两个资源都在子网 subnet-c6bzyq4a 里,【是】则鉴权通过,【否】则鉴权失败。