使用标签对ECS实例进行分组授权

本文介绍了如何使用标签对ECS实例进行分组并授权,以限制RAM用户只能查看和管理被授权的ECS实例。

应用场景

假设您的阿里云账号(主账号)购买了10个ECS实例,其中5个想要授权给developer团队,另外5个授权给operator团队。企业希望每个团队只能查看和管理被授权的ECS实例,未被授权的ECS实例不允许查看。

解决方案

  • 按标签标识不同团队的ECS实例。

    规划两个标签,分别用来标识developer团队和operator团队的ECS实例。

  • 将RAM用户分组。

    规划两个RAM用户组,分别对应developer团队和operator团队,然后将对应团队的RAM用户加入到对应的RAM用户组。

  • 基于标签鉴权对RAM用户组进行授权。

    规划两个自定义权限策略,使用如下标签鉴权Condition确定资源范围。然后,将不同的权限策略授权给不同的RAM用户组,RAM用户组中的RAM用户将继承RAM用户组的权限。

    • acs:RequestTag/<tag-key>:请求中传递的标签信息。即用户在调用API的时候,请求参数里面必须携带的标签。

    • acs:ResourceTag/<tag-key>:请求访问的资源上绑定的标签信息。即用户在操作某个资源的时候,资源上必须具备的标签。

具体规划信息如下:

团队

RAM用户组

RAM权限策略

标签

developer团队

developer

policyForDevTeam

标签键:team;标签值:dev。

operator团队

operator

policyForOpsTeam

标签键:team;标签值:ops。

操作步骤

您可以使用阿里云账号(主账号)或具有权限(AliyunRAMFullAccess和AliyunECSFullAccess)的RAM用户完成下述操作。

  1. ECS控制台,为ECS实例创建并绑定标签。

    为5个ECS实例绑定标签team:dev,另外5个ECS实例绑定标签team:ops。具体操作,请参见创建或绑定标签

  2. RAM控制台,创建RAM用户组。

    创建2个RAM用户组:developer、operator,分别对应developer和operator团队。具体操作,请参见创建RAM用户组

  3. RAM控制台,创建RAM用户并将其加入到对应的RAM用户组。

    按需为每个团队创建适量的RAM用户,然后将RAM用户分别加入到RAM用户组developer或operator。具体操作,请参见创建RAM用户为RAM用户组添加RAM用户

  4. RAM控制台,创建自定义权限策略。

    创建2个自定义权限策略:policyForDevTeam、policyForOpsTeam。具体操作,请参见创建自定义权限策略

    policyForDevTeam权限策略内容:

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "ecs:*",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:RequestTag/team": [
                            "dev"
                        ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": "ecs:*",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:ResourceTag/team": [
                            "dev"
                        ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:DescribeTags",
                    "ecs:ListTagResources"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Deny",
                "Action": [
                    "ecs:DeleteTags",
                    "ecs:UntagResources",
                    "ecs:CreateTags",
                    "ecs:TagResources"
                ],
                "Resource": "*"
            }
        ]
    }

    policyForOpsTeam权限策略内容:

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "ecs:*",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:RequestTag/team": [
                            "ops"
                        ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": "ecs:*",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:ResourceTag/team": [
                            "ops"
                        ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:DescribeTags",
                    "ecs:ListTagResources"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Deny",
                "Action": [
                    "ecs:DeleteTags",
                    "ecs:UntagResources",
                    "ecs:CreateTags",
                    "ecs:TagResources"
                ],
                "Resource": "*"
            }
        ]
    }

    权限策略说明:

    策略内容

    策略说明

    {
    	"Effect": "Allow",
    	"Action": "ecs:*",
    	"Resource": "*",
    	"Condition": {
    		"StringEquals": {
    			"acs:RequestTag/team": [
    				"dev"
    			]
    		}
    	}
    }

    允许通过标签team:dev筛选对应的ECS实例。

    {
    	"Effect": "Allow",
    	"Action": "ecs:*",
    	"Resource": "*",
    	"Condition": {
    		"StringEquals": {
    			"acs:ResourceTag/team": [
    				"dev"
    			]
    		}
    	}
    }

    允许对绑定了标签team:dev的ECS实例进行管理操作。

    {
    	"Effect": "Allow",
    	"Action": [
    		"ecs:DescribeTags",
    		"ecs:ListTagResources"
    	],
    	"Resource": "*"
    }

    允许查看ECS实例的所有标签列表。

    说明

    如果您不需要查看所有标签列表,可以删除该条策略。删除后,您可以通过手动输入标签键和标签值的方式筛选ECS实例。

    {
    	"Effect": "Deny",
    	"Action": [
    		"ecs:DeleteTags",
    		"ecs:UntagResources",
    		"ecs:CreateTags",
    		"ecs:TagResources"
    	],
    	"Resource": "*"
    }

    不允许删除、解绑、创建、绑定标签。

    避免RAM用户因修改标签导致没有权限。

  5. 为RAM用户组授权。

    为RAM用户组developer授予自定义权限策略policyForDevTeam;为RAM用户组operator授予自定义权限策略policyForOpsTeam。具体操作,请参见为RAM用户组授权

    说明

    授权后RAM用户将继承对应RAM用户组的权限。

验证结果

  1. 使用RAM用户登录ECS控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在顶部菜单栏左上角处,选择地域。

  4. 实例页面,单击搜索栏旁边的标签筛选,选择对应的标签键和标签值。

    例如:在RAM用户组developer中的RAM用户,可以通过标签team:dev筛选有权限的ECS实例。标签过滤

    重要

    只有当RAM用户选择了对应标签后,RAM用户才能查看到绑定了该标签的ECS实例。否则,RAM用户无法查看到任何ECS实例。

  5. 查看和管理有权限的ECS实例。

更多信息

使用标签对块存储、快照、镜像、安全组、弹性网卡、专有宿主机、SSH密钥对等ECS资源进行分组授权的方法与上述对实例分组授权的方法相同。