阿里云容器服务Kubernetes版(ACK)将于2021年08月18日开始陆续加强部分OpenAPI对RAM用户(即子账号)和角色的权限控制,请您及时检查阿里云账号(即主账号)下RAM用户或角色的绑定权限,添加可能遗漏的权限策略,避免未授权的RAM用户或角色访问OpenAPI发生鉴权错误。
影响范围
本次鉴权优化完成后,若RAM用户或角色执行的操作没有对应权限,控制台或OpenAPI会提示包含RAM policy Forbidden或STSToken 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无法指定集群授权(例如,CreateCluster、DescribeClusters及DescribeEvents 等),若您需要给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"
}