EKS 存取項目 - Eksctl 使用者指南

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

EKS 存取項目

您可以使用 eksctl 來管理 EKS 存取項目。使用存取項目將 Kubernetes 許可授予 AWS IAM 身分。例如,您可以授予開發人員角色讀取叢集中 Kubernetes 資源的許可。

本主題說明如何使用 eksctl 來管理存取項目。如需存取項目的一般資訊,請參閱使用 EKS 存取項目授予 IAM 使用者對 Kubernetes 的存取權

您可以連接 AWS 定義的 Kubernetes 存取政策,或與 Kubernetes 群組建立關聯。

如需可用預先定義政策的詳細資訊,請參閱將存取政策與存取項目建立關聯

如果您需要定義客戶 Kubernetes 政策,請將 IAM Identity 與 Kubernetes 群組建立關聯,並將許可授予該群組。

叢集身分驗證模式

只有在叢集的身分驗證模式允許時,您才能使用存取項目。

如需詳細資訊,請參閱設定叢集身分驗證模式

使用 YAML 檔案設定身分驗證模式

eksctl 已在 ClusterConfig 下新增accessConfig.authenticationMode欄位,可設定為下列三個值之一:

  • CONFIG_MAP - EKS API 中的預設值 - 只會使用 aws-auth ConfigMap

  • API - 只會使用存取項目 API

  • API_AND_CONFIG_MAP - 預設 - eksctl 可使用 aws-auth ConfigMap 和存取項目 API

在 ClusterConfig YAML 中設定身分驗證模式:

accessConfig: authenticationMode: <>

使用 命令更新身分驗證模式

如果您想要在已建立的非eksctl 現有叢集上使用存取項目,其中使用 CONFIG_MAP選項,使用者必須先authenticationMode將 設定為 API_AND_CONFIG_MAP。為此, eksctl 引進了更新叢集身分驗證模式的新命令,這可與 CLI 旗標搭配使用,例如

eksctl utils update-authentication-mode --cluster my-cluster --authentication-mode API_AND_CONFIG_MAP

存取項目資源

存取項目具有類型,例如 STANDARDEC2_LINUX。類型取決於您使用存取項目的方式。

  • standard 類型用於將 Kubernetes 許可授予 IAM 使用者和 IAM 角色。

    • 例如,您可以將存取政策連接至您用來存取主控台的角色或使用者,以在 AWS 主控台中檢視 Kubernetes 資源。

  • EC2_LINUXEC2_WINDOWS類型用於將 Kubernetes 許可授予 EC2 執行個體。執行個體使用這些許可來加入叢集。

如需存取項目類型的詳細資訊,請參閱建立存取項目

IAM 實體

您可以使用存取項目將 Kubernetes 許可授予 IAM 身分,例如 IAM 使用者和 IAM 角色。

使用 accessConfig.accessEntries 欄位將 IAM 資源的 ARN 與 Access Entries EKS API 建立關聯。例如:

accessConfig: authenticationMode: API_AND_CONFIG_MAP accessEntries: - principalARN: arn:aws:iam::111122223333:user/my-user-name type: STANDARD kubernetesGroups: # optional Kubernetes groups - group1 # groups can used to give permissions via RBAC - group2 - principalARN: arn:aws:iam::111122223333:role/role-name-1 accessPolicies: # optional access polices - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy accessScope: type: namespace namespaces: - default - my-namespace - dev-* - principalARN: arn:aws:iam::111122223333:role/admin-role accessPolicies: # optional access polices - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster - principalARN: arn:aws:iam::111122223333:role/role-name-2 type: EC2_LINUX

除了關聯 EKS 政策之外,也可以指定 IAM 實體所屬的 Kubernetes 群組,進而透過 RBAC 授予許可。

受管節點群組和 Fargate

EKS API 會在幕後與這些資源的存取項目整合。新建立的受管節點群組和 Fargate Pod 將建立 API 存取項目,而不是使用預先載入的 RBAC 資源。現有的節點群組和 Fargate Pod 不會變更,並繼續依賴 aws-auth 組態映射中的項目。

自我管理節點群組

每個存取項目都有一個類型。對於授權自我管理節點群組, eksctl會為每個節點群組建立唯一的存取項目,並將主體 ARN 設定為節點角色 ARN,並將類型設定為 EC2_LINUXEC2_WINDOWS取決於節點群組 amiFamily。

建立您自己的存取項目時,您也可以指定 EC2_LINUX(適用於與 Linux 或 Bottlerocket 自我管理節點搭配使用的 IAM 角色)、 EC2_WINDOWS (適用於與 Windows 自我管理節點搭配使用的 IAM 角色)、 FARGATE_LINUX (適用於與 AWS Fargate (Fargate) 搭配使用的 IAM 角色) 或 STANDARD類型。如果您未指定類型,預設類型會設為 STANDARD

注意

刪除使用預先存在的 建立的節點群組時instanceRoleARN,當沒有更多節點群組與其相關聯時,使用者有責任刪除對應的存取項目。這是因為 eksctl 不會嘗試查明非 eksctl 建立的自我管理節點群組是否仍在使用存取項目,因為它是一個複雜的程序。

建立存取項目

這可以在叢集建立期間以兩種不同的方式完成,指定所需的存取項目做為組態檔案的一部分並執行:

eksctl create cluster -f config.yaml

OR 建立叢集後,透過執行:

eksctl create accessentry -f config.yaml

如需建立存取項目的範例組態檔案,請參閱 eksctl GitHub 儲存庫中的 40-access-entries.yaml

取得存取項目

使用者可以執行下列其中一項,以擷取與特定叢集相關聯的所有存取項目:

eksctl get accessentry -f config.yaml

eksctl get accessentry --cluster my-cluster

或者,若要僅擷取與特定 IAM 實體對應的存取項目,則應使用 --principal-arn旗標,例如

eksctl get accessentry --cluster my-cluster --principal-arn arn:aws:iam::111122223333:user/admin

刪除存取項目

若要一次刪除單一存取項目,請使用:

eksctl delete accessentry --cluster my-cluster --principal-arn arn:aws:iam::111122223333:user/admin

若要刪除多個存取項目,請使用 --config-file旗標,並在最上層accessEntry欄位下指定與存取項目principalARN’s對應的所有 ,例如

... accessEntry: - principalARN: arn:aws:iam::111122223333:user/my-user-name - principalARN: arn:aws:iam::111122223333:role/role-name-1 - principalARN: arn:aws:iam::111122223333:role/admin-role
eksctl delete accessentry -f config.yaml

從 aws-auth ConfigMap 遷移

使用者可以執行下列動作,將現有的 IAM 身分從 configmap aws-auth 遷移至存取項目:

eksctl utils migrate-to-access-entry --cluster my-cluster --target-authentication-mode <API or API_AND_CONFIG_MAP>

--target-authentication-mode旗標設定為 時API,身分驗證模式會切換為 API 模式 (如果已在 API 模式則略過)、IAM 身分映射會遷移至存取項目,並從叢集中刪除aws-auth組態對應。

--target-authentication-mode旗標設為 時API_AND_CONFIG_MAP,身分驗證模式會切換為 API_AND_CONFIG_MAP 模式 (如果已在 API_AND_CONFIG_MAP 模式則略過),IAM 身分映射會遷移至存取項目,但aws-auth組態對應會保留。

注意

--target-authentication-mode旗標設定為 時API,如果 configmap aws-auth 具有下列其中一個限制條件,則此命令不會將身分驗證模式更新為 API 模式。

  • 有一個帳戶層級身分映射。

  • 一或多個角色/使用者會映射至開頭為字首 (EKS 特定群組system:除外,即 system:masterssystem:bootstrapperssystem:nodes等) 的 kubernetes 群組。

  • 一或多個 IAM 身分映射適用於 【服務連結角色】(link:IAM/latest/UserGuide/using-service-linked-roles.html)。

停用叢集建立器管理員許可

eksctl 已新增 欄位,accessConfig.bootstrapClusterCreatorAdminPermissions: boolean當 設定為 false 時, 會停用將叢集管理員許可授予建立叢集的 IAM 身分,亦即

將 選項新增至組態檔案:

accessConfig:
  bootstrapClusterCreatorAdminPermissions: false

和 執行:

eksctl create cluster -f config.yaml