意图
这几天打算把自己的云服务器暂时转给别人使用,如果直接把自己的账号发给别人,风险太大。发现可以在自己的主账号下配置子账号,并设定子账号的资源访问权限。现在进行了一番探究,主要要实现如下的功能:
- 子账户只能访问自己制定的CVM资源
- 子账户可以查看云服务器的基本信息
- 子账户可以自由的配置的防护墙的端口开放规则
配置过程
添加子账户
- 个人头像->访问管理,然后在跳转的页面内选择->用户->用户列表,然后选择新建账户
2. 在这里选择自定义的添加子账户的方式:
3. 配置用户的账户信息和基本的权限设置:
4. 设置资源访问权限,这里需要进行自定义权限,但是可以直接跳过,等用户创建好之后,再关联权限。
直接下一步:
可以看到这里的权限信息为空,然后直接完成即可。
自定义权限信息
- 访问管理->策略->自定义策略:进行策略的新建
刚开始创建的时候最好是选择按策略生成器创建,比较方便:
3. 配置生成器的一些信息,首先要选择要开放的服务,因为这里只想开发CVM,所以只选择CVM:
先不配置操作,先设置我们只能访问的云服务器资源:
添加权限,其实是再添加一个策略生成器,这里需要一个就行了。就是针对云服务权限
选择自定义资源六段式:
- 服务:是自己生成的,不需要修改
- 地域,选择子账户可以访问的云服务器的所在地域
- 账户:也是自己生成的。不需要改
- 资源前缀:云服务器,固定为instance
- 资源:云服务器的ID,如ins-XXXX
注意,可以添加多个。如果资源那填
*
,说明可以访问该地域下的所有云服务器
- 最后配置最重要的
操作
,这个决定了子账户可以有哪些访问和操作权限,我们可以搜索我们熟悉的权限,比如安全组相关的:
因为要让子用户可以自由的添加和删除规则,所以显然要添加上述的规则
- 下一步,就进入了自定义规则的最后的一步:
我们可以将权限赋予我们刚才新建的子账户。
相关权限的查漏补缺
注意到,我们之前设置权限的时候只设置了安全组,当然我们可以设置其他我们知道的应该开放的权限。但是因为权限五花八门,我们不一定我们限制的子账户的操作,应该配置什么权限。
但是腾讯有一种动态的基于操作的权限设置,就是我们登陆到子账户上,然后进行操作,如果没有相应的权限,就会有弹窗限制,如我们用只能访问云服务器的子账户访问轻量云,会有:
注意到绿色和颜色部分,这两个部分是我们补全权限的关键。
接下来我们对已经建立的策略进行修改:
选择json格式的策略文件:
其中action是我们配置的具体的权限,而resource中关联的是权限中涉及到的资源信息。简单的就是,我们把上面说过的绿色的部分添加到action中,而蓝色的添加到resource中。
要注意,蓝色的一般部识别资源id。所以我们要自己制定资源id。
我们提前登陆到子账户,对资源进行访问和操作。如果有提示权限不足的弹窗,就在json中添加权限。
参考的策略josn文件
{
"version": "2.0",
"statement": [
{
"effect": "allow",
"action": [
"cvm:DescribeSecurityGroupPolicys",
"cvm:DescribeUserResources",
"cvm:CreateSecurityGroupPolicy",
"cvm:DeleteSecurityGroupPolicy",
"cvm:ModifyImageAttribute",
"cvm:ModifySecurityGroupPolicys",
"cvm:ModifySingleSecurityGroupPolicy",
"cvm:DescribeInstancesStatus",
"cvm:DescribeInstances",
"cvm:DescribeImages",
"monitor:DescribeBaseMetricsForConsoleFontEnd",
"cvm:DescribeSecurityGroups",
"vpc:DescribeVpcEx",
"vpc:DescribeNetworkInterfaces",
"cvm:DescribeCbsStorages",
"cvm:DescribeSecurityGroupLimits",
"vpc:DescribeAddress",
"vpc:DescribeService",
"vpc:DescribeServiceGroups",
"vpc:DescribeAddressGroups"
],
"resource": [
"qcs::cvm:ap-shanghai:uin/自己的账户ID:instance/ins-自己的资源ID",
"qcs::cvm:sh:uin/自己的账户ID:image/img-自己的资源ID",
"qcs::cvm:sh:uin/自己的账户ID:sg/sg-自己的资源ID",
"qcs::vpc:sh:uin/自己的账户ID:vpc/vpc-自己的资源ID",
"qcs::vpc:sh:uin/自己的账户ID:eni/*",
"qcs:id/0:cvm:sh:uin/自己的账户ID:volume/*",
"qcs::vpc:sh:uin/自己的账户ID:address/*",
"qcs::vpc:sh:uin/自己的账户ID:service/*",
"qcs::vpc:sh:uin/自己的账户ID:serviceGroup/*",
"qcs::vpc:sh:uin/自己的账户ID:addressGroup/*"
]
}
]
}
这些id在云服务器的信息界面有显示: