¿Cómo administro los permisos en los espacios de nombres para los usuarios de IAM en un clúster de Amazon EKS?

6 minutos de lectura
0

Deseo administrar los permisos de usuario de mis usuarios de AWS Identity and Access Management (IAM) en todos los espacios de nombres de mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descripción

Para administrar los permisos de usuario en los espacios de nombres de un clúster de Amazon EKS, siga estos pasos:

  1. Cree un rol de IAM para que lo asuman los miembros de su organización.
  2. Cree un rol de control de acceso basado en roles (RBAC) (Role) y un enlace de roles (RoleBinding) de Kubernetes para su clúster. Para obtener más información, consulte Using RBAC authorization en el sitio web de Kubernetes.
  3. Utilice el aws-auth ConfigMap para asignar los roles de IAM a los roles y grupos de RBAC.

Nota: Cuando un usuario o rol de IAM crea un clúster, solo el ARN de esta identidad de IAM se agrega al aws-auth ConfigMap y tiene permisos system:masters. Esto significa que solo el creador del clúster puede agregar más usuarios o roles al aws-auth ConfigMap.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de AWS CLI.

Cómo crear un rol de IAM que puedan asumir los miembros de su organización

Cree un rol de IAM para proporcionar a los miembros de su organización acceso a un espacio de nombres:

  1. Cree un rol para delegar los permisos a un usuario de IAM.

  2. Para comprobar que un usuario tiene permiso para asumir el rol de IAM, configure la AWS CLI. A continuación, ejecute el siguiente comando desde la estación de trabajo de ese usuario:

    $ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{
        "Credentials": {
            "AccessKeyId": "yourAccessKeyId",
            "SecretAccessKey": "yourSecretAccessKey",
            "SessionToken": "yourSessionToken",
            "Expiration": "2020-01-30T01:57:17Z"
        },
        "AssumedRoleUser": {
            "AssumedRoleId": "yourAssumedRoleId",
            "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName"
        }
    }

    Nota: Sustituya yourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleId, yourAccountID y yourIAMRoleName por sus valores.

  3. Actualice el archivo kubeconfig para configurar el valor de kubectl del usuario de IAM para que siempre use el rol cuando acceda a la API de Kubernetes:

    $ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName

    Nota: Sustituya yourClusterName, yourAccountID y yourIAMRoleName por sus valores.

Cómo crear un rol de RBAC y un enlace de roles de Kubernetes para su clúster

Importante: Siga estos pasos desde una estación de trabajo que esté configurada para acceder a Kubernetes. Debe ser un creador de clústeres o una identidad de IAM que ya tenga acceso a través del aws-auth ConfigMap. El rol de IAM aún no tiene acceso al clúster.

Vincule un rol de clúster (ClusterRole) a un enlace de roles. Un rol de RBAC y un enlace de roles son recursos de espacio de nombres de Kubernetes. Sin embargo, no puede vincular un rol a un enlace de rol de clúster (ClusterRoleBinding).

  1. Ejecute el siguiente comando para enumerar todos los roles de clúster integrados y vincular el administrador de rol de clúster a un enlace de roles para el espacio de nombres:

    $ kubectl get clusterrole
  2. Ejecute el siguiente comando para ver los permisos asociados al administrador de rol de clúster:

    $ kubectl describe clusterrole admin
  3. Cree un espacio de nombres denominado test para conceder acceso a los usuarios de IAM como parte del grupo de IAM:
    Nota: Si elige un nombre diferente, sustituya los valores del parámetro namespace. Para usar un espacio de nombres existente, continúe con el paso 4.

    $ kubectl create namespace test
  4. Para crear un rol de RBAC de Kubernetes, copie el siguiente código en un nuevo archivo YAML (por ejemplo, role.yaml):

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-role
      namespace: test
    rules:
      - apiGroups:
          - ""
          - "apps"
          - "batch"
          - "extensions"
        resources:
          - "configmaps"
          - "cronjobs"
          - "deployments"
          - "events"
          - "ingresses"
          - "jobs"
          - "pods"
          - "pods/attach"
          - "pods/exec"
          - "pods/log"
          - "pods/portforward"
          - "secrets"
          - "services"
        verbs:
          - "create"
          - "delete"
          - "describe"
          - "get"
          - "list"
          - "patch"
          - "update"

    Nota: El rol de RBAC de Kubernetes permite a los usuarios realizar todas las acciones de la sección verbs.

  5. Ejecute el siguiente comando para crear el rol de RBAC:

    $ kubectl apply -f role.yaml
  6. Cree un enlace de roles de Kubernetes. Copie el siguiente código en un archivo YAML nuevo (por ejemplo, rolebinding.yaml):

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-rolebinding
      namespace: test
    subjects:
    - kind: User
      name: k8s-test-user
    roleRef:
      kind: Role
      name: k8s-test-role
      apiGroup: rbac.authorization.k8s.io

    Nota: El enlace de roles es un recurso de espacio de nombres que vincula el rol de RBAC de la sección roleRef con el usuario de la sección subjects. No es necesario crear el usuario k8s-test-user porque Kubernetes no tiene un tipo de recurso de usuario.

  7. Ejecute el siguiente comando para crear el enlace de roles de RBAC:

    $ kubectl apply -f rolebinding.yaml

Cómo utilizar el aws-auth ConfigMAP para asignar el rol de IAM al rol y el grupo de RBAC 

Ejecute el siguiente comando para asociar el rol de IAM yourIAMRoleName con el usuario de Kubernetes k8s-test-user:

$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user

Nota: Sustituya yourClusterName, yourAccountID y yourIAMRoleName por sus valores.

Cómo probar el acceso al espacio de nombres

  1. Ejecute el siguiente comando para probar el acceso al espacio de nombres test:
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    Nota: El comando anterior crea un trabajo que usa el rol de RBAC k8s-test-role que creó.
  2. Ejecute los siguientes comandos para comprobar el pod y el trabajo en el espacio de nombres test:
    $ kubectl get job -n testNAME    COMPLETIONS   DURATION   AGE
    hello   1/1           4s         15s
    
    $ kubectl get pods -n test
    NAME          READY   STATUS      RESTARTS   AGE
    hello-tpjmf   0/1     Completed   0          2m34s
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses