黑石负载均衡

最近更新时间:2018-10-10 17:45:14

概述

黑石负载均衡支持细化到实例级别的权限管理,您可以为人员分配管理特定负载均衡实例的权限;或者特定VPC内所有负载均衡或者监听器的管理权限。

预设策略

预设策略,能帮助您快速授权,而不需要编写策略,但授权粒度会粗些,以下是黑石负载均衡的两个预设策略,分别为:

预设策略名 授权范围描述
QcloudBMLBFullAccess 关联后,获得所有黑石负载均衡实例的增、删、改、查等操作的权限
QcloudBMLBReadOnlyAccess 关联后,只能获得查询黑石负载均衡列表及基本信息的权限

Action、Resource、Condtion列表

以下表格,罗列了在编辑黑石负载均衡策略时,需要用到的action、resource、condition。相关概念请参考 访问管理 章节。

  • 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/$unVpcId
qcs::bmvpc::uin/:unSubnetId/$SubnetId(内网)
创建负载均衡
bmlb:ModifyBmLoadBalancerAttributes qcs::bmlb:::loadBalancerId/$Lbid 修改负载均衡属性信息 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:DeleteBmLoadBalancers qcs::bmlb:::loadBalancerId/$Lbid 删除负载均衡 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:CreateBmListeners qcs::bmlb:::loadBalancerId/$Lbid 创建负载均衡四层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmListener qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
创建负载均衡四层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:BindBmL4ListenerRs qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
绑定物理服务器到四层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:BindBmL4ListenerVmIp qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
绑定虚机IP到负载均衡四层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmL4ListenerBackendWeight qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
修改负载均衡四层监听器后端实例权重 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmL4ListenerBackendPort qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
修改负载均衡四层监听器后端实例端口 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:UnbindBmL4ListenerRs qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
解绑负载均衡四层监听器物理服务器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:UnbindBmL4ListenerVmIp qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
解绑负载均衡四层监听器虚机IP bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:DeleteBmListeners qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
删除负载均衡四层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:CreateBmForwardListeners qcs::bmlb:::loadBalancerId/$Lbid 创建负载均衡七层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmForwardListener qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
修改负载均衡七层监听器 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:CreateBmForwardRules qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
创建负载均衡七层转发规则 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmForwardLocation qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
修改负载均衡七层转发路径 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:BindBmLocationInstances qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
绑定物理服务器到七层转发路径 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:BindBmL7LocationVmIp qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
绑定虚机IP到负载均衡七层转发路径 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmLocationBackendWeight qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
修改负载均衡七层转发路径后端实例权重 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmLocationBackendPort qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
修改负载均衡七层转发路径后端实例端口 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:UnbindBmLocationInstances qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
解绑物理服务器到七层转发路径 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:UnbindBmL7LocationVmIp qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
解绑负载均衡七层转发路径虚机IP bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:DeleteBmForwardRules qcs::bmlb:::loadBalancerId/$Lbid 删除负载均衡七层转发规则 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmLoadBalancerChargeMode qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
更改黑石LB的计费方式 bmvpc:unVpcId
bmvpc:unSubnetId
bmlb:ModifyBmL4ListenerBackendProbePort qcs::bmlb:::loadBalancerId/$Lbid
qcs::bmlb:::listenerId/$LlistenId
qcs::bm:::instance/$InstanceId
修改4层LB后端实例探测端口 bmvpc:unVpcId
bmvpc: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的要求。

keyvalue
bmvpc:unVpcIdvpc-yyyyyy(Vpc的实例Id)
bmvpc:unSubnetIdsubnet-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里,【是】则鉴权通过,【否】则鉴权失败。