AWS EKS 添加IAM用戶角色



作者:SRE運維博客

博客地址: https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/211203931498/

相關話題:https://www.cnsre.cn/tags/aws/


因為創建 Amazon EKS 集群時,IAM 用戶或角色會自動在集群的 RBAC 配置中被授予 system:masters 權限。例如,IAM 用戶或角色可以是創建集群的聯合身份用戶。如果使用不屬於 aws-auth ConfigMapIAM 用戶或角色訪問 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:bootstrapperssystem: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-developerIAM 組並附加AmazonEKSDeveloperPolicy策略
  • 創建developer用戶
  • 添加developer個人資料aws configure --profile developer
  • 添加到aws-authconfigmapdeveloper用戶 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-authconfigmapeks-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/

文章地址:https://www.cnsre.cn/posts/211203931498/

相關話題:https://www.cnsre.cn/tags/aws/



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM