通过标签实现精细化权限管理

标签可用于标识云资源,实现资源的分类管理;RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。您可以使用标签对集群资源做分类,并匹配对应的RAM权限策略,实现集群资源的精细化权限管理,使不同用户可以拥有不同集群的访问权限。

基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:

image

操作步骤

您可以使用阿里云账号新建一个自定义权限策略,声明RAM用户需要指定标签后方可访问和操作ACK集群,并将该权限策略授权给RAM用户。

  1. 创建一个RAM用户

  2. 使用阿里云账号(主账号)登录RAM控制台,参见创建自定义权限策略创建一个自定义权限策略,并在策略中通过Condition为云资源设置多个标签条件来限制操作权限。

    说明

    阿里云账号对账号中的资源具有完全管理权限。您也可以创建一个RAM用户,授予AdministratorAccess权限,充当账号管理员。该管理员可以对账号下所有云资源进行管控操作,请参见创建RAM用户作为账号管理员

    ACK支持的条件关键字如下:

    标签鉴权条件

    说明

    acs:RequestTag

    限制在请求中必须传入特定的标签。

    如果API请求中没有标签参数,则不能使用acs:RequestTag,否则会导致鉴权失败。

    acs:ResourceTag

    限制指定的资源必须包含特定的标签。

    如果API请求中没有资源ID参数,则不能使用acs:ResourceTag,否则会导致鉴权失败。

    您可以参见下文示例场景了解示例权限策略。

  3. 参见RAM用户授权将自定义的权限策略授权给RAM用户。自定义权限策略时,请了解支持标签的资源类型不支持标签级别授权的操作

    说明

    为已有RAM用户授权前,请先查看该用户的现有权限策略,避免权限重复或冲突。

示例场景

以下为不同应用场景下对应的自定义权限策略内容。以下内容仅作为示例模板,请根据实际需求遵循权限最小化原则配置权限策略。

权限策略

说明

执行效果

{
    "Version": "1",
    "Statement": [{
        "Effect": "Allow",
        "Action": "cs:CreateCluster",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "acs:RequestTag/test": "foo"
            }
        }
    }]
}

仅允许创建已绑定标签test:foo的集群。

  • 在创建集群过程中在集群配置的高级选项配置标签test:foo,则会创建成功。

  • 创建ACK集群时,不指定标签test:foo,会有以下错误提示。ack

{
    "Version": "1",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "cs:DescribeClustersV1",
            "cs:GetClusters"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "acs:ResourceTag/test": "foo"
            }
        }
    }]
}

仅允许在集群页面列表查看已绑定标签test:foo的集群

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 查看集群列表中的集群。

    • 若集群均不带有test:foo标签,则集群列表为空,无法查看任何集群。

    • 对指定集群添加test:foo标签后,可在集群列表中查看该集群。

{
    "Version": "1",
    "Statement": [{
        "Effect": "Deny",
        "Action": [
            "cs:UntagResources",
            "cs:ListTagResources",
            "cs:TagResources",
            "cs:ModifyClusterTags"
        ],
        "Resource": "*"
    }]
}

不允许修改标签,防止标签被修改。

若强制修改标签时,会提示以下错误。

tag

参考材料

支持标签的资源类型

ACK中仅部分资源类型支持标签授权,支持的资源类型如下表所示。

云服务

云服务代码

资源类型

容器服务 Kubernetes 版

cs

cluster:集群

不支持标签级别授权的操作

ACK中不支持标签授权的操作(Action)如下表所示。具体的权限策略,请参见下文的自定义权限策略示例

操作(Action)

描述

cs:OpenAckService

开通容器服务 Kubernetes 版

cs:ListOperationPlans

查询自动运维任务执行计划列表

cs:CancelOperationPlan

取消自动运维任务执行计划

cs:DescribeTaskInfo

查询任务详情

cs:PauseTask

暂停任务

cs:CancelTask

取消任务

cs:ResumeTask

恢复任务

cs:CreateKubernetesTrigger

创建应用触发器

cs:DeleteTriggerHook

删除触发器

cs:CreateTemplate

创建编排模板

cs:DeleteTemplate

删除编排模板

cs:UpdateTemplate

更新编排模板

cs:DescribeTemplates

查询所有编排模板

cs:DescribeTemplateAttribute

查询指定编排模板的详情

cs:ListUserKubeConfigStates

查询指定用户所有集群的KubeConfig状态列表

cs:ListAddons

查询可用的组件列表

cs:DescribeAddon

查询指定组件的信息

cs:DescribeAddons

查询所有组件信息

cs:DescribeEvents

查询事件详情

cs:DescribeEventsForRegion

查询指定地域的事件列表

cs:DescribeKubernetesVersionMetadata

查询Kubernetes版本的详细信息

cs:CheckServiceRole

检查是否授权指定服务角色

cs:DescribePatternTypes

获取实例规格列表

cs:CheckUserClustersActivity

检查用户在指定集群中的活跃情况

cs:CreateSessionMessage

创建ACK AI助手消息会话

cs:UpdateMessageFeedback

更新ACK AI助手消息反馈

cs:DescribeKubeConfigManagementTaskList

列出KubeConfig相关任务列表

cs:ListHaveKubeconfigDeletedAccounts

查询账号中存在已删除的RAM用户或RAM角色,但其KubeConfig仍在生效中的用户列表

cs:ListKubeConfigRecycle

列出当前阿里云账号下处于回收站中的KubeConfig列表

cs:RestoreKubeConfigRecycleItem

从回收站中恢复已删除的KubeConfig

cs:RestoreMultiKubeConfigRecycleItems

从回收站中批量恢复已删除的KubeConfig

cs:DeleteKubeConfigRecycleItem

从回收站中永久删除KubeConfig

cs:DescribeKubernetesVersionMetadata

查询Kubernetes版本的详细信息

cs:DescribePolicies

查询策略列表

cs:DescribePolicyDetails

查询指定策略的详细信息

cs:DescribeUserInstances

获取添加已有节点时所需的节点列表

cs:DescribeUserPermission

查询RAM用户或角色的权限

cs:UpdateUserPermissions

更新指定RAM用户或角色的RBAC权限

cs:CleanUserPermissions

清除某个用户的证书以及相关RBAC权限

cs:QueryAlertContact

查询告警联系人

cs:AddOrUpdateAlertContact

更新告警联系人

cs:DeleteAlertContact

删除告警联系人

cs:QueryAlertContactGroup

查询告警联系人分组

cs:AddOrUpdateAlertContactGroup

更新告警联系人分组

cs:DeleteAlertContactGroup

删除告警联系人分组

cs:DescribeUserQuota

查询配额信息

cs:ListOperationPlans

查询自动运维任务执行计划列表

cs:CancelOperationPlan

取消自动运维任务执行计划

cs:DescribeTasks

查询任务列表

自定义权限策略示例

重要

获得账号级别权限的RAM用户或RAM角色,能够操作整个账号范围内的相关资源。请务必确认所授予的权限是否符合预期,遵从最小授权原则谨慎分配权限。

对于不支持标签授权的资源类型,授予限制标签的权限将无效,您需要创建自定义权限策略。授权时,请选择资源范围为账号级别,并在策略内容中不限制任何标签。

image以下为您提供两个自定义权限策略示例。您可按需调整。

  • Action中列举了不支持标签授权的所有只读操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "cs:DescribeAddon",
            "cs:DescribeAddons",
            "cs:DescribeEvents",
            "cs:DescribeEventsForRegion",
            "cs:DescribeKubeConfigManagementTaskList",
            "cs:DescribeKubernetesVersionMetadata",
            "cs:DescribePatternTypes",
            "cs:DescribePolicies",
            "cs:DescribePolicyDetails",
            "cs:DescribeTaskInfo",
            "cs:DescribeTemplateAttribute",
            "cs:DescribeTemplates",
            "cs:DescribeUserInstances",
            "cs:DescribeUserPermission",
            "cs:ListAddons",
            "cs:ListHaveKubeconfigDeletedAccounts",
            "cs:ListKubeConfigRecycle",
            "cs:ListOperationPlans",
            "cs:ListUserKubeConfigStates",
            "cs:QueryAlertContact",
            "cs:QueryAlertContactGroup",
            "cs:CheckServiceRole",
            "cs:DescribeTasks",
            "cs:DescribeUserQuota",
            "cs:ListOperationPlans",
            "cs:CheckUserClustersActivity"
          ],
          "Resource": "*"
        }
      ]
    }
  • Action中列举了不支持标签授权的全部操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "cs:AddOrUpdateAlertContact",
            "cs:AddOrUpdateAlertContactGroup",
            "cs:CancelOperationPlan",
            "cs:CancelTask",
            "cs:CheckServiceRole",
            "cs:CheckUserClustersActivity",
            "cs:CleanUserPermissions",
            "cs:CreateKubernetesTrigger",
            "cs:CreateSessionMessage",
            "cs:CreateTemplate",
            "cs:DeleteAlertContact",
            "cs:DeleteAlertContactGroup",
            "cs:DeleteKubeConfigRecycleItem",
            "cs:DeleteTemplate",
            "cs:DeleteTriggerHook",
            "cs:DescribeAddon",
            "cs:DescribeAddons",
            "cs:DescribeEvents",
            "cs:DescribeEventsForRegion",
            "cs:DescribeKubeConfigManagementTaskList",
            "cs:DescribeKubernetesVersionMetadata",
            "cs:DescribePatternTypes",
            "cs:DescribePolicies",
            "cs:DescribePolicyDetails",
            "cs:DescribeTaskInfo",
            "cs:DescribeTemplateAttribute",
            "cs:DescribeTemplates",
            "cs:DescribeUserInstances",
            "cs:DescribeUserPermission",
            "cs:ListAddons",
            "cs:ListHaveKubeconfigDeletedAccounts",
            "cs:ListKubeConfigRecycle",
            "cs:ListOperationPlans",
            "cs:ListUserKubeConfigStates",
            "cs:OpenAckService",
            "cs:DescribeTasks",
            "cs:PauseTask",
            "cs:QueryAlertContact",
            "cs:QueryAlertContactGroup",
            "cs:RestoreKubeConfigRecycleItem",
            "cs:RestoreMultiKubeConfigRecycleItems",
            "cs:ResumeTask",
            "cs:UpdateMessageFeedback",
            "cs:DescribeUserQuota",
            "cs:ListOperationPlans",
            "cs:CancelOperationPlan",
            "cs:UpdateTemplate",
            "cs:UpdateUserPermissions"
          ],
          "Resource": "*"
        }
      ]
    }