Какую политику следует назначить пользователю iam, если я хочу, чтобы он работал с aws EKS - PullRequest
1 голос
/ 17 октября 2019

После официального документа 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, svc и т. Д., Я получаю ошибку ниже

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

Итак, какую политику следует назначить этому пользователю iam, если я хочу, чтобы он работал только в кластере EKS kubernetes.

Я не хочу, чтобы пользователь управлял другими ресурсами aws.

Кстати, я могу сделать все управление с пользователем iam с политикой администратора

1 Ответ

0 голосов
/ 05 ноября 2019

Недавно я столкнулся с той же проблемой, и для ее преодоления потребовалось много времени.

Простое создание пользователя не дает ему доступа к любым ресурсам в кластере. Для этого нам нужно определить роль, а затем привязать пользователя к этой роли.

Создать файл 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» на свое.

Вы можетеиспользуйте этот сайт для аналогичной привязки роли для вашего пользователя (в зависимости от вашего варианта использования).

Теперь давайте создадим все это:

kubectl create -f access.yaml

Так чтоПолитика должна быть назначена этому пользователю iam, если я хочу, чтобы она работала только в кластере EKS kubernetes. Для этого вопроса попробуйте приведенную ниже политику JSON (согласно документации AWS ).

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

Примечание. В поле ресурса вы также можете ограничиться определенным кластером.

Теперь проверьте изменения, используя команду

kubectl get pods -n rbac-test

Надеюсь, вы не должны получить ошибку «Несанкционированный» сейчас.

...