zoukankan      html  css  js  c++  java
  • 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/


  • 相关阅读:
    【Hello CC.NET】巧用模板简化配置
    【Hello CC.NET】自动化发布时 Web.config 文件维护
    Hello Jexus
    【Hello CC.NET】CC.NET 实现自动化集成
    SSE和WebSocket的用法和比较
    利用canvas实现鼠标跟随效果
    使用es6制作简单数独游戏
    ppt学习(3)
    ppt学习(2)
    ppt学习(1)
  • 原文地址:https://www.cnblogs.com/cnsre/p/15636715.html
Copyright © 2011-2022 走看看