前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何限制子账号只能在某个VPC下创建CVM服务器,并且只能绑定某个安全组

如何限制子账号只能在某个VPC下创建CVM服务器,并且只能绑定某个安全组

原创
作者头像
camljy
发布2024-11-19 01:17:58
发布2024-11-19 01:17:58
1430
举报
文章被收录于专栏:访问管理CAM访问管理CAM

问:如何限制子账号只能在某个VPC下创建CVM服务器,并且只能绑定某个安全组

可以通过创建自定策略解决该问题,在下整理了控制台操作和API操作两种策略写法,可以根据自己的实际情况进行修改

为什么要写两个版本呢,因为控制台和API操作所用到的接口略微有些不同,控制台需要用鼠标进行选择,需要部分资源列表的权限,所以控制台策略里比API策略多了VPC和子网列表的权限

最终效果:客户通过控制台或者API创建CVM时,只能选择指定的VPC和安全组,选择非指定的VPC和安全组将报错,没有权限

注:这个只是提供一个策略模板,并不是只能限制VPC和安全组,比如镜像,子网都可以限制,按自己的需求修改对应的资源ID即可

1、控制台

代码语言:json
复制
{
    "statement": [
        {
            "action": [
                "cvm:RunInstances"//创建服务接口
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/vpc-lw8hhxxx",  //VPCID,可以加多个,一行一个
                "qcs::cvm:::sg/sg-fffa0b",//安全组ID
                "qcs::vpc:::subnet/*",//*为该VPC下的所有子网,您可以根据需要修改成具体的子网ID
                "qcs::cvm:::image/*",//镜像ID,*为所有镜像,也可以修改成具体的镜像ID
                "qcs::cvm:::instance/*",//默认为*,不用修改
                "qcs::cvm:::systemdisk/*",//默认为*,不用修改
                "qcs::cvm:::datadisk/*"//默认为*,不用修改
            ]
        },
        {
            "action": [
                "vpc:DescribeAddressInventory"//不需要动
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": [
                "vpc:DescribeVpcEx",//vpc列表接口
                "vpc:DescribeSubnetEx"//子网列表接口
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/*",//*为所有vpc列表,您可以修改成具体的vpcID,可以写多个,一行一个,这里只是允许子账号在购买页面选择vpc,但是否可以在该vpc下创建服务器,需要看上面指定的是哪个vpc
                "qcs::vpc:::subnet/*"//*为所有子网列表,您可以修改成具体的vpcID,可以写多个,一行一个,跟上面同理
            ]
        },
        {
            "action": [
                "cvm:*"//这个模块是限制子账号可以访问哪些服务器,云盘和镜像,如果只需要子账号创建服务器,不需要管理,可以把这个模块删除,删除{},所有内容,包括括号
            ],
            "effect": "allow",
            "resource": [
                "qcs::cvm:::instance/*",//服务器ID,*为所有服务器,可以修改为具体的服务器ID,可以写多个,一行一个
                "qcs::cvm:::volume/*",//云盘ID,*为所有云盘,可以修改为具体的云盘ID,可以写多个,一行一个
                "qcs::cvm:::image/*"//镜像ID,*为所有镜像,可以修改为具体的镜像ID,可以写多个,一行一个
            ]
        },
        {
            "action": [
                "tag:*"//标签模块,不需要可以删除,删除{},所有内容,包括括号
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": "finance:*",//购买服务器的财务权限
            "effect": "allow",
            "resource": "qcs::cvm:::*"
        }
    ],
    "version": "2.0"
}

再来版不带注释的

代码语言:json
复制
{
    "statement": [
        {
            "action": [
                "cvm:RunInstances"
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/vpc-lwsssd",
                "qcs::cvm:::sg/sgfff0b",
                "qcs::vpc:::subnet/*",
                "qcs::cvm:::image/*",
                "qcs::cvm:::instance/*",
                "qcs::cvm:::systemdisk/*",
                "qcs::cvm:::datadisk/*"
            ]
        },
        {
            "action": [
                "vpc:DescribeAddressInventory"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": [
                "vpc:DescribeVpcEx",
                "vpc:DescribeSubnetEx"
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/*",
                "qcs::vpc:::subnet/*"
            ]
        },
        {
            "action": [
                "cvm:*"
            ],
            "effect": "allow",
            "resource": [
                "qcs::cvm:::instance/*",
                "qcs::cvm:::volume/*",
                "qcs::cvm:::image/*"
            ]
        },
        {
            "action": [
                "tag:*"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": "finance:*",
            "effect": "allow",
            "resource": "qcs::cvm:::*"
        }
    ],
    "version": "2.0"
}

2、API

代码语言:json
复制
{
    "statement": [
        {
            "action": [
                "cvm:RunInstances"//创建服务接口
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/vpc-lwxxxxcd",  //VPCID,可以加多个,一行一个
                "qcs::cvm:::sg/sg-jzxxx0b",//安全组ID
                "qcs::vpc:::subnet/*",//*为该VPC下的所有子网,您可以根据需要修改成具体的子网ID
                "qcs::cvm:::image/*",//镜像ID,*为所有镜像,也可以修改成具体的镜像ID
                "qcs::cvm:::instance/*",//默认为*,不用修改
                "qcs::cvm:::systemdisk/*",//默认为*,不用修改
                "qcs::cvm:::datadisk/*"//默认为*,不用修改
            ]
        },
        {
            "action": [
                "cvm:*"//这个模块是限制子账号可以访问哪些服务器,云盘和镜像,如果只需要子账号创建服务器,不需要管理,可以把这个模块删除,删除{},所有内容,包括括号
            ],
            "effect": "allow",
            "resource": [
                "qcs::cvm:::instance/*",//服务器ID,*为所有服务器,可以修改为具体的服务器ID,可以写多个,一行一个
                "qcs::cvm:::volume/*",//云盘ID,*为所有云盘,可以修改为具体的云盘ID,可以写多个,一行一个
                "qcs::cvm:::image/*"//镜像ID,*为所有镜像,可以修改为具体的镜像ID,可以写多个,一行一个
            ]
        },
        {
            "action": [
                "tag:*"//标签模块,不需要可以删除,删除{},所有内容,包括括号
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": "finance:*",//购买服务器的财务权限
            "effect": "allow",
            "resource": "qcs::cvm:::*"
        }
    ],
    "version": "2.0"
}

再来版不带注释的

代码语言:json
复制
{
    "statement": [
        {
            "action": [
                "cvm:RunInstances"
            ],
            "effect": "allow",
            "resource": [
                "qcs::vpc:::vpc/vpc-lxxxxxcd",
                 "qcs::cvm:::sg/sg-jxxxx0b",
                "qcs::vpc:::subnet/*",
                "qcs::cvm:::image/*",
                "qcs::cvm:::instance/*",
                "qcs::cvm:::systemdisk/*",
                "qcs::cvm:::datadisk/*"
            ]
        },
        {
            "action": [
                "cvm:*"
            ],
            "effect": "allow",
            "resource": [
                "qcs::cvm:::instance/*",
                "qcs::cvm:::volume/*",
                "qcs::cvm:::image/*"
            ]
        },
        {
            "action": [
                "tag:*"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        },
        {
            "action": "finance:*",
            "effect": "allow",
            "resource": "qcs::cvm:::*"
        }
    ],
    "version": "2.0"
}

3、创建策略并授权

https://console.cloud.tencent.com/cam/policy

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问:如何限制子账号只能在某个VPC下创建CVM服务器,并且只能绑定某个安全组
  • 可以通过创建自定策略解决该问题,在下整理了控制台操作和API操作两种策略写法,可以根据自己的实际情况进行修改
  • 为什么要写两个版本呢,因为控制台和API操作所用到的接口略微有些不同,控制台需要用鼠标进行选择,需要部分资源列表的权限,所以控制台策略里比API策略多了VPC和子网列表的权限
  • 最终效果:客户通过控制台或者API创建CVM时,只能选择指定的VPC和安全组,选择非指定的VPC和安全组将报错,没有权限
  • 注:这个只是提供一个策略模板,并不是只能限制VPC和安全组,比如镜像,子网都可以限制,按自己的需求修改对应的资源ID即可
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档