【问题标题】:What policy should be assigned to an iam user if I want to make it work with aws EKS如果我想让它与 aws EKS 一起使用,应该为 iam 用户分配什么策略
【发布时间】:2020-02-13 20:09:44
【问题描述】:

按照官方文档https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html,我添加了aws-auth设置和ConfigMap

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  mapUsers: |
    - userarn: arn:aws:iam::555555555555:user/admin
      username: admin
      groups:
        - system:masters
    - userarn: arn:aws:iam::111122223333:user/ops-user
      username: ops-user
      groups:
        - system:masters

但我目前没有为用户 ops-user 分配任何策略。

[ops-user]
region                = ap-southeast-2
aws_secret_access_key = xxxx
aws_access_key_id     = xxxx

切换到 aws 配置文件后,我可以看到用户详细信息

$ export AWS_PROFILE=ops-user

$ aws sts get-caller-identity
{
    "UserId": "AIDAJLD7JDWRXORLFXWYO",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/ops-user"
}

但当我尝试管理 EKS 集群 pod、svc 等时,出现以下错误

$ kubectl get pods
error: You must be logged in to the server (Unauthorized)

如果我想让这个 iam 用户只在 EKS kubernetes 集群中工作,应该为它分配什么策略。

我不希望用户管理其他 aws 资源。

顺便说一句,我可以使用具有管理员策略的 iam 用户进行所有管理

【问题讨论】:

    标签: kubernetes amazon-iam amazon-eks


    【解决方案1】:

    我最近遇到了同样的问题,花了很多时间来解决这个问题。

    仅创建用户并不会授予该用户访问集群中任何资源的权限。为了实现这一点,我们需要定义一个角色,然后将用户绑定到该角色。

    创建文件 access.yaml(我们将创建用户(服务帐户)、角色,并将该角色附加到该用户。)

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: eks-project-admin-user
      namespace: project-ns
    
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: eks-project-admin-user-full-access
      namespace: project-ns
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    - apiGroups: ["batch"]
      resources:
      - jobs
      - cronjobs
      verbs: ["*"]
    
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: eks-project-admin-user-view
      namespace: project-ns
    subjects:
    - kind: ServiceAccount
      name: eks-project-admin-user
      namespace: project-ns
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: eks-project-admin-user-full-access
    

    注意:确保将用户名从“eks-project-admin-user”更改为您的。

    您可以将此site 用于您的用户的类似角色绑定(根据您的用例)。

    现在,让我们创建所有这些:

    kubectl create -f access.yaml
    

    如果我想让这个 iam 用户只在 EKS kubernetes 集群中工作,应该为这个 iam 用户分配什么策略。对于这个问题,请尝试以下策略 JSON(根据 AWS documentation)。

    {
     "Version": "2012-10-17",
     "Statement": [
     {
     "Effect": "Allow",
     "Action": [
     "eks:*"
     ],
     "Resource": "*"
     }
     ]
    }
    

    注意:在资源字段中,您也可以限制到特定的集群。

    现在使用命令验证更改

    kubectl get pods -n rbac-test
    

    希望您现在不应该收到未经授权的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2019-05-10
      • 2012-07-20
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多