
Una herramienta para utilizar credenciales de AWS IAM para autenticarse en un clúster de 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.
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.
Suponiendo que tienes un clúster ejecutándose en AWS y quieres añadir soporte de AWS IAM Authenticator para Kubernetes, necesitas:
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:
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:
mapUsers a continuación).mapRoles a continuación).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:
arn:aws:iam::000000000000:...) en config.yaml.clusterID con un valor único para tu clúster.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).
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.
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
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.