Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Elija el enlace Editar esta página en GitHub que se encuentra en el panel derecho de cada página. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Concesión de acceso a los usuarios de IAM a Kubernetes con un ConfigMap
importante
aws-auth ConfigMap
se ha quedado obsoleto. Para conocer el método recomendado para administrar el acceso a las API de Kubernetes, consulte Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS.
El acceso al clúster mediante las entidades principales de IAM está habilitado por el AWSAutenticador de IAM para KubernetesConfigMap
de aws-auth
. Para todos las configuraciones del ConfigMap
de aws-auth
, consulte el formato de configuración completa
Agregar las entidades principales de IAM al clúster de Amazon EKS
Cuando se crea un clúster de Amazon EKS, la entidad principal de IAM que crea el clúster recibe permisos de system:masters
de forma automática en la configuración del Control de acceso basado en roles (RBAC) del clúster en el plano de control de Amazon EKS. Esta entidad principal no aparece en ninguna configuración visible, así que asegúrese de realizar un seguimiento de la entidad principal que creó el clúster originalmente. Para conceder a entidades principales de IAM la capacidad de interactuar con el clúster, edite el aws-auth ConfigMap
dentro de Kubernetes y cree un rolebinding
o clusterrolebinding
de Kubernetes con el nombre de un group
que especifique en el aws-auth ConfigMap
.
nota
Para obtener más información sobre la configuración del control de acceso basado en roles (RBAC) de Kubernetes, consulte Uso de la autorización de RBAC
-
Determine qué credenciales de
kubectl
utiliza para obtener acceso al clúster. En la computadora, puede ver qué credenciales dekubectl
utiliza con el siguiente comando. Si no utiliza la ruta predeterminada, reemplace~/.kube/config
por la ruta al archivokubeconfig
.cat ~/.kube/config
Un ejemplo de salida sería el siguiente.
[...] contexts: - context: cluster: my-cluster.region-code.eksctl.io user: admin@my-cluster.region-code.eksctl.io name: admin@my-cluster.region-code.eksctl.io current-context: admin@my-cluster.region-code.eksctl.io [...]
En la salida de ejemplo anterior, se configuran las credenciales de un usuario llamado
admin
para un clúster con el nombremy-cluster
. Si este es el usuario que creó el clúster, entonces ya tiene acceso a él. Si no es el usuario el que creó el clúster, deberá completar los pasos restantes para habilitar el acceso al clúster para otras entidades principales de IAM. Según las prácticas recomendadas de IAM, se recomienda conceder permisos a los roles en lugar de a los usuarios. Puede ver qué otras entidades principales tienen acceso actualmente al clúster con el siguiente comando:kubectl describe -n kube-system configmap/aws-auth
Un ejemplo de salida sería el siguiente.
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>
El ejemplo anterior es un valor predeterminado
aws-auth
ConfigMap
. Solo el rol de la instancia de nodos tiene acceso al clúster. -
Asegúrese de tener
roles
yrolebindings
oclusterroles
yclusterrolebindings
existentes de Kubernetes a los que pueda asignar entidades principales de IAM. Para obtener más información sobre estos recursos, consulte Utilización de la autorización de RBACen la documentación de Kubernetes. -
Vea sus
roles
oclusterroles
existentes de Kubernetes. LosRoles
están asignados a unnamespace
, pero losclusterroles
se ajustan al clúster.kubectl get roles -A
kubectl get clusterroles
-
Consulte los detalles de cualquier
role
oclusterrole
devuelto en la salida anterior y confirme que tiene los permisos (rules
) que desea que las entidades principales de IAM tengan en el clúster.Reemplace
role-name
con un nombre derole
devuelto en el resultado del comando anterior. Reemplacekube-system
con el espacio de nombres delrole
.kubectl describe role role-name -n kube-system
Reemplace
cluster-role-name
con un nombre declusterrole
devuelto en el resultado del comando anterior.kubectl describe clusterrole cluster-role-name
-
Vea sus
rolebindings
oclusterrolebindings
existentes de Kubernetes. LosRolebindings
están asignados a unnamespace
, pero losclusterrolebindings
se ajustan al clúster.kubectl get rolebindings -A
kubectl get clusterrolebindings
-
Vea los detalles de cualquier
rolebinding
oclusterrolebinding
y confirme que tiene unrole
oclusterrole
del paso anterior enumerado comoroleRef
y un nombre de grupo enumerado parasubjects
.Reemplace
role-binding-name
con un nombrerolebinding
devuelto en el resultado del comando anterior. Reemplacekube-system
connamespace
delrolebinding
.kubectl describe rolebinding role-binding-name -n kube-system
Un ejemplo de salida sería el siguiente.
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.io
Reemplace
cluster-role-binding-name
con un nombreclusterrolebinding
devuelto en el resultado del comando anterior.kubectl describe clusterrolebinding cluster-role-binding-name
Un ejemplo de salida sería el siguiente.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
-
-
Edite el
ConfigMap
deaws-auth
. Puede utilizar una herramienta comoeksctl
para actualizar elConfigMap
o puede actualizarlo manualmente editándolo.importante
Recomendamos utilizar
eksctl
, u otra herramienta, para editar elConfigMap
. Para obtener información acerca de otras herramientas que puede utilizar, consulte Utilice herramientas para realizar cambios en el aws-authConfigMapen las guías de prácticas recomendadas de Amazon EKS. Un formato incorrecto de aws-auth
ConfigMap
puede provocar que pierda el acceso a su clúster.-
Vea los pasos para editar el configmap con eksctl.
-
Vea los pasos para editar el configmap manualmente.
-
Edición de Configmap con Eksctl
-
Necesita la versión
0.199.0
o posterior de la herramienta de línea de comandos deeksctl
instalada en su dispositivo o AWS CloudShell. Para instalar o actualizareksctl
, consulte la sección de Instalaciónen la documentación de eksctl
. -
Vea las asignaciones actuales en la
ConfigMap
. Reemplacemy-cluster
por el nombre de su clúster. Reemplaceregion-code
por la región de AWS en la que se encuentra el clúster.eksctl get iamidentitymapping --cluster my-cluster --region=region-code
Un ejemplo de salida sería el siguiente.
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
-
Agregue una asignación para un rol. Reemplace
my-role
con el nombre de su rol. Reemplaceeks-console-dashboard-full-access-group
con el nombre del grupo especificado de los objetosRoleBinding
oClusterRoleBinding
en Kubernetes. Reemplace111122223333
por el ID de su cuenta. Puede reemplazaradmin
(administrador) con cualquier nombre que elija.eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arns
importante
El ARN del rol no puede incluir una ruta como
role/my-team/developers/my-role
. El formato del ARN debe serarn:aws:iam::
. En este ejemplo, se necesita eliminar111122223333
:role/my-role
my-team/developers/
.Un ejemplo de salida sería el siguiente.
[...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
-
Agregue una asignación para un usuario. Según las prácticas recomendadas de IAM, se recomienda conceder permisos a los roles en lugar de a los usuarios. Reemplace
my-user
por el nombre de usuario. Reemplaceeks-console-dashboard-restricted-access-group
con el nombre del grupo especificado de los objetosRoleBinding
oClusterRoleBinding
en Kubernetes. Reemplace111122223333
por el ID de su cuenta. Puede reemplazarmy-user
(mi usuario) con cualquier nombre que elija.eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arns
Un ejemplo de salida sería el siguiente.
[...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws:iam::111122223333:user/my-user" to auth ConfigMap
-
Vea las asignaciones en el
ConfigMap
de nuevo.eksctl get iamidentitymapping --cluster my-cluster --region=region-code
Un ejemplo de salida sería el siguiente.
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws:iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws:iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group
Edición de Configmap manualmente
-
Abra el icono
ConfigMap
para editar.kubectl edit -n kube-system configmap/aws-auth
nota
Si recibe un error que indica “
Error from server (NotFound): configmaps "aws-auth" not found
”, utilice el procedimiento de Aplicación de ConfigMap de aws-auth a un clúster para aplicar elConfigMap
estándar. -
Agregue las entidades principales de IAM al
ConfigMap
. Un grupo de IAM no es una entidad principal de IAM, por lo que no se puede agregar alConfigMap
.-
A fin de agregar un rol de IAM (por ejemplo, para usuarios federados): agregue los detalles del rol a la sección
mapRoles
delConfigMap
, endata
. Agregue esta sección si no existe todavía en el archivo. Cada entrada admite los siguientes parámetros:-
rolearn: ARN del rol de IAM que se va a agregar. Este valor no puede incluir una ruta. Por ejemplo, no puede especificar un ARN como
arn:aws:iam::
. El ARN se debe111122223333
:role/my-team/developers/role-name
arn:aws:iam::
en su lugar.111122223333
:role/role-name
-
username (nombre de usuario): nombre del usuario de Kubernetes al que se mapea el rol de IAM.
-
groups (grupos): el grupo o la lista de grupos de Kubernetes a los que asignar el rol. El grupo puede ser un grupo predeterminado o un grupo especificado en un
clusterrolebinding
orolebinding
. Para obtener más información, consulte Roles predeterminados y enlaces de rolesen la documentación de Kubernetes.
-
-
Para agregar un usuario de IAM: Según las prácticas recomendadas de IAM, se recomienda conceder permisos a los roles en lugar de a los usuarios. Agregue los detalles del usuario a la sección
mapUsers
delConfigMap
, endata
. Agregue esta sección si no existe todavía en el archivo. Cada entrada admite los siguientes parámetros:-
userarn: ARN del usuario de IAM que se va a agregar.
-
username (nombre de usuario): el nombre de usuario dentro de Kubernetes al que se mapea el usuario de IAM.
-
groups (grupos): el grupo o la lista de grupos de Kubernetes a los que asignar el usuario. El grupo puede ser un grupo predeterminado o un grupo especificado en un
clusterrolebinding
orolebinding
. Para obtener más información, consulte Roles predeterminados y enlaces de rolesen la documentación de Kubernetes.
-
-
-
Por ejemplo, el siguiente bloque YAML contiene:
-
Una sección de
mapRoles
que asigna la instancia de nodos de IAM a grupos de Kubernetes para que los nodos puedan registrarse en el clúster y el rol de IAMmy-console-viewer-role
que se asigna a un grupo de Kubernetes que puede ver todos los recursos de Kubernetes para todos los clústeres. Para obtener una lista de los permisos de grupo de IAM y Kubernetes necesarios para el rol de IAM demy-console-viewer-role
, consulte Permisos necesarios. -
Una sección de
mapUsers
que asigna el usuario de IAMadmin
desde la cuenta de valor predeterminado de AWS al grupo de Kubernetessystem:masters
y el usuariomy-user
de otra cuenta AWS asignada a un grupo de Kubernetes que puede ver los recursos de Kubernetes para un espacio de nombres específico. Para obtener una lista de los permisos de grupo de IAM y Kubernetes necesarios para el usuario de IAM demy-user
, consulte Permisos necesarios.Agregue o quite líneas según sea necesario y reemplace todos los
valores de ejemplo
con sus propios valores.# 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: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws:iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws:iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws:iam::444455556666:user/my-user username: my-user
-
-
Guarde el archivo y salga del editor de texto.
Aplique el ConfigMap
de aws-auth
en su clúster
El ConfigMap
de aws-auth
se crea y aplica de forma automática al clúster cuando crea un grupo de nodos administrados o cuando crea un grupo de nodos mediante eksctl
. En un principio, se crea para permitir que los nodos se unan al clúster, pero también se utiliza este ConfigMap
para agregar acceso de control de acceso basado en roles (RBAC) a las entidades principales de IAM. Si ha lanzado nodos autoadministrados y no ha aplicado el ConfigMap
de aws-auth
al clúster, puede hacerlo con el siguiente procedimiento.
-
Verifique si ya ha aplicado el
ConfigMap
deaws-auth
.kubectl describe configmap -n kube-system aws-auth
Si recibe un error con estado “
Error from server (NotFound): configmaps "aws-auth" not found
”, continúe con los siguientes pasos para aplicar elConfigMap
estándar. -
Descargue, edite y aplique el mapa de configuración del autenticador de AWS.
-
Descargue el mapa de configuración.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
En el archivo
aws-auth-cm.yaml
, establezca elrolearn
para el Nombre de recurso de Amazon (ARN) o el rol de IAM asociado con sus nodos. Puede hacerlo con un editor de texto o puede reemplazarmy-node-instance-role
y ejecutar el siguiente comando:sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
No modifique ninguna otra línea de este archivo.
importante
El ARN de rol no puede incluir una ruta como
role/my-team/developers/my-role
. El formato del ARN debe serarn:aws:iam::
. En este ejemplo, se debe eliminar111122223333
:role/my-role
my-team/developers/
.Puede inspeccionar las salidas de la pila de AWS CloudFormation para los grupos de nodos y buscar los siguientes valores:
-
InstanceRoleARN: para grupos de nodos que se crearon con
eksctl
-
NodeInstanceRole: para grupos de nodos que se crearon con plantillas de Amazon EKS incluidas en AWS CloudFormation en la AWS Management Console
-
-
Aplique la configuración. Este comando puede tardar varios minutos en finalizar.
kubectl apply -f aws-auth-cm.yaml
nota
Si recibe cualquier error de tipo de recurso o autorización, consulte Acceso denegado o no autorizado (kubectl) en el tema de solución de problemas.
-
-
Observe el estado de los nodos y espere a que aparezca el estado
Ready
.kubectl get nodes --watch
Ingrese
Ctrl
+C
para obtener un símbolo del intérprete de comandos.