美文网首页k8s/istio
aws eks iam user access 权限管理 adm

aws eks iam user access 权限管理 adm

作者: 国服最坑开发 | 来源:发表于2022-03-28 15:02 被阅读0次
    rbac

    0x00 TLNR;

    一般情况下对aws eks 创建集群后, 只有创建者才有集群的完全访问权限.
    那么现在有一个需求: 对其他admin IAM 账号开通 eks 集群访问权限

    0x01 IAM 账号创建

    可以直接在 IAM console 页面手动添加管理员账号, 以 eksadmin 用户名为例.

    0x02 RBAC 基础知识

    参考: https://jimmysong.io/kubernetes-handbook/concepts/rbac.html
    参考: https://www.qikqiak.com/post/use-rbac-in-k8s/
    K8s中的RBAC有以下几个名词:

    2.1 Entity

    定义了对资源进行操作的主体, 比如: User, Group, ServiceAccount 等

    2.2 Resource

    K8s中的资源类型, 比如: pod,service,secret,node等

    2.3 Role & ClusterRole

    • Role: 关联到特定namespace下的角色
    • ClusterRole: 集群全局作用域的角色

    2.4 RoleBinding & ClusterRoleBinding

    把Role/ClusterRole 和 Entity 进行关联.实现授权功能.

    0x03 绑定操作

    以下操作都是在原来的集群管理员下完成

    • 创建k8s 用户, 完成集群用户和 IAM账号的绑定
    # 在线编辑集群用户配置
    kubectl edit cm aws-auth -n kube-system
    

    添加mapUsers节点:

    apiVersion: v1
    data: 
      mapUsers: |
        - userarn: arn:aws-cn:iam::{你的12位主账号}:user/eksadmin
          username: eksadmin
          groups:
            — system:masters
    

    保存退出后, 此时执行 kubectl get all 会提示权限不够.
    但是也说明, 已经完成了IAM账号和集群账号的关联绑定.

    原本以为, 加上groups 参数就有管理权限了, 实测不行, 继续下面的操作

    • 重点 给用户绑定集群的管理员权限
    kubectl create clusterrolebinding eksadmin --clusterrole=cluster-admin --user=eksadmin
    

    再次访问 kubectl get all , everything goes OK.
    任务达成~.

    0x04 指定namespace访问权限

    目标: 对开发者组的同学开放sit namespace 的完全访问

    4.1 创建Role

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: sit-role
      namespace: sit
    rules:
      - apiGroups: ["", "extensions", "apps"]
        resources: ["deployments", "replicasets", "pods", "configmaps","services"]
        verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    4.2 创建测试用户

    • 创建用户
    aws iam create-user --user-name dev-gg
    

    返回结果

    {
        "User": {
            "Path": "/",
            "UserName": "dev-gg",
            "UserId": "AI******5",
            "Arn": "arn:aws-cn:iam::{你的12位主账号}:user/dev-gg",
            "CreateDate": "2022-03-28T06:01:10+00:00"
        }
    }
    

    记录生成的 arn, 后面要用

    • 创建access key/secrets
    aws iam create-access-key --user-name dev-gg
    

    返回结果

    {
        "AccessKey": {
            "UserName": "dev-gg",
            "AccessKeyId": "***",
            "Status": "Active",
            "SecretAccessKey": "***",
            "CreateDate": "2022-03-28T06:04:50+00:00"
        }
    }
    

    记录 AceessKey, 和 Secret.

    • 创建IAM 策略
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "eks:DescribeCluster",
                "Resource": "arn:aws-cn:eks:*:{你的12位主账号}:cluster/*"
            }
        ]
    }
    

    策略ARN: arn:aws-cn:iam::{12位主账号}:policy/eks_desc_cluster

    • 绑定到测试用户
    aws iam attach-user-policy --user-name dev-gg --policy-arn arn:aws-cn:iam::{12位主账号}:policy/eks_desc_cluster
    

    4.3 配置集群中的账号

    kubectl edit cm aws-auth -n kube-system
    

    增加用户:

      mapUsers: |
        - userarn: arn:aws-cn:iam::{12位账号}:user/dev-gg
          username: dev-gg
    

    4.4 绑定用户角色

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: dev-gg
      namespace: sit
    subjects:
      - kind: User
        name: dev-gg
        apiGroup: ""
    roleRef:
      kind: Role
      name: sit-role
      apiGroup: ""
    

    4.5 验证

    • 绑定登录信息
      把步骤4.2的secret key 信息配置到用户目录
    aws configure
    AWS Access Key ID [None]: A***O
    AWS Secret Access Key [None]: 0***p
    Default region name [None]: cn-northwest-1
    Default output format [None]: json
    
    • 拉取集群配置
    aws eks update-kubeconfig --name aws-cn
    Added new context arn:aws-cn:eks:cn-northwest-1:{12位账号}:cluster/aws-cn to /Users/dev-gg/.kube/config
    
    • 部署&删除测试应用
    kubectl create deploy web --image=nginx -n sit
    kubectl get po -n sit
    NAME                  READY   STATUS              RESTARTS   AGE
    web-96d5df5c8-t8n8z   0/1     ContainerCreating   0          16m
    
    kubectl delete deploy web  -n sit
    deployment.apps "web" deleted
    

    Good Job ~

    4.6 关于增加其他权限

    如果在使用中遇到权限问题:

    kubectl get hpa -n sit
    Error from server (Forbidden): horizontalpodautoscalers.autoscaling is forbidden: User "dev-gg" cannot list resource "horizontalpodautoscalers" in API group "autoscaling" in the namespace "sit"
    

    只需要把日志中的 资源(horizontalpodautoscalers) 和 API Group(autoscaling) 添加到 role 配置中 apiGroups 和 resources 字段即可.

    至此,我们完成了, AWS EKS 关于集群权限的基础精细化控制.

    0x05 后续

    在集群中为开发者创建 group , 后续增加开发者用户时, 只要关联用户到 group 即可.

    答案在这里: https://www.jianshu.com/p/525f90e46e5d

    相关文章

      网友评论

        本文标题:aws eks iam user access 权限管理 adm

        本文链接:https://www.haomeiwen.com/subject/gpfpjrtx.html