Al usar EKS (Kubernetes en AWS), se puede adjuntar un pod a un rol de IAM que proporciona permisos sobre otros servicios de AWS (S3 buckets, instancias EC2, RDS, etc.). El IAM role se puede adjuntar al pod de diferentes maneras.
- Podría ser el perfil de instancia predeterminado de la instancia EC2 utilizada para los nodos.
- Indicando la anotación
iam.amazonaws.com/role:<my-role-name>
al crear el pod/deployment. Donde<my-role-name>
hace referencia a un IAM role existente en AWS con una relación de confianza AssumeRole con el clúster de EKS. - Crear una “service-account” capaz de asumir ese rol y usar el service account en el pod. Dicho “service account” es un
iamserviceaccount
específica para AWS y creada a través deeksctl
.
Cualquiera que sea el método, nuestro pod obtiene un rol de IAM, cuando el pod se está ejecutando, es posible que debamos validar o verificar cuál es el rol de IAM disponible o, de lo contrario, cambiar al rol de IAM deseado. Encontrar el rol de IAM disponible en el pod es tan fácil como ejecutar el siguiente comando.
kubectl exec -it myapp-podid -- sh $ curl -s 169.254.169.254/latest/meta-data/iam/security-credentials/
Primero estamos ejecutando una sesión sh
en el pod. Una vez en la sesión sh
en el pod, usando curl
consulta el endpoint de metadatos. La respuesta nos ayudará a identificar el rol de IAM que usa el pod.
my-role-name #Role indicado por medio de anotación iam.amazonaws.com/role or my-role-nameroot@myapp-podid #Role indicado por medio de EC2 default instance profile
Con eso podemos identificar que el pod está usando el IAM role my-role-name
Referencias
- https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html
- https://kubernetes-on-aws.readthedocs.io/en/latest/user-guide/iam-roles.html