作者:SRE運維部落格
部落格地址: https://www.cnsre.cn/
因為建立 Amazon EKS
叢集時,IAM
使用者或角色會自動在叢集的 RBAC
配置中被授予 system:masters
許可權。例如,IAM
使用者或角色可以是建立叢集的聯合身份使用者。如果使用不屬於 aws-auth
ConfigMap
的 IAM
使用者或角色訪問 Amazon EKS
控制檯,則無法看到 Kubernetes
工作負載。也不會看到叢集的概覽詳細資訊。所以要向其他 AWS
使用者或角色授予與叢集互動的能力,您必須在 Kubernetes
中編輯 aws-auth
ConfigMap
。
因為部門有不通的角色,所以想基於不通的角色分配不同的許可權,下面是記錄新增一個對 EKS
只有只讀許可權的 AIM
使用者。
{{< notice info "注意:" >}}
如果您在執行 AWS 命令列介面 (AWS CLI) 命令時遇到錯誤,請確保您使用的是最新版的 AWS CLI。
{{< /notice >}}
為 IAM 使用者或角色配置許可權
- 要查詢具有主要叢集配置許可權的叢集建立者或管理員角色,請在 AWS CloudTrail 中搜尋 CreateCluster API 呼叫。然後,檢查此 API 呼叫的 UserIdentity 部分。
- 識別需要許可權的 IAM 使用者或角色。
- 確認已識別的 IAM 使用者或角色有權在 AWS 管理控制檯中檢視所有叢集的節點和工作負載。
使用 aws-auth ConfigMap 將 IAM 使用者或角色對映到 RBAC 角色和組
{{< notice info "重要提示:" >}}
在連線 Amazon EKS API 伺服器之前,安裝並配置最新版本的 AWS CLI。
{{< /notice >}}
獲取 AWS CLI 使用者或角色的配置:
aws sts get-caller-identity
輸出將返回 IAM 使用者或角色的 Amazon 資源名稱 (ARN)。例如:
{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}
確認 ARN 與具有主要叢集配置訪問許可權的叢集建立者或管理員相匹配。如果 ARN 與叢集建立者或管理員不匹配,請聯絡叢集建立者 aws-auth ConfigMap。
新增對 EKS 叢集具有隻讀訪問許可權的 IAM 使用者
{{< notice info "注意:" >}}
要允許超級使用者訪問許可權以對任何資源執行任何操作,請新增 system:masters 而非 system:bootstrappers 和 system:nodes。有關更多資訊,請參閱 Kubernetes 網站上的預設角色和角色繫結。
{{< /notice >}}
建立 rbac.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: reader
rules:
- apiGroups: ["*"]
resources: ["deployments", "configmaps", "pods", "secrets", "services"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: reader
subjects:
- kind: Group
name: reader
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: reader
apiGroup: rbac.authorization.k8s.io
要新增 IAM 使用者或角色,請完成以下步驟之一。
新增 IAM 使用者到 mapUsers。
...
mapUsers: |
- userarn: arn:aws:iam::424432388155:user/developer
username: developer
groups:
- reader
...
建立 RBAC
kubectl apply -f rbac.yaml
在AWS 中建立 AmazonEKSDeveloperPolicy
策略以讓使用者在 AWS 管理控制檯中檢視所有叢集的節點和工作負載
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeNodegroup",
"eks:ListNodegroups",
"eks:DescribeCluster",
"eks:ListClusters",
"eks:AccessKubernetesApi",
"ssm:GetParameter",
"eks:ListUpdates",
"eks:ListFargateProfiles"
],
"Resource": "*"
}
]
}
- 建立
eks-developer
IAM 組並附加AmazonEKSDeveloperPolicy
策略 - 建立
developer
使用者 - 新增
developer
個人資料aws configure --profile developer
- 新增到
aws-auth
configmapdeveloper
使用者 ARN。
kubectl edit -n kube-system configmap/aws-auth
...
mapUsers: |
- userarn: arn:aws:iam::424432388155:user/developer
username: developer
groups:
- reader
...
- 為
developer
使用者配置 kubectl 上下文
aws eks --region us-east-1 update-kubeconfig --name eks --profile developer
- 檢查 kubeconfig
kubectl config view --minify
- 檢查許可權
kubectl auth can-i get pods
kubectl auth can-i create pods
kubectl run nginx --image=nginx
建立具有管理員訪問許可權的 IAM 角色並由 IAM 使用者代入此角色。
- 建立
AmazonEKSAdminPolicy
策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
- 建立
eks-admin
角色並附加AmazonEKSAdminPolicy
策略 - 描述
eks-admin
角色
aws iam get-role --profile terraform --role-name eks-admin
- 建立
AmazonEKSAssumePolicy
允許承擔角色的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": "arn:aws:iam::424432388155:role/eks-admin"
}
]
}
- 建立
manager
使用者以使用eks-admin
角色 - 新增
manager
個人資料aws configure --profile manager
- 檢查
manager
使用者是否可以承擔eks-admin
角色
aws sts assume-role --role-arn arn:aws:iam::424432388155:role/eks-admin --role-session-name manager-session --profile manager
- 為建立 EKS 叢集的使用者更新 kubeconfig
aws eks --region us-east-1 update-kubeconfig --name eks --profile terraform
- 新增到
aws-auth
configmapeks-admin
角色 ARN。
kubectl edit -n kube-system configmap/aws-auth
...
- rolearn: arn:aws:iam::424432388155:role/eks-admin
username: eks-admin
groups:
- system:masters
...
- 建立
eks-admin
配置檔案以承擔角色vim ~/.aws/config
[profile eks-admin]
role_arn = arn:aws:iam::424432388155:role/eks-admin
source_profile = manager
- 為
manager
使用者配置 kubectl 上下文以自動承擔eks-admin
角色
aws eks --region us-east-1 update-kubeconfig --name eks --profile eks-admin
- 檢查 kubeconfig
kubectl config view --minify
- 檢查經理是否具有 EKS 叢集的管理員訪問許可權
kubectl auth can-i "*" "*"
作者:SRE運維部落格
部落格地址: https://www.cnsre.cn/