黑石物理服务器

最近更新时间:2019-03-06 19:36:03

概述

黑石物理服务器支持细化到实例级别的权限管理,您可以为人员分配管理特定物理服务器实例的权限;或者属于特定 VPC 或者子网的所有物理服务器的管理权限。

预设策略

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

预设策略名 授权范围描述
QcloudBMInnerFullAccess 关联后,获得所有黑石服务器实例的增、删、改、查等操作的权限
QcloudBMInnerReadOnlyAccess 关联后,只能获得查询黑石服务器列表及基本信息的权限

Action、Resource、Condtion 列表

以下表格,罗列了在配置黑石服务器的策略时,需要用到的 action、resource、condition。相关概念请参考 访问管理 章节。

  • Action,即操作,对应的是 API。编写策略时,您可以复制表格里内容并粘贴在 Action 字段中。关联该策略后,即可获得特定 API 的调用权限。

  • Resource,即云资源,当列表中 Action 的鉴权参数不为空时,则表示在调用 API 需要指定云资源,否则不需要指定。编写策略时,您可以复制表格里内容并粘贴在策略生成器的 Resource 字段中,但请记得替换 $region、$instanceId、$eipId 为真实的实例 ID;关联该策略后,即可获得特定资源的操作权限。

    注意:
    部分 API 鉴权时需要两种产品的实例 ID,例如绑定 EIP,分别需要被绑定的黑石服务器以及用于绑定的黑石弹性公网 IP 的实例 ID,这时需要把两种云产品的资源描述都写在 Resource 里。

  • Condition,即生效条件。换句话说 Action 和 Resource 需要在特定的生效条件下,才能鉴权通过。您可以灵活使用 condtion 以做到 VPC 或者 Subnet 粒度的权限管理,比如授权人员管理特定 VPC 内的所有黑石服务器。

    注意:
    Describe 或者 Get 指查询操作,比如拉取多个实例详情等,查询操作鉴权通过后可能会把所有实例信息都返回,而无法区别哪些是有权限哪些是没有权限的实例。但再修改、删除实例时,会再次鉴权。

Action 鉴权参数 功能描述 条件密钥
bm:OfflineDevice qcs::bm:$region::instance/$instanceId 退还后付费实例 bmvpc:unVpcId
bmvpc:unSubnetId
bm:ModifyPayModePre2Post qcs::bm:$region::instance/$instanceId 将设备从预付费转换为后付费 bmvpc:unVpcId
bmvpc:unSubnetId
bm:ModifyDeviceAutoRenewFlag qcs::bm:$region::instance/$instanceId 设置物理机服务器自动续费标志 bmvpc:unVpcId
bmvpc:unSubnetId
bm:GetDeviceDeployProcess qcs::bm:$region::instance/$instanceId 机器部署重装进度查询 bmvpc:unVpcId
bmvpc:unSubnetId
bm:DescribeDevicePrice qcs::bm:$region::instance/$instanceId 获取服务器的价格 bmvpc:unVpcId
bmvpc:unSubnetId
bm:DescribeDevicePartition qcs::bm:$region::instance/$instanceId 获取物理机的分区格式 bmvpc:unVpcId
bmvpc:unSubnetId
bm:GetDeviceOutBandInfo qcs::bm:$region::instance/$instanceId 获取设备的带外信息 bmvpc:unVpcId
bmvpc:unSubnetId
bm:UnbindEip qcs::bm:$region::instance/$instanceId
qcs::bmeip::uin/:eipId/$eipId
解绑EIP bmvpc:unVpcId
bmvpc:unSubnetId
bm:BindEip qcs::bm:$region::instance/$instanceId
qcs::bmeip::uin/:eipId/$eipId
绑定 EIP bmvpc:unVpcId
bmvpc:unSubnetId
bm:ResetDevicePasswd qcs::bm:$region::instance/$instanceId 重置密码 bmvpc:unVpcId
bmvpc:unSubnetId
bm:ReloadDeviceOs qcs::bm:$region::instance/$instanceId 重装操作系统 bmvpc:unVpcId
bmvpc:unSubnetId
bm:DescribeDeviceOperationLog qcs::bm:$region::instance/$instanceId 获取设备的操作日志 bmvpc:unVpcId
bmvpc:unSubnetId
bm:ModifyDeviceAlias qcs::bm:$region::instance/$instanceId 批量修改设备名称 bmvpc:unVpcId
bmvpc:unSubnetId
bm:StartDevice qcs::bm:$region::instance/$instanceId 开机 bmvpc:unVpcId
bmvpc:unSubnetId
bm:ShutdownDevice qcs::bm:$region::instance/$instanceId 关闭服务器 bmvpc:unVpcId
bmvpc:unSubnetId
bm:RebootDevice qcs::bm:$region::instance/$instanceId 重启机器 bmvpc:unVpcId
bmvpc:unSubnetId
bm:DescribeDevice 获取物理服务器列表
bm:DescribeDeviceWeb 获取黑石物理服务器列表
bm:DescribeDeviceTrash 获取黑石物理服务器回收站列表
bm:SetOutBandVPNAuthPwd 设置带外 VPN 认证用户密码
bm:GetOutBandVPNAuthInfo 获取带外 VPN 认证信息
bm:BuyDevice 获取设备的带外信息
bm:RunUserCmd 运行自定义脚本
bm:GetUserCmdTaskDetail 查任务详细信息
bm:GetUserCmdTaskDetailList 获取任务详细信息列表
bm:GetUserCmdTaskList 获取任务列表
bm:DeleteUserCmd 删除自定义脚本
bm:GetUserCmd 查自定义脚本内容
bm:GetUserCmdList 查询自定义脚本列表
bm:ModifyUserCmd 修改自定义脚本
bm:AddUserCmd 新建自定义脚本

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": "bm:ModifyDeviceAlias",
        "resource": "*",
        "condition": {
            "string_equal": {
                "bmvpc:unVpcId": "vpc-12345"
            }
        }
    }
}

场景:调用 ModifyDeviceAlias 修改 cpm-678910 的别名。

评估逻辑:

  1. 鉴权逻辑发现关联了 effect:allow 的策略且 action:bm:ModifyDeviceAlias 和 resource:*,即允许修改任一实例的别名。
  2. 但前提是实例要在 vpc-12345里,鉴权才能通过。

最佳实践

本章节,我们举例两个场景的策略内容和评估逻辑,帮助您了解如何实现黑石服务器的权限分配。

  • 场景 1:授权将 eip-34lvo6ir 绑定在 cpm-ftukx3a
  • 场景 2:授权重启 vpc-34cxlz7z 内的所有物理服务器

场景 1

策略如下:

{
    "version": "2.0",
    "statement": [{
        "effect": "allow",
        "action": [
            "name/bm:BindEip"
        ],
        "resource": [
            "qcs::bm:::instance/cpm-ftukx3aj",
            "qcs::bmeip::: eipId / eip - 34 lvo6ir "
        ]
    }]
}

评估逻辑:
当调用 BindEip 时,CAM 会判断传入的 InstanceId 和 EipId 是否为 cpm-ftukx3a 和 eip-34lvo6ir,【是】则鉴权通过。

场景 2

策略如下:

{
    "version": "2.0",
    "statement": [{
        "effect": "allow",
        "action": [
            "name/bm:RebootDevice"
        ],
        "resource": [
            "*"
        ],
        "condition": {
            "for_all_value:string_equal_if_exist": {
                "bmvpc:unVpcId": ["vpc-34cxlz7z", "vpc-34cxlz12"]
            }
        }
    }]
}

评估逻辑:
当调用 RebootDevice 时,CAM 对传入的 instanceId 做鉴权,发现满足 resource(*)的要求。
但要求 instanceId在vpc-34cxlz7z 或者 vpc-34cxlz12 里,【是】则鉴权通过,【否】则鉴权失败。