阿里云容器服务Kubernetes版(ACK)将于2021年08月18日开始陆续加强部分OpenAPI对RAM用户(即子账号)和角色的权限控制,请您及时检查阿里云账号(即主账号)下RAM用户或角色的绑定权限,添加可能遗漏的权限策略,避免未授权的RAM用户或角色访问OpenAPI发生鉴权错误。

影响范围

本次鉴权优化完成后,若RAM用户或角色执行的操作没有对应权限,控制台或OpenAPI会提示包含RAM policy ForbiddenSTSToken policy Forbidden的错误信息,同时错误信息中会包含所需权限的RAM Action名称。

错误信息示例(下面错误信息中包含的RAM Action名称为cs:DescribeEvents):
RAM policy Forbidden for action cs:DescribeEvents
若您的RAM用户或角色使用了下表中的OpenAPI接口并且未授权,请您参考接口对应的RAM Action,及时前往RAM控制台添加指定RAM用户或角色的授权:
API名称 RAM Action 说明
DescribeEvents cs:DescribeEvents 查询用户操作事件
StartAlert cs:StartAlert 启动报警规则
StopAlert cs:StopAlert 停止报警规则
DeleteAlertContact cs:DeleteAlertContact 删除报警联系人
DeleteAlertContactGroup cs:DeleteAlertContactGroup 删除报警联系人分组
OpenAckService cs:OpenAckService 开通容器服务ACK
DescribeClusterResources cs:DescribeClusterResources 根据集群ID查询该集群的所有资源
DescribeUserQuota cs:DescribeUserQuota 查询集群及节点配额
DescribeClustersV1 cs:DescribeClustersV1 查询已创建的所有ACK集群的详情
DescribeExternalAgent cs:DescribeExternalAgent 根据集群ID查询集群中部署注册集群的代理配置
DescribeKubernetesVersionMetadata cs:DescribeKubernetesVersionMetadata 查询ACK支持的Kubernetes版本详情
DescribeClusterAddonUpgradeStatus cs:DescribeClusterAddonUpgradeStatus 查询集群Addons升级状态
DescribeClusters cs:DescribeClusters 查看容器服务中创建的所有集群(包括Swarm和Kubernetes集群)
DescribeClusterNamespaces cs:DescribeClusterNamespaces 查询集群命名空间
ModifyCluster cs:ModifyCluster 根据集群ID修改该集群配置
MigrateCluster cs:MigrateCluster 迁移集群
UpdateK8sClusterUserConfigExpire cs:UpdateK8sClusterUserConfigExpire 更新用户自定义配置过期时间
DescribeClusterNodes cs:DescribeClusterNodes 根据集群ID,查询该集群中的所有节点的详情
DescribeClusterAttachScripts cs:DescribeClusterAttachScripts 查询手动添加实例到集群的脚本
GetUpgradeStatus cs:GetUpgradeStatus 根据集群ID,查询该集群的升级状态
UpgradeCluster cs:UpgradeCluster 根据集群ID,升级指定集群
PauseClusterUpgrade cs:PauseClusterUpgrade 暂停用户集群升级
CancelClusterUpgrade cs:CancelClusterUpgrade 取消处于升级状态的ACK集群
CreateTemplate cs:CreateTemplate 创建一个编排模板
DescribeTemplates cs:DescribeTemplates 查询已创建的所有编排模板详情
DescribeTemplateAttribute cs:DescribeTemplateAttribute 根据编排模板ID,查询该编排模板的详情
UpdateTemplate cs:UpdateTemplate 根据编排模板ID,更新编排模板
DeleteTemplate cs:DeleteTemplate 根据编排模板ID,删除指定编排模板
CreateKubernetesTrigger cs:CreateKubernetesTrigger 为应用创建触发器
GetKubernetesTrigger cs:GetKubernetesTrigger 根据应用名称查询该应用的触发器
DeleteKubernetesTrigger cs:DeleteKubernetesTrigger 根据应用触发器ID,删除应用触发器
InstallClusterAddons cs:InstallClusterAddons 为集群安装组件
DescribeAddons cs:DescribeAddons 查询平台支持的所有组件的详情
DescribeClusterAddonsUpgradeStatus cs:DescribeClusterAddonsUpgradeStatus 根据组件名称查询该组件升级状态
DescribeClusterAddonsVersion cs:DescribeClusterAddonsVersion 根据集群ID,查询集群中已安装的所有组件的详情
ModifyClusterConfiguration cs:ModifyClusterConfiguration 只针对托管版集群
UpgradeClusterAddons cs:UpgradeClusterAddons 根据组件名称,将指定组件升级到指定版本
PauseComponentUpgrade cs:PauseComponentUpgrade 暂停组件升级
ResumeComponentUpgrade cs:ResumeComponentUpgrade 重新开始组件升级
CancelComponentUpgrade cs:CancelComponentUpgrade 取消集群组件升级
UnInstallClusterAddons cs:UnInstallClusterAddons 根据组件名称,卸载指定集群的组件
CreateAutoscalingConfig cs:CreateAutoscalingConfig 创建自动伸缩配置

RAM权限策略修改示例

本示例介绍如何修改RAM用户或角色的RAM权限策略。关于RAM授权的相关操作,请参见自定义RAM授权策略

场景一:RAM用户只对指定集群有cs:Get*权限,需要拥有指定集群所有OpenAPI的只读权限

例如,当前RAM用户只拥有指定集群的cs:Get*,对应的RAM权限策略如下:
{
    "Statement": [
        {
            "Action": "cs:Get*",
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}
若需要RAM用户在OpenAPI鉴权优化后仍具有原有集群所有OpenAPI的只读权限,修改后的RAM权限策略如下所示:
{
    "Statement": [
        {
            "Action": [
                "cs:Get*",
                "cs:List*",
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}
说明 若只包含cs:Get* Action并不能匹配所有只读OpenAPI,需要再增加cs:List*cs:Describe*

场景二:为RAM用户授权指定集群的单个OpenAPI的操作权限

若您需要为RAM用户授权指定集群的单个OpenAPI操作权限,在该RAM权限策略中增加该OpenAPI对应的RAM Action即可。

例如,当前RAM权限策略如下:
{
    "Statement": [
        {
            "Action": [
                "cs:Get*",
                "cs:List*",
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}
若需要授权OpenAPI ModifyCluster,其对应RAM Action为cs:ModifyCluster,修改后的RAM权限策略如下所示:
{
    "Statement": [
        {
            "Action": [
                "cs:Get*",
                "cs:List*",
                "cs:Describe*",
                "cs:ModifyCluster"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}

场景三:为RAM用户授权无法指定集群的OpenAPI的操作权限

部分OpenAPI无法指定集群授权(例如,CreateClusterDescribeClustersDescribeEvents 等),若您需要给RAM用户授权这些无法指定集群的OpenAPI的操作权限,请不要在Resource中限定集群ID。

例如,当前RAM权限策略如下:
{
    "Statement": [
        {
            "Action": [
                "cs:Get*",
                "cs:List*",
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}
若您需要授权无法指定集群的OpenAPI DescribeEvents ,其对应的RAM Action为cs:DescribeEvents,修改后的RAM权限策略如下所示:
{
    "Statement": [
        {
            "Action": [
                "cs:DescribeEvents"
            ],
            "Effect": "Allow",
            "Resource": [
              "*"
            ]
        },
        {
            "Action": [
                "cs:Get*",
                "cs:List*",
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/c2e63856bcd714197****"
            ]
        }
    ],
    "Version": "1"
}