AWS EKS 添加IAM用户角色
作者: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。
获取 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 网站上的默认角色和角色绑定。
创建 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/

                
            
        
浙公网安备 33010602011771号