全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:授权管理FAQ

更新时间:Dec 04, 2024

本文介绍授权管理过程中一些常见问题的解决方法。

类型

问题

鉴权失败常见问题

RBAC授权使用常见问题

RAM授权使用常见问题

控制台提示没有权限,报错详情:ForbiddenQueryClusterNamespace Forbidden query namespaces

问题现象

当您在控制台界面操作时,出现错误提示ForbiddenQueryClusterNamespace Forbidden query namespaces

问题原因和解决措施

当前RAM用户或RAM角色没有任何集群内Namespace的RBAC访问权限,需要在授权管理页面对该账号进行授权,具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,报错详情:APISERVER_403

问题现象

当您在控制台界面操作时,出现错误提示APISERVER_403

问题原因和解决措施

当前RAM用户或RAM角色没有被授予K8s集群相应的RBAC权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限。关于K8s RBAC鉴权的更多说明,请参见官方文档

控制台提示子账号不具备授权管理权限

问题现象

当您在控制台界面操作时,出现错误提示当前子账号不具备授权管理权限,请联系主账号或权限管理员授权

问题原因

当前RAM用户或RAM角色缺少必要的RAM授权或对集群的RBAC管理员权限。默认情况下,RAM用户或RAM角色(该例用RAM用户或RAM角色A描述)不具备对其他RAM用户或RAM角色授权RBAC的能力。

解决措施

RAM用户或RAM角色如何给其他RAM用户或RAM角色进行RBAC授权,请参见以下内容进行操作。

  • RBAC管理员权限:需要确保当前登录的RAM用户或RAM角色在目标集群或命名空间上被授予预置的管理员角色或自定义的cluster-admin角色。

  • RAM授权权限:需要确保当前登录的RAM用户或RAM角色被授予必要的RAM权限,策略内容需要包括:

    • 列举其他RAM用户或RAM角色

    • 给指定RAM用户或RAM角色授予RAM权限策略

    • 查看指定RAM用户或RAM角色的K8s RBAC权限配置

    • K8s RBAC授权能力

授予RAM权限方法:

登录RAM控制台,向RAM用户或RAM角色A授予RAM权限,请参见使用RAM授予集群及云资源访问权限。 授权策略内容示例参考如下:

{
    "Statement": [{
            "Action": [
                "ram:Get*",
                "ram:List*",
                "cs:GetUserPermissions",
                "cs:GetSubUsers",
                "cs:GrantPermission"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ram:AttachPolicyToUser",
                "ram:AttachPolicyToRole"
            ],
            "Effect": "Allow",
            "Resource":  [
                "acs:ram:*:*:policy/xxxxxx",
                "acs:*:*:*:user/*"
            ]
        }
    ],
    "Version": "1"
}
说明

xxxxxx需要替换成您想要绑定的RAM策略名称。例如,您替换成*,表示RAM用户或RAM角色A拥有所有RAM策略的授权绑定能力。

当RAM用户或RAM角色A完成了上述策略的绑定后,即拥有对其他RAM用户或RAM角色在指定策略范围内的RAM授权能力,以及在集群内的RBAC授权能力。关于对其他RAM用户或RAM角色授权的具体操作,请参见使用RBAC授予集群内资源操作权限

根据错误信息判断是RAM授权问题还是RBAC授权问题

可以通过API或控制台的错误信息快速判断是RAM权限缺失还是RBAC权限缺失导致的问题。

  • RAM权限缺失问题

    问题现象

    API或控制台上报类似下方的错误信息:

    RAM policy Forbidden for action cs:DescribeEvents
    STSToken policy Forbidden for action cs:DescribeClusterNodes

    问题原因

    从上述错误信息可以得出,RAM用户或RAM角色未授权RAM Action cs:DescribeEvents的权限。

    解决方案

    如果API或控制台的错误信息中包含RAM policy ForbiddenSTSToken policy Forbidden,说明是RAM权限缺失导致的问题。请对相应的RAM权限进行授权,具体操作,请参见使用RAM授予集群及云资源访问权限

  • RBAC权限缺失问题

    问题现象

    API或控制台上报类似下方的错误信息:

    events is forbidden: User "<uid>" cannot list resource "events" in API group "" at the cluster scope
    ForbiddenQueryClusterNamespace, Forbidden query namespaces

    问题原因

    从上述错误信息可以得出,用户<uid>未被授权列出资源事件的权限。

    解决方案

    如果API或控制台的错误信息中包含APISERVER_403User "xxx" cannot xx resource "xx" in API groupForbiddenQueryClusterNamespace,说明是RBAC权限缺失导致的问题。请对相应角色添加对应集群内RBAC权限,具体操作,请参见使用RBAC授予集群内资源操作权限

已经有AdministratorAccess或AliyunCSFullAccess权限,仍旧无法访问集群

容器服务ACK的授权体系包含RAM授权和RBAC授权两部分。更多信息,请参见使用RAM和RBAC进行访问权限控制。在RAM管理控制台完成AdministratorAccess或AliyunCSFullAccess的RAM授权后,还需要在授权管理页面完成RBAC授权后才能访问集群。关于如何进行RBAC授权,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,错误码是ForbiddenCheckControlPlaneLog

问题现象

当您在控制台界面操作时,出现错误并且错误码是ForbiddenCheckControlPlaneLog

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员或运维人员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,错误码是ForbiddenHelmUsage

问题现象

当您在控制台界面操作时,出现错误并且错误码是ForbiddenHelmUsage

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,错误码是ForbiddenRotateCert

问题现象

当您在控制台界面操作时,出现错误并且错误码是ForbiddenRotateCert

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,错误码是ForbiddenAttachInstance

问题现象

当您在控制台界面操作时,出现错误并且错误码是ForbiddenAttachInstance

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员或运维人员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,错误码是ForbiddenUpdateKMSState

问题现象

当您在控制台界面操作时,出现错误并且错误码是ForbiddenUpdateKMSState

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员或运维人员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

控制台提示没有权限,报错信息为Forbidden get trigger

问题现象

当您在控制台界面操作时,出现错误并且错误信息为Forbidden get trigger

问题原因和解决措施

当前RAM用户或RAM角色没有该集群的RBAC管理员、运维人员或开发人员权限,需要在授权管理页面对该账号进行授权。具体操作,请参见使用RBAC授予集群内资源操作权限

授权是否可以精确到应用级别?

可以。您可以通过自定义ClusterRole策略,在策略规则中的resourceNames字段指定相应应用实例名称实现应用级别的授权。

  1. 登录容器服务管理控制台

  2. 在控制台左侧导航栏中,单击授权管理

  3. 授权管理页面,单击RAM 用户页签,找到待授权的RAM用户,单击右侧的管理权限

    说明

    如果您使用RAM用户或RAM角色授权,请先确保该RAM用户或RAM角色已完成集群RBAC配置使用RAM授予集群及云资源访问权限文档中的RAM授权,同时已被授予集群内RBAC管理员权限或cluster-admin角色。

  4. 权限管理页面,单击添加权限,选择所需授权的集群、命名空间和授权类型。然后单击提交授权

    image.png

    说明
    • 您也可以给指定RAM用户一键授予所有集群的相关权限。

    • 当前针对RAM用户或RAM角色的授权,支持在一个目标集群或命名空间上授予一个预置角色和多个自定义角色。

    集群和命名空间的预置角色定义可查看下面的角色权限说明:

    表 1. 角色权限说明

    角色

    集群内RBAC权限

    管理员

    对集群所有命名空间下Kubernetes资源的RBAC读写权限,对集群节点、存储卷、命名空间、配额的读写权限。

    运维人员

    对集群所有命名空间下控制台可见 Kubernetes 资源的 RBAC读写权限,对集群节点、存储卷、命名空间、配额的只读权限。

    开发人员

    对集群所有命名空间或所选命名空间下控制台可见 Kubernetes 资源的 RBAC读写权限。

    受限用户

    对集群所有命名空间或所选命名空间下控制台可见 Kubernetes 资源的 RBAC只读权限。

    自定义

    权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。详情请参见容器服务自定义 RAM 授权策略

    相关后续操作步骤,请参见使用RBAC授予集群内资源操作权限

被授权了cs:admin权限的RAM用户或RAM角色在K8s无法创建CRD

部分容器服务集群(2019年05月以前创建的集群)的默认管理员权限并不包含全部K8s资源访问权限,您可以绑定一个自定义的cluster-admin,或者删除集群已有cs:admin的ClusterRole,然后重新创建ClusterRole。

YAML文件模板样例如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cs:admin
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
- nonResourceURLs:
  - '*'
  verbs:
  - '*'

RAM用户或RAM角色如何给其他RAM用户或RAM角色进行RBAC授权?

若您登录过程中遇到此问题,请参见控制台提示子账号不具备授权管理权限操作解决。

如何判断集群内的ClusterRoleBinding或RoleBinding资源关联的是哪个RAM用户或RAM角色?

您可以根据ClusterRoleBinding或RoleBinding资源中定义的subjects字段的值进行判断。subjects字段中kind的值为User时,如果name的值是由一组数字或数字加短横线(-)组成,那么此name中包含的信息即为该资源关联的RAM用户或RAM角色的ID。

例如,下面这两个资源中,ClusterRoleBinding资源关联的用户ID是1***,RoleBinding资源关联的用户ID是2***

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: 1***-cluster-admin-clusterrolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: 1***-1673419473

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: 2***-default-rolebinding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: 'cs:ns:dev'
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: '2***'

无法变更或删除集群创建者的RBAC权限

问题现象

当您尝试变更或删除集群创建者的RBAC权限时,该权限变更操作无法生效。

问题原因

为了防止误操作以及出现集群创建者无法操作自己创建的集群的情况,所有针对集群创建者的RBAC授权变更操作都将无法生效。

解决措施

如果确实需要删除某集群创建者所拥有的RBAC权限,您可以通过以下方法手动在集群内进行变更操作。

  1. 执行以下命令,查看集群内该集群创建者对应的ClusterRoleBinding。

    将以下 <uid>替换为待查找账号的阿里云账号UID。

    kubectl get clusterrolebinding |grep <uid>
  2. 执行以下命令,备份并删除上一步查询出来的ClusterRoleBinding。

    将以下 <name>替换为上一步查询结果中的名称信息。

    kubectl get clusterrolebinding <name> -o yaml > <name>.yaml
    kubectl delete clusterrolebinding <name>

使用终端功能需要哪些权限?

RAM用户或RAM角色需要被授予目标集群的RBAC管理员、运维人员或开发者中的任意一个权限,并且还需要被授予 cs:DescribeClusterUserKubeconfig这个API的RAM权限,只有当同时拥有了相应的RBAC权限和RAM权限后才能正常使用终端功能。具体操作,请参见使用RBAC授予集群内资源操作权限使用RAM授予集群及云资源访问权限

如何给通过CloudSSO登录的用户授予RBAC权限?

问题现象

如何给通过CloudSSO(云SSO)登录的用户授予RBAC权限,假设CloudSSO登录的用户是AliyunReservedSSO-Policy-foo-bar-admin/foo.bar,如何给该用户授权?

解决措施

因为通过CloudSSO登录的用户实际上是以RAM角色的身份登录的控制台,所以只需要给这个RAM角色授予所需的RBAC权限。假设CloudSSO登录的用户是AliyunReservedSSO-Policy-foo-bar-admin/foo.bar,对于该用户只需要给他使用的角色AliyunReservedSSO-Policy-foo-bar-admin进行授权即可。具体操作,请参见使用RBAC授予集群内资源操作权限

已授予RAM用户或RAM角色对所有集群的只读权限,但部分集群看不到

问题现象

通过RAM控制台给RAM用户或RAM角色授权了全部集群的只读权限,通过RBAC授予了其中两个集群指定命名空间的访问权限。之前RAM用户或RAM角色在控制台可以看到所有集群,然而现在只能看到部分集群。用户的RAM权限正常,且近期没有做权限变更。

问题原因

您没有使用对应的RAM用户或RAM角色登录RAM控制台或者使用了特定的资源组。请切换为使用相应的RAM用户或RAM角色登录RAM控制台并将资源组切换为账号全部资源

解决方案

  1. 登录容器服务管理控制台

  2. 在顶部菜单栏,选择账号全部资源 > 账号全部资源

    11

  3. 将鼠标移至控制台右上角头像位置,确保是子账号登录。

如何给RAM用户或RAM角色添加创建集群的权限?

  1. 用阿里云账号进行容器服务系统角色的批量授权。

    • 服务角色的授权是一次性操作,如果您不确定是否已经完成,可以使用阿里云账号登录后打开以下链接进行容器服务系统角色一次性的批量授权:云资源访问授权

    • 关于容器服务默认系统角色说明,请参见容器服务ACK服务角色

  2. 主账号对目标子账号进行自定义RAM授权策略操作。

    请确保目标RAM账号至少有cs:CreateCluster权限。具体操作,请参见使用RAM授予集群及云资源访问权限

    YAML文件模板样例如下:

    {
     "Statement": [{
         "Action": [
             "cs:CreateCluster"
         ],
         "Effect": "Allow",
         "Resource": [
             "*"
         ]
     }],
     "Version": "1"
    }
    说明
    • 由于集群创建过程中需要选择关联的VPC等云资源,请根据需要进行对应的RAM授权操作。

    • 请确保目标子账号至少有VPC资源的List权限,该权限的授权可以通过授权系统策略AliyunVPCReadOnlyAccess完成。

    • 如果有其他的资源配置需要,请参考对应服务的系统策略或授权文档进行授权操作。更多信息,请参见RAM授权

出现哪些错误码表示当前阿里云账号未授权容器服务依赖的服务角色?

当您通过控制台或OpenAPI访问容器服务时,如果遇到下面这些错误码,表示您的阿里云账号未完成授权容器服务依赖的服务角色的操作,请使用阿里云账号或拥有AdministratorAccess权限的RAM用户,单击实际的错误信息中所返回的授权链接完成授权。

错误码

错误信息示例

ErrManagedKuberneteRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

ErrKubernetesAuditRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

ErrManagedAddonRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

ErrManagedSecurityRoleNotAttach

please complete the security ramrole authorization at https://***

ErrEdgeAddonRoleNotAttach

please complete the edge cluster addon's service ramrole authorization at https://***

ErrAutoScalerRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

ErrAcrHelperRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

ErrCostExporterRoleNotAttach

please complete the cluster addon's service ramrole authorization at https://***

MissingAuth.AliyuncsManagedSecurityRole

please complete the security ramrole authorization at https://***

如何手动打开ACK服务角色默认一键授权页面?

因为某种原因把ACK的RAM授权给删了,需要重新授权。具体操作,请参见步骤二:一键授权服务角色

说明

重新授权需要用阿里云账号操作。

ECS的RAM角色被删除后如何恢复?

ECS节点上运行的应用中请求metadata api 100地址时提示404Message:Node condition RAMRoleError is now: True, reason: NodeHasNoRAMRole。您可以选择以下方案尝试恢复ECS的RAM角色:

  • ECS的RAM角色被删除后,您需要为节点授予相应的RAM角色。具体操作,请参见更换实例RAM角色

    • Master节点:在集群信息基本信息页签下,授予Master RAM 角色对应的RAM角色。

    • Worker节点:在集群信息基本信息页签下,授予Worker RAM 角色对应的RAM角色。

  • 如果您修改了RAM角色的策略内容,需要确认修改的内容是否有问题。

  • 如果您是在上报提示前修改了RAM角色,请尝试恢复为上报提示前RAM角色策略内容授权版本。

如何在Kubernetes集群指定RAM中的自定义角色?

您可以通过自定义Worker RAM角色的方式在Kubernetes集群指定RAM中的自定义角色。具体操作,请参见使用自定义Worker RAM角色

当RAM用户因为离职等原因需要删除时,是否会影响线上业务?

删除RAM用户不会影响其他账号的正常集群管控操作。您需要使用主账号及时吊销离职用户的KubeConfig权限,具体操作,请参见吊销集群的KubeConfig凭证

重要

在吊销前,您需要替换已在应用中使用的离职用户的KubeConfig凭证。