
aws-iam-authenticator v0.7.19
Una herramienta para utilizar credenciales de AWS IAM para autenticarse en un clúster de Kubernetes.
AWS IAM Authenticator para Kubernetes
Una herramienta para usar credenciales de AWS IAM para autenticarse en un clúster de Kubernetes. El trabajo inicial en esta herramienta fue impulsado por Heptio. El proyecto recibe contribuciones de múltiples ingenieros de la comunidad y actualmente está mantenido por Heptio e ingenieros de OSS de Amazon EKS.
Tabla de contenidos
- ¿Por qué quiero esto?
- ¿Cómo lo uso?
- Uso con Kops
- ¿Cómo funciona?
- ¿Qué es un cluster ID?
- Especificación de credenciales y uso de perfiles de AWS
- Autorización de API desde fuera de un clúster
- Solución de problemas
- Formato completo de configuración
- Desarrollo
- Comunidad, discusión, contribución y soporte
¿Por qué quiero esto?
Si eres un administrador que ejecuta un clúster de Kubernetes en AWS, ya necesitas gestionar credenciales de AWS IAM para aprovisionar y actualizar el clúster. Al usar AWS IAM Authenticator para Kubernetes, evitas tener que gestionar una credencial separada para el acceso a Kubernetes. AWS IAM también proporciona una serie de propiedades útiles, como un registro de auditoría fuera de banda (a través de CloudTrail) y la aplicación de 2FA/MFA.
Si estás creando un instalador de Kubernetes en AWS, AWS IAM Authenticator para Kubernetes puede simplificar tu proceso de arranque.
No necesitarás pasar de forma encubierta tu credencial de administrador inicial de manera segura fuera de tu clúster recién instalado.
En su lugar, puedes crear un rol dedicado KubernetesAdmin en el momento del aprovisionamiento del clúster y configurar Authenticator para permitir inicios de sesión de administrador del clúster.
¿Cómo lo uso?
Suponiendo que tienes un clúster ejecutándose en AWS y quieres añadir soporte de AWS IAM Authenticator para Kubernetes, necesitas:
- Crear un rol de IAM que usarás para identificar a los usuarios.
- Ejecutar el servidor Authenticator como un DaemonSet.
- Configurar tu servidor de API para comunicarse con Authenticator.
- Configurar kubectl para usar tokens de Authenticator.
1. Crear un rol de IAM
Primero, debes crear uno o más roles de IAM que se asignarán a usuarios/grupos dentro de tu clúster de Kubernetes. La forma más sencilla de hacerlo es iniciar sesión en la consola de AWS:
- Elige la opción "Role for cross-account access" / "Provide access between AWS accounts you own".
- Pega tu número de ID de cuenta de AWS (disponible en la esquina superior derecha de la consola).
- Tu rol no necesita que se le adjunte ninguna política adicional.
Esto creará un rol de IAM sin permisos que puede ser asumido por usuarios/roles autorizados en tu cuenta. Anota el Nombre de recurso de Amazon (ARN) de tu rol, que necesitarás más adelante.
También puedes hacer esto en un solo paso usando la AWS CLI en lugar de la consola de AWS:
# get your account ID
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
# define a role trust policy that opens the role to users in your account (limited by IAM policy)
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')
# create a role named KubernetesAdmin (will print the new role's ARN)
aws iam create-role \
--role-name KubernetesAdmin \
--description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)." \
--assume-role-policy-document "$POLICY" \
--output text \
--query 'Role.Arn'
También puedes omitir este paso y usar:
- Un rol existente (como un rol de acceso entre cuentas).
- Un usuario de IAM (consulta
mapUsersa continuación). - Una instancia de EC2 o un rol federado (consulta
mapRolesa continuación).
2. Ejecutar el servidor
El servidor está pensado para ejecutarse en cada uno de tus nodos maestros como un DaemonSet con networking de host para que pueda exponer un puerto localhost.
Para ver un ejemplo de configuración de ConfigMap y DaemonSet, consulta deploy/example.yaml.
Antes de aplicarlo, actualiza estos valores para tu clúster:
- Reemplaza los ARN de IAM de marcador de posición (
arn:aws:iam::000000000000:...) enconfig.yaml. - Establece
clusterIDcon un valor único para tu clúster. - Verifica que las reglas de programación del DaemonSet coincidan con las etiquetas/taints de tus nodos del plano de control.
Luego despliégalo:
kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator
Una vez que el pod se esté ejecutando en un nodo del plano de control, el aws-iam-authenticator server creará el kubeconfig del webhook en el host en /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml (o la ruta configurada mediante --generate-kubeconfig).
(Opcional) Pre-generar un certificado, una clave y un kubeconfig
Si estás creando un instalador automatizado, también puedes pre-generar fácilmente los archivos de certificado, clave y kubeconfig del webhook usando aws-iam-authenticator init.
Este comando generará los archivos y los colocará en los directorios de salida configurados.
Puedes ejecutar esto en cada nodo maestro antes de iniciar el servidor de API. También podrías generarlos antes de aprovisionar los nodos maestros e instalarlos en las rutas de host adecuadas.
Si no pre-generas los archivos, aws-iam-authenticator server los generará bajo demanda.
Esto funciona, pero requiere que reinicies tu servidor de API de Kubernetes después de la instalación.
3. Configurar tu servidor de API para que se comunique con el servidor
La API de Kubernetes se integra con AWS IAM Authenticator for Kubernetes mediante un webhook de autenticación por token.
Cuando ejecutas aws-iam-authenticator server, este generará un archivo de configuración de webhook y lo guardará en el sistema de archivos del host.
Deberás añadir un único flag adicional a la configuración de tu servidor de API:
--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml
En muchos clústeres, el servidor de API se ejecuta como un pod estático.
Puedes añadir el flag a /etc/kubernetes/manifests/kube-apiserver.yaml.
Asegúrate de que el directorio del host /etc/kubernetes/aws-iam-authenticator/ esté montado en tu pod del servidor de API.
También puede que necesites reiniciar el daemon kubelet en tu nodo maestro para que tome la definición actualizada del pod estático:
systemctl restart kubelet.service
4. Crear asignaciones de rol/usuario de IAM a usuario/grupo de kubernetes
El comportamiento predeterminado del servidor es obtener las asignaciones exclusivamente de los
campos mapUsers y mapRoles de su archivo de configuración. Consulte Formato de
configuración completo a continuación para obtener más detalles.
Usando el flag --backend-mode, puede configurar el servidor para que obtenga
las asignaciones de dos backends adicionales: un ConfigMap de estilo EKS
(--backend-mode=EKSConfigMap) o recursos personalizados IAMIdentityMapping
(--backend-mode=CRD). El backend predeterminado, el archivo de configuración del servidor
que está montado por el pod del servidor, corresponde a --backend-mode=MountedFile.