本文介紹授權管理過程中一些常見問題的解決方法。
類型 | 問題 |
鑒權失敗常見問題 | |
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 Forbidden或STSToken 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_403、User "xxx" cannot xx resource "xx" in API group或ForbiddenQueryClusterNamespace,說明是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
字段指定相應應用實例名稱實現應用級別的授權。
登錄容器服務管理控制臺。
在控制臺左側導航欄中,單擊授權管理。
在授權管理頁面,單擊RAM 用戶頁簽,找到待授權的RAM用戶,單擊右側的管理權限。
說明如果您使用RAM用戶或RAM角色授權,請先確保該RAM用戶或RAM角色已完成集群RBAC配置使用RAM授予集群及云資源訪問權限文檔中的RAM授權,同時已被授予集群內RBAC管理員權限或cluster-admin角色。
在權限管理頁面,單擊添加權限,選擇所需授權的集群、命名空間和授權類型。然后單擊提交授權。
說明您也可以給指定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權限,您可以通過以下方法手動在集群內進行變更操作。
執行以下命令,查看集群內該集群創建者對應的ClusterRoleBinding。
將以下
<uid>
替換為待查找賬號的阿里云賬號UID。kubectl get clusterrolebinding |grep <uid>
執行以下命令,備份并刪除上一步查詢出來的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控制臺并將資源組切換為賬號全部資源。
解決方案
登錄容器服務管理控制臺。
在頂部菜單欄,選擇 。
將鼠標移至控制臺右上角頭像位置,確保是子賬號登錄。
如何給RAM用戶或RAM角色添加創建集群的權限?
用阿里云賬號進行容器服務系統角色的批量授權。
服務角色的授權是一次性操作,如果您不確定是否已經完成,可以使用阿里云賬號登錄后打開以下鏈接進行容器服務系統角色一次性的批量授權:云資源訪問授權。
關于容器服務默認系統角色說明,請參見容器服務ACK服務角色。
主賬號對目標子賬號進行自定義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
地址時提示404或Message: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憑證。