Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何在 Amazon EKS 叢集中跨命名空間管理 IAM 使用者的許可?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中跨命名空間管理 AWS Identity and Access Management (IAM) 使用者的使用者許可。
簡短描述
若要在 Amazon EKS 叢集中跨命名空間管理使用者許可,請完成下列步驟:
- 建立供組織成員擔任的 IAM 角色。
- 為叢集建立 Kubernetes 角色型的存取控制 (RBAC) 角色 (角色)和角色連結 (RoleBinding)。如需詳細資訊,請參閱 Kubernetes 網站上的使用 RBAC 授權。
- 使用 aws-auth ConfigMap 將 IAM 角色對映到 RBAC 角色和群組。
**注意事項:**當 IAM 使用者或角色建立叢集時,只有這個 IAM 身分的 ARN 才會新增到 aws-auth ConfigMap 中,並具有 system:masters 許可。這表示只有叢集建立者才可將更多使用者或角色新增至 aws-auth ConfigMap 中。
解決方案
**注意事項:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確認您使用的是最新的 AWS CLI 版本。
建立組織成員可以承擔的 IAM 角色
建立 IAM 角色,授予組織成員命名空間的存取權:
-
若要驗證使用者是否具備擔任 IAM 角色的許可,請設定 AWS CLI。然後,從該使用者的工作站執行下列命令:
$ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{ "Credentials": { "AccessKeyId": "yourAccessKeyId", "SecretAccessKey": "yourSecretAccessKey", "SessionToken": "yourSessionToken", "Expiration": "2020-01-30T01:57:17Z" }, "AssumedRoleUser": { "AssumedRoleId": "yourAssumedRoleId", "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName" } }
**注意事項:**將 yourAccessKeyId、yourSecretAccessKey、yourSessionToken、yourAssumedRoleId、yourAccountID,以及 yourIAMRoleName 取代為您的值。
-
更新 kubeconfig 檔案,以設定 IAM 使用者的 kubectl 在存取 Kubernetes API 時一律使用該角色:
$ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName
**注意事項:**將 yourClusterName、yourAccountID,以及 yourIAMRoleName 取代為您的值。
為您的叢集建立 Kubernetes RBAC 角色和角色連結
**重要事項:**您必須從設定為存取 Kubernetes 的工作站完成下列步驟。您必須是叢集建立者或已經透過 aws-auth ConfigMap 具有存取權的 IAM 身分。IAM 角色還沒有叢集的存取權。
將叢集角色 (ClusterRole) 連結到角色連結。RBAC 角色和角色連結是 Kubernetes 命名空間的資源。但是,您無法將角色連結到叢集角色連結 (ClusterRoleBinding)。
-
執行下列命令以列出所有內建的叢集角色,並將叢集角色管理員連結到命名空間的角色連結:
$ kubectl get clusterrole
-
執行下列命令以查看與叢集角色管理員相關聯的許可:
$ kubectl describe clusterrole admin
-
建立名為 test 的命名空間,將存取權授予屬於 IAM 群組的 IAM 使用者:
**注意事項:**如果您選擇不同的名稱,請取代 namespace 參數的值。若要使用現有的命名空間,請繼續步驟 4。$ kubectl create namespace test
-
若要建立 Kubernetes RBAC 角色,請將下列程式碼複製到新的 YAML 檔案中 (例如 role.yaml):
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-role namespace: test rules: - apiGroups: - "" - "apps" - "batch" - "extensions" resources: - "configmaps" - "cronjobs" - "deployments" - "events" - "ingresses" - "jobs" - "pods" - "pods/attach" - "pods/exec" - "pods/log" - "pods/portforward" - "secrets" - "services" verbs: - "create" - "delete" - "describe" - "get" - "list" - "patch" - "update"
**注意事項:**Kubernetes RBAC 角色允許使用者執行 verbs 區段中的所有動作。
-
執行下列命令以建立 RBAC 角色:
$ kubectl apply -f role.yaml
-
建立 Kubernetes 角色連結。將下列程式碼複製到新的 YAML 檔案中 (例如 rolebinding.yaml):
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-rolebinding namespace: test subjects: - kind: User name: k8s-test-user roleRef: kind: Role name: k8s-test-role apiGroup: rbac.authorization.k8s.io
**注意事項:**角色連結是命名空間資源,可將 roleRef 區段中的 RBAC 角色連結到 subjects 區段中的使用者。您不需要建立 k8s-test-user 使用者,因為 Kubernetes 沒有 user 資源類型。
-
執行下列命令以建立 RBAC 角色連結:
$ kubectl apply -f rolebinding.yaml
使用 aws-auth ConfigMAP 將 IAM 角色對映到 RBAC 角色和群組
執行下列命令,將 yourIAMRoleName IAM 角色與 k8s-test-user Kubernetes 使用者建立關聯:
$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user
**注意事項:**將 yourClusterName、yourAccountID,以及 yourIAMRoleName 取代為您的值。
測試命名空間的存取權
- 執行下列命令來測試 test 命名空間的存取權:
**注意事項:**上面的命令會建立使用您建立的 k8s-test-role RBAC 角色的工作。$ kubectl create job hello -n test --image=busybox -- echo "Hello World"
- 執行下列命令來檢查 test 命名空間中的 Pod 和工作:
$ kubectl get job -n testNAME COMPLETIONS DURATION AGE hello 1/1 4s 15s $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE hello-tpjmf 0/1 Completed 0 2m34s
相關內容
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 5 個月前