ACK容器服务集群绑定标签后,您可以使用标签为资源做分类并控制访问权限。本文介绍如何通过标签控制RAM用户的权限,使不同的用户可以拥有不同ACK集群的访问权限。
背景信息
标签可用于标识云资源,实现资源的分类管理;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。标签和RAM结合,将标签作为权限策略的匹配条件,可以实现云资源精细化权限管理。
基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:

应用场景示例
本文操作步骤以下面场景为示例,说明如何使用标签鉴权。
- 不允许创建未绑定标签
test:foo
的集群。
- 不允许操作其他用户创建的集群(未绑定标签
test:foo
的资源)。
- 支持某些查询接口,同时可以查看您已绑定标签
test:foo
的集群。
- 不允许修改标签,防止标签被修改。
- 不允许对未绑定标签
test:foo
的集群进行RBAC授权。
操作步骤
本步骤将使用阿里云账号(主账号)新建一个自定义权限策略UseTagAccessRes(规定了RAM用户需要指定标签test:foo
后方可访问和操作ACK集群),并将自定义权限策略UseTagAccessRes授权给RAM用户userTest。
- 使用阿里云账号(主账号)RAM控制台。
- 创建自定义权限策略UseTagAccessRes。
具体操作,请参见
创建自定义权限策略。如下示例中,您可以在策略(
Condition
)中为云资源设置多个标签条件来限制操作权限。支持的标签鉴权条件如下:
标签鉴权条件 |
说明 |
acs:RequestTag |
限制在请求中必须传入特定的标签。
如果API请求中没有标签参数,则不能使用acs:RequestTag ,否则会导致鉴权失败。
|
acs:ResourceTag |
限制指定的资源必须包含特定的标签。
如果API请求中没有资源ID参数,则不能使用acs:ResourceTag ,否则会导致鉴权失败。
|
以下为不同应用场景下对应的自定义权限策略内容。
注意 以下列举的自定义权限策略内容仅作为示例策略模板提供,请您根据实际需求遵循权限最小化原则配置权限策略。
- 不允许创建未绑定标签
test:foo
的集群,仅允许在创建集群操作时,带上请求标签test:foo
。{
"Statement": [
{
"Effect": "Allow",
"Action": "cs:CreateCluster",
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:RequestTag/test": "foo"
}
}
},
{
"Action": [
"cs:DescribeAddons",
"cs:DescribeKubernetesVersionMetadata"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"vpc:Describe*",
"vpc:List*",
"log:List*",
"log:Describe*",
"cs:Get*",
"cs:Describe*"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
- 不允许操作其他用户创建的集群(未绑定标签
test:foo
的资源)。{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/test": "foo"
}
}
}
]
}
- 支持某些查询接口,同时可以查看您已绑定标签
test:foo
的集群。{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"cs:DescribeClustersV1",
"cs:GetClusters"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/test": "foo"
}
}
},
{
"Action": [
"cs:DescribeClusterAddonsVersion",
"cs:DescribeClusterUserKubeconfig",
"cs:DescribeClusterNodePools",
"cs:DescribeClusterNodes",
"cs:DescribeClusterLogs",
"cs:DescribeClusterNodePoolDetail",
"cs:DescribeEvents",
"cs:DescribeClusterDetail",
"cs:DescribeClusterAddonsUpgradeStatus",
"cs:DescribeClusterNamespaces",
"cs:DescribeAddons",
"log:List*",
"log:Describe*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
- 不允许修改标签,防止标签被修改。
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": [
"cs:UntagResources",
"cs:ListTagResources",
"cs:TagResources",
"cs:ModifyClusterTags"
],
"Resource": "*"
}]
}
- 仅允许对带有请求标签
test:foo
的集群进行RBAC授权。{
"Statement": [{
"Effect": "Allow",
"Action": "cs:Get*",
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/test": "foo"
}
}
},
{
"Action": [
"ram:Get*",
"ram:List*",
"cs:DescribeAddons",
"cs:DescribeKubernetesVersionMetadata",
"cs:DescribeUserPermission",
"cs:GrantPermission"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ram:AttachPolicyToUser",
"ram:AttachPolicyToRole"
],
"Effect": "Allow",
"Resource": [
"acs:ram:*:*:policy/xxxxxx",
"acs:*:*:*:user/*"
]
}
],
"Version": "1"
}
- 将自定义权限策略授权给目标RAM用户或组。
具体操作,请参见
为RAM用户授权。本步骤将自定义权限策略UseTagAccessRes授权给RAM用户userTest。
说明 如果您将自定义权限策略UseTagAccessRes授权已存在的RAM用户,请注意RAM用户多个权限策略产生的权限问题。
执行结果
授权RAM用户只能访问和操作已绑定标签test:foo
的资源后,该RAM用户访问及操作各资源的结果如下:
创建ACK集群
- 创建ACK集群时,在创建流程中集群配置页签的高级选项配置标签
test:foo
,会创建成功。
- 创建ACK集群时,不指定标签
test:foo
,会有以下错误提示。
查看ACK集群
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 查看集群列表中的集群。
- 如果集群中都没有
test:foo
标签,则集群列表为空,无法查看任何集群。
- 若对指定集群添加
test:foo
标签后,则在集群列表中可以看到该集群。
修改标签
不允许修改标签,若强制修改标签时会有以下错误提示。

授权管理
- 登录容器服务管理控制台,在左侧导航栏中选择授权管理。
- 在授权管理页面的选择子账号配置项下,单击子账号页签,在需要授权的RAM用户右侧单击管理权限,进入集群RBAC配置页面。
- 在集群RBAC配置页面选择集群时,在下拉列表中仅显示具有
test:foo
标签的集群。