标签可用于标识云资源,实现资源的分类管理;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。标签和RAM结合,将标签作为权限策略的匹配条件,可以实现云资源的精细化权限管理。您可以使用标签对集群资源做分类,并匹配对应的权限策略,实现集群资源的精细化权限管理,使不同的用户可以拥有不同的ACK集群的访问权限。
基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:
前提条件
已创建RAM用户,具体操作,请参见创建RAM用户。
应用场景示例
本文操作步骤以下面场景为示例,说明如何使用标签鉴权。
操作步骤
本步骤将使用阿里云账号(主账号)新建一个自定义权限策略UseTagAccessRes(规定了RAM用户需要指定标签test:foo
后方可访问和操作ACK集群),并将自定义权限策略UseTagAccessRes授权给RAM用户userTest。
使用阿里云账号(主账号)登录RAM控制台。
说明阿里云账号(主账号)对账号中的资源具有完全管理权限,您也可以在RAM中创建一个RAM用户,授予AdministratorAccess权限,充当账号管理员,该管理员可以对账号下所有云资源进行管控操作。更多信息,请参见创建账号管理员。
创建自定义权限策略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用户页签,在需要授权的RAM用户右侧单击管理权限,进入权限管理页面。
在权限管理页面选择集群时,在下拉列表中仅显示具有
test:foo
标签的集群。