阿里云容器服务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说明
DescribeEventscs:DescribeEvents查询用户操作事件
StartAlertcs:StartAlert启动报警规则
StopAlertcs:StopAlert停止报警规则
DeleteAlertContactcs:DeleteAlertContact删除报警联系人
DeleteAlertContactGroupcs:DeleteAlertContactGroup删除报警联系人分组
OpenAckServicecs:OpenAckService开通容器服务ACK
DescribeClusterResourcescs:DescribeClusterResources根据集群ID查询该集群的所有资源
DescribeUserQuotacs:DescribeUserQuota查询集群及节点配额
DescribeClustersV1cs:DescribeClustersV1查询已创建的所有ACK集群的详情
DescribeExternalAgentcs:DescribeExternalAgent根据集群ID查询集群中部署注册集群的代理配置
DescribeKubernetesVersionMetadatacs:DescribeKubernetesVersionMetadata查询ACK支持的Kubernetes版本详情
DescribeClusterAddonUpgradeStatuscs:DescribeClusterAddonUpgradeStatus查询集群Addons升级状态
DescribeClusterscs:DescribeClusters查看容器服务中创建的所有集群(包括Swarm和Kubernetes集群)
DescribeClusterNamespacescs:DescribeClusterNamespaces查询集群命名空间
ModifyClustercs:ModifyCluster根据集群ID修改该集群配置
MigrateClustercs:MigrateCluster迁移集群
UpdateK8sClusterUserConfigExpirecs:UpdateK8sClusterUserConfigExpire更新用户自定义配置过期时间
DescribeClusterNodescs:DescribeClusterNodes根据集群ID,查询该集群中的所有节点的详情
DescribeClusterAttachScriptscs:DescribeClusterAttachScripts查询手动添加实例到集群的脚本
GetUpgradeStatuscs:GetUpgradeStatus根据集群ID,查询该集群的升级状态
UpgradeClustercs:UpgradeCluster根据集群ID,升级指定集群
PauseClusterUpgradecs:PauseClusterUpgrade暂停用户集群升级
CancelClusterUpgradecs:CancelClusterUpgrade取消处于升级状态的ACK集群
CreateTemplatecs:CreateTemplate创建一个编排模板
DescribeTemplatescs:DescribeTemplates查询已创建的所有编排模板详情
DescribeTemplateAttributecs:DescribeTemplateAttribute根据编排模板ID,查询该编排模板的详情
UpdateTemplatecs:UpdateTemplate根据编排模板ID,更新编排模板
DeleteTemplatecs:DeleteTemplate根据编排模板ID,删除指定编排模板
CreateKubernetesTriggercs:CreateKubernetesTrigger为应用创建触发器
GetKubernetesTriggercs:GetKubernetesTrigger根据应用名称查询该应用的触发器
DeleteKubernetesTriggercs:DeleteKubernetesTrigger根据应用触发器ID,删除应用触发器
InstallClusterAddonscs:InstallClusterAddons为集群安装组件
DescribeAddonscs:DescribeAddons查询平台支持的所有组件的详情
DescribeClusterAddonsUpgradeStatuscs:DescribeClusterAddonsUpgradeStatus根据组件名称查询该组件升级状态
DescribeClusterAddonsVersioncs:DescribeClusterAddonsVersion根据集群ID,查询集群中已安装的所有组件的详情
ModifyClusterConfigurationcs:ModifyClusterConfiguration只针对托管版集群
UpgradeClusterAddonscs:UpgradeClusterAddons根据组件名称,将指定组件升级到指定版本
PauseComponentUpgradecs:PauseComponentUpgrade暂停组件升级
ResumeComponentUpgradecs:ResumeComponentUpgrade重新开始组件升级
CancelComponentUpgradecs:CancelComponentUpgrade取消集群组件升级
UnInstallClusterAddonscs:UnInstallClusterAddons根据组件名称,卸载指定集群的组件
CreateAutoscalingConfigcs: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"
}