全部產品
Search
文件中心

Container Service for Kubernetes:授權管理FAQ

更新時間:Dec 05, 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許可權,仍舊無法訪問叢集

Container ServiceACK的授權體系包含RAM授權和RBAC授權兩部分。更多資訊,請參見使用RAM和RBAC進行存取權限控制。在Resource Access Management控制台完成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. 登入Container Service管理主控台

  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角色獲得不符合預期的許可權。詳情請參見Container Service自訂 RAM 授權策略

    相關後續操作步驟,請參見使用RBAC授予叢集內資源操作許可權

被授權了cs:admin許可權的RAM使用者或RAM角色在K8s無法建立CRD

部分Container Service叢集(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. 登入Container Service管理主控台

  2. 在頂部功能表列,選擇帳號全部資源 > 帳號全部資源

    11

  3. 將滑鼠移至控制台右上方頭像位置,確保是子帳號登入。

如何給RAM使用者或RAM角色添加建立叢集的許可權?

  1. 用阿里雲帳號進行Container Service系統角色的大量授權。

    • 服務角色的授權是一次性操作,如果您不確定是否已經完成,可以使用阿里雲帳號登入後開啟以下連結進行Container Service系統角色一次性的大量授權:雲資源訪問授權

    • 關於Container Service預設系統角色說明,請參見Container ServiceACK服務角色

  2. 主帳號對目標子帳號進行自訂RAM授權策略操作。

    請確保目標RAM帳號至少有cs:CreateCluster許可權。具體操作,請參見使用RAM授予叢集及雲資源存取權限

    YAML檔案模板範例如下:

    {
     "Statement": [{
         "Action": [
             "cs:CreateCluster"
         ],
         "Effect": "Allow",
         "Resource": [
             "*"
         ]
     }],
     "Version": "1"
    }
    說明
    • 由於叢集建立過程中需要選擇關聯的VPC等雲資源,請根據需要進行對應的RAM授權操作。

    • 請確保目標子帳號至少有VPC資源的List許可權,該許可權的授權可以通過授權系統策略AliyunVPCReadOnlyAccess完成。

    • 如果有其他的資源配置需要,請參考對應服務的系統策略或授權文檔進行授權操作。更多資訊,請參見RAM授權

出現哪些錯誤碼錶示當前阿里雲帳號未授權Container Service依賴的服務角色?

當您通過控制台或OpenAPI訪問Container Service時,如果遇到下面這些錯誤碼,表示您的阿里雲帳號未完成授權Container Service依賴的服務角色的操作,請使用阿里雲帳號或擁有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授權給刪了,需要重新授權。具體操作,請參見首次使用Container ServiceKubernetes版

說明

重新授權需要用阿里雲帳號操作。

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憑證。