Acceso a los recursos de AWS mediante los roles de IAM de destino de EKS Pod Identity - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Acceso a los recursos de AWS mediante los roles de IAM de destino de EKS Pod Identity

Al ejecutar aplicaciones en Amazon Elastic Kubernetes Service (Amazon EKS), es posible que necesite acceder a los recursos de AWS que existen en la misma cuenta o en cuentas de AWS diferentes. Esta guía le muestra cómo configurar el acceso entre estas cuentas mediante EKS Pod Identity, que permite a sus pods de Kubernetes acceder a otros recursos de AWS.

Requisitos previos

Antes de comenzar, asegúrese de haber seguido estos pasos:

Cómo funciona

Pod Identity permite a las aplicaciones de su clúster de EKS acceder a los recursos de AWS entre cuentas mediante un proceso denominado encadenamiento de roles. Al crear una asociación de Pod Identity, puede proporcionar dos roles de IAM: un rol de EKS Pod Identity en la misma cuenta que su clúster de EKS y un rol de IAM de destino de la cuenta que contiene sus recursos de AWS (como buckets de S3 o tablas de DynamoDB). El rol de EKS Pod Identity debe estar en la cuenta de su clúster de EKS debido a los requisitos de PassRole de IAM, mientras que el rol de IAM de destino puede estar en cualquier cuenta de AWS. PassRole permite a una entidad de AWS delegar la asunción de roles a otro servicio. EKS Pod Identity usa PassRole para conectar un rol a una cuenta de servicio de Kubernetes, lo que requiere que tanto el rol como la identidad que lo pasa estén en la misma cuenta de AWS que el clúster de EKS. Cuando el pod de la aplicación necesita acceder a los recursos de AWS, solicita las credenciales a Pod Identity. A continuación, Pod Identity lleva a cabo automáticamente dos asunciones de rol en secuencia: primero asume el rol de EKS Pod Identity y, a continuación, utiliza esas credenciales para asumir el rol de IAM de destino. Este proceso proporciona al pod credenciales temporales con los permisos definidos en el rol de destino, lo que permite un acceso seguro a los recursos de otras cuentas de AWS.

Consideraciones sobre el almacenamiento en caché

Debido a los mecanismos de almacenamiento en caché, es posible que las actualizaciones de un rol de IAM en una asociación de Pod Identity existente no se apliquen inmediatamente en los pods que se ejecutan en el clúster de EKS. El agente de Pod Identity almacena en caché las credenciales de IAM en función de la configuración de la asociación en el momento en que se obtienen las credenciales. Si la asociación incluye solo un ARN de rol de EKS Pod Identity y ningún rol de IAM de destino, las credenciales almacenadas en caché duran 6 horas. Si la asociación incluye tanto el ARN del rol de EKS Pod Identity como un rol de IAM de destino, las credenciales almacenadas en caché duran 59 minutos. La modificación de una asociación existente, como actualizar el ARN de rol de EKS Pod Identity o agregar un rol de IAM de destino, no restablece la caché existente. Como resultado, el agente no reconocerá las actualizaciones hasta que se actualicen las credenciales almacenadas en caché. Para aplicar los cambios antes, puede volver a crear los pods existentes; de lo contrario, tendrá que esperar a que caduque la caché.

Paso 1: creación y asociación de un rol de IAM de destino

En este paso, establecerá una cadena de confianza segura mediante la creación y configuración de un rol de IAM de destino. A modo de demostración, crearemos un nuevo rol de IAM de destino para establecer una cadena de confianza entre dos cuentas de AWS: el rol de EKS Pod Identity (por ejemplo, eks-pod-identity-primary-role) de la cuenta de AWS del clúster de EKS obtiene permiso para asumir el rol de IAM de destino (por ejemplo, eks-pod-identity-aws-resources) en su cuenta de destino, lo que permite el acceso a recursos de AWS como los buckets de Amazon S3.

Creación del rol de IAM de destino

  1. Abra la consola de Amazon IAM.

  2. En la barra de navegación superior, compruebe que haya iniciado sesión en la cuenta que contiene los recursos de AWS (como buckets de S3 o tablas de DynamoDB) para el rol de IAM de destino.

  3. En el panel de navegación izquierdo, elija Roles.

  4. Elija el botón Crear rol y, a continuación, seleccione Cuenta de AWS en “Tipo de entidad de confianza”.

  5. Elija Otra cuenta de AWS, ingrese su número de cuenta de AWS (la cuenta en la que existe su rol de EKS Pod Identity) y, a continuación, elija Siguiente.

  6. Agregue las políticas de permisos que desee asociar al rol (por ejemplo, AmazonS3FullAccess) y, a continuación, elija Siguiente.

  7. Ingrese un nombre de rol (por ejemplo, MyCustomIAMTargetRole) y, a continuación, elija Crear rol.

Actualización de la política de confianza del rol de IAM de destino

  1. Después de crear el rol, volverá a la lista de Roles. Busque y seleccione el nuevo rol que ha creado en el procedimiento anterior (por ejemplo, MyCustomIAMTargetRole).

  2. Seleccione la pestaña Relaciones de confianza.

  3. Haga clic en Editar política de confianza en la parte derecha.

  4. En el editor de políticas, reemplace el JSON predeterminado por la política de confianza. Reemplace los valores de marcadores de posición de nombre del rol y 111122223333 en el ARN del rol de IAM por el ID de cuenta de AWS que aloja el clúster de EKS. Por ejemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }

Actualización de la política de permisos para el rol de EKS Pod Identity

En este paso, actualizará la política de permisos del rol de EKS Pod Identity asociado a su clúster de Amazon EKS. Para ello, agregará el ARN del rol de IAM de destino como recurso.

  1. Abra la consola de Amazon EKS.

  2. En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster de EKS.

  3. Elija la pestaña Acceso.

  4. En Asociaciones de Pod Identity, seleccione su rol de EKS Pod Identity.

  5. Elija Permisos, Agregar permisos y, a continuación, Crear política insertada.

  6. Elija JSON en el lado derecho.

  7. En el editor de políticas, reemplace el JSON predeterminado por la política de permisos. Reemplace el valor de marcadores de posición de nombre del rol y 222233334444 en el ARN del rol de IAM por el rol de IAM de destino. Por ejemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::222233334444:role/eks-pod-identity-aws-resources" } ] }

Paso 2: asociación del rol de IAM de destino a una cuenta de servicio de Kubernetes

En este paso, creará una asociación entre el rol de IAM de destino y la cuenta de servicio de Kubernetes en su clúster de EKS.

  1. Abra la consola de Amazon EKS.

  2. En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster al que desea agregar la asociación.

  3. Elija la pestaña Acceder.

  4. En las Asociaciones de Pod Identity, elija Crear.

  5. Elija el rol de EKS Pod Identity en Rol de IAM para que lo asuman sus cargas de trabajo.

  6. Elija el rol de IAM de destino en Rol de IAM de destino que asumirá el rol de EKS Pod Identity.

  7. En el campo Espacio de nombres de Kubernetes, ingrese el nombre del espacio de nombres donde desea crear la asociación (por ejemplo, my-app-namespace). Esto define dónde reside la cuenta de servicio.

  8. En el campo Cuenta de servicio de Kubernetes, ingrese el nombre de la cuenta de servicio (por ejemplo, my-service-account) que utilizará las credenciales de IAM. Esto vincula el rol de IAM a la cuenta de servicio.

  9. Elija Crear para crear la asociación.

(Opcional) Paso 3: adición de permisos externos a un rol de IAM de destino

A veces, es posible que deba otorgar acceso a terceros a sus recursos de AWS (delegar el acceso). Por ejemplo, supongamos que decide contratar a una empresa externa denominada Example Corp para supervisar su cuenta de AWS y ayudarlo a optimizar los costos. A fin de realizar un seguimiento de su gasto diario, Example Corp necesita acceder a los recursos de AWS. En este caso, le recomendamos agregar un ExternalId a la política de confianza de su rol de IAM de destino para evitar posibles problemas de suplente confuso.

Edición de la política de confianza

  1. Después de crear el rol, volverá a la lista de Roles. Busque el nuevo rol que creó en el paso anterior (por ejemplo, MyCustomIAMTargetRole) y haga clic en él.

  2. Seleccione la pestaña Relaciones de confianza.

  3. Haga clic en Editar política de confianza en la parte derecha.

  4. En el editor de políticas, reemplace el JSON predeterminado por la política de confianza. Reemplace el valor del marcador de posición de ExternalId de aws-region/other-account/cluster-name/namespace/service-account-name, donde “region” es la región de AWS del clúster, “111122223333” es el otro ID de cuenta de AWS, “cluster-name” es el nombre del clúster de EKS, “namespace” es el espacio de nombres de Kubernetes y “service-account-name” es el nombre de la cuenta de servicio de Kubernetes. Por ejemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }