Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. 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. El método recomendado para administrar el acceso a las API de Kubernetes es Entradas de acceso.
El acceso al clúster mediante las entidades principales de IAM está habilitado por el AWSAutenticador de IAM deKubernetesConfigMap
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 de IAM que crea el clúster recibe permisos de system:masters
de forma automática en la configuración del role-based access control (RBAC, control de acceso basado en roles) 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
Para agregar una entidad principal de IAM a un clúster de Amazon EKS, haga lo siguiente:
-
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. Reemplace
por la ruta al archivo~/.kube/config
kubeconfig
si no utiliza la ruta predeterminada.cat
~/.kube/config
Un ejemplo de salida sería el siguiente.
[...] contexts: - context: cluster:
my-cluster.
user:region-code
.eksctl.ioadmin@my-cluster.
name:region-code
.eksctl.ioadmin@my-cluster.
current-context:region-code
.eksctl.ioadmin@my-cluster.
[...]region-code
.eksctl.ioEn el salida de ejemplo anterior, se configuran las credenciales de un usuario denominado
para un clúster denominadoadmin
. 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:my-cluster
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
con un nombre derole-name
role
devuelto en el resultado del comando anterior. Reemplace
con el espacio de nombres delkube-system
role
.kubectl describe role
role-name
-nkube-system
Reemplace
con un nombre decluster-role-name
clusterrole
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
con un nombre derole-binding-name
rolebinding
devuelto en el resultado del comando anterior. Reemplace
con elkube-system
namespace
de larolebinding
.kubectl describe rolebinding
role-binding-name
-nkube-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.ioReemplace
con un nombre decluster-role-binding-name
clusterrolebinding
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 elaws-auth
ConfigMap
en 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.
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 aplicado el ConfigMap
de aws-auth
al clúster, puede hacerlo con el siguiente procedimiento.
Para aplicar aws-auth
ConfigMap
en su clúster
-
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
de stock. -
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
, establezca elaws-auth-cm.yaml
rolearn
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 al reemplazar
y ejecutar el siguiente comando:my-node-instance-role
sed -i.bak -e 's|<ARN of instance role (not instance profile)>|
my-node-instance-role
|' aws-auth-cm.yamlNo 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.