¿Cómo administro los permisos en los espacios de nombres para los usuarios de IAM en un clúster de Amazon EKS?
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:
- Cree un rol de IAM para que lo asuman los miembros de su organización.
- 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.
- 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:
-
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.
-
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).
-
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
-
Ejecute el siguiente comando para ver los permisos asociados al administrador de rol de clúster:
$ kubectl describe clusterrole admin
-
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
-
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.
-
Ejecute el siguiente comando para crear el rol de RBAC:
$ kubectl apply -f role.yaml
-
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.
-
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
- Ejecute el siguiente comando para probar el acceso al espacio de nombres test:
Nota: El comando anterior crea un trabajo que usa el rol de RBAC k8s-test-role que creó.$ kubectl create job hello -n test --image=busybox -- echo "Hello World"
- 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
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 10 meses
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 2 años