AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何在 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
相關內容
- 已提問 5 個月前

