Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Elija el enlace Editar esta página en GitHub que se encuentra en el panel derecho de cada página. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
En este tema se explica cómo configurar una cuenta de servicio de Kubernetes para asumir un rol de AWS Identity and Access Management (IAM) con el Pod Identity de EKS. Los Pods que estén configurados para usar la cuenta de servicio pueden acceder a cualquier servicio de AWS al que el rol tenga permisos para acceder.
Para crear una asociación de Pod Identity de EKS, solo hay un paso: se crea la asociación en EKS a través de la AWS Management Console, AWS CLI, los SDK de AWS, AWS CloudFormation y otras herramientas. No existen datos ni metadatos sobre las asociaciones dentro del clúster en ningún objeto de Kubernetes y no se agrega ninguna anotación a las cuentas de servicio.
-
Un clúster existente. Si no tiene uno, puede crearlo mediante una de las siguientes guías de Introducción a Amazon EKS.
-
La entidad principal de IAM que va a crear la asociación debe tener
iam:PassRole
. -
La última versión de AWS CLI instalada y configurada en su dispositivo o AWS CloudShell. Puede comprobar su versión actual con
aws --version | cut -d / -f2 | cut -d ' ' -f1
. Los administradores de paquetes tales comoyum
,apt-get
o Homebrew para macOS suelen estar atrasados varias versiones respecto de la más reciente versión de la AWS CLI. Para instalar la versión más reciente, consulte Instalación y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface. La versión de AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Instalación de AWS CLI en su directorio de usuarios principal en la Guía del usuario de AWS CloudShell. -
La herramienta de línea de comandos de
kubectl
está instalada en su dispositivo o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión de Kubernetes de su clúster. Por ejemplo, si la versión del clúster es1.29
, puede usar la versión1.28
,1.29
o1.30
dekubectl
con él. Para instalar o actualizarkubectl
, consulte Configuración de kubectl y eksctl. -
Un archivo
config
dekubectl
existente que contenga la configuración del clúster. Para crear un archivoconfig
dekubectl
, consulte Conexión de kubectl a un clúster de EKS mediante la creación de un archivo kubeconfig.
Cree una asociación de Pod Identity (consola de AWS)
-
Abra la consola de Amazon EKS
. -
En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster para el que desea configurar el complemento de agente de Pod Identity de EKS.
-
Elija la pestaña Acceder.
-
En las Asociaciones de Pod Identity, elija Crear.
-
Para el Rol de IAM, seleccione el rol de IAM con los permisos que quiere que tenga la carga de trabajo.
nota
La lista solo contiene roles que tienen la siguiente política de confianza, que permite a Pod Identity de EKS utilizarlas.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
sts:AssumeRole
: Pod Identity de EKS usaAssumeRole
para asumir el rol de IAM antes de pasar las credenciales temporales a sus pods.sts:TagSession
: Pod Identity de EKS usaTagSession
para incluir etiquetas de sesión en las solicitudes para AWS.Puede utilizar estas etiquetas en las claves de condición de la política de confianza para restringir qué cuentas de servicio, espacios de nombres y clústeres pueden utilizar este rol.
Para obtener una lista de las claves de condición de Amazon EKS, consulte Condiciones de Amazon Elastic Kubernetes Service en la Referencia de autorizaciones de servicio. Para obtener más información sobre las acciones y los recursos con los que puede utilizar una clave de condición, consulte Acciones definidas por Amazon Elastic Kubernetes Service.
-
Para el espacio de nombres de Kubernetes, seleccione el espacio de nombres de Kubernetes que contiene la cuenta de servicio y la carga de trabajo. Si lo desea, puede especificar un espacio de nombres por nombre que no existe en el clúster.
-
Para la cuenta de servicio de Kubernetes, seleccione la cuenta de servicio de Kubernetes que desee usar. El manifiesto de su carga de trabajo de Kubernetes debe especificar esta cuenta de servicio. Si lo desea, puede especificar una cuenta de servicio por nombre que no exista en el clúster.
-
(Opcional) Para las Etiquetas, elija Agregar etiqueta para agregar metadatos en un par clave-valor. Estas etiquetas se aplican a la asociación y se pueden utilizar en las políticas de IAM.
Puede repetir este paso para agregar varias etiquetas.
-
Seleccione Crear.
Cree una asociación de Pod Identity (AWS CLI)
-
Si desea asociar una política de IAM existente a su rol de IAM, vaya al siguiente paso.
Cree una política de IAM. Puede crear su propia política o copiar una política administrada de AWS que ya conceda algunos de los permisos que necesita y personalizarla según sus requisitos específicos. Para obtener más información, consulte Creación de políticas de IAM en la Guía del usuario de IAM.
-
Cree un archivo que incluya los permisos para los servicios de AWS a los que quiere que accedan sus Pods. Para obtener una lista de todas las acciones para todos los servicios de AWS, consulte la referencia de autorizaciones de servicio.
Puede ejecutar el siguiente comando para crear un archivo de política de ejemplo que permita el acceso de solo lectura a un bucket de Amazon S3. Opcionalmente, puede almacenar información de configuración o un script de arranque en este bucket, y los contenedores de su Pod pueden leer el archivo desde el bucket y cargarlo en su aplicación. Si desea crear esta política de ejemplo, copie el siguiente contenido en su dispositivo. Sustituya
my-pod-secrets-bucket
por el nombre de su bucket y ejecute el comando.cat >my-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] } EOF
-
Cree la política de IAM.
aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
-
-
Cree un rol de IAM y asócielo a una cuenta de servicio de Kubernetes.
-
Si tiene una cuenta de servicio de Kubernetes existente que desea que asuma un rol de IAM, puede omitir este paso.
Cree una cuenta de servicio de Kubernetes. Copie los siguientes contenidos en su dispositivo. Reemplace
my-service-account
por el nombre que desee ydefault
por un espacio de nombres diferente, si es necesario. Si cambiadefault
, el espacio de nombres debe existir previamente.cat >my-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account namespace: default EOF kubectl apply -f my-service-account.yaml
Ejecute el siguiente comando de la .
kubectl apply -f my-service-account.yaml
-
Ejecute el siguiente comando para crear un archivo de política de confianza para el rol de IAM.
cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF
-
Cree el rol. Reemplace
my-role
con un nombre para el rol de IAM, ymy-role-description
con una descripción de su rol.aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
-
Adjunte la política de IAM al rol. Reemplace
my-role
por el nombre de su rol de IAM ymy-policy
por el nombre de una política existente que haya creado.aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws:iam::111122223333:policy/my-policy
nota
A diferencia de los roles de IAM para cuentas de servicio, Pod Identity de EKS no utiliza ninguna anotación en la cuenta de servicio.
-
Ejecute el siguiente comando para crear la asociación. Reemplace
my-cluster
por el nombre del clúster, reemplacemy-service-account
por el nombre que desee ydefault
por un espacio de nombres diferente, si es necesario.aws eks create-pod-identity-association --cluster-name my-cluster --role-arn arn:aws:iam::111122223333:role/my-role --namespace default --service-account my-service-account
Un ejemplo de salida sería el siguiente.
{ "association": { "clusterName": "my-cluster", "namespace": "default", "serviceAccount": "my-service-account", "roleArn": "arn:aws:iam::111122223333:role/my-role", "associationArn": "arn:aws::111122223333:podidentityassociation/my-cluster/a-abcdefghijklmnop1", "associationId": "a-abcdefghijklmnop1", "tags": {}, "createdAt": 1700862734.922, "modifiedAt": 1700862734.922 } }
nota
Puede especificar un espacio de nombres y una cuenta de servicio por nombre que no existe en el clúster. Debe crear el espacio de nombres, la cuenta de servicio y la carga de trabajo que utiliza la cuenta de servicio para que funcione la asociación de Pod Identity de EKS.
-
Confirmación de configuración
-
Confirme que la política de confianza del rol de IAM se haya configurado correctamente.
aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocument
Un ejemplo de salida sería el siguiente.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow EKS Auth service to assume this role for Pod Identities", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
-
Confirme que la política que adjuntó a su rol en un paso anterior se encuentre adjunta al rol.
aws iam list-attached-role-policies --role-name my-role --query AttachedPolicies[].PolicyArn --output text
Un ejemplo de salida sería el siguiente.
arn:aws:iam::111122223333:policy/my-policy
-
Establezca una variable para almacenar el nombre de recurso de Amazon (ARN) de la política que quiera utilizar. Reemplace
my-policy
por el nombre de la política para la que desea confirmar los permisos.export policy_arn=arn:aws:iam::111122223333:policy/my-policy
-
Vea la versión predeterminada de la política.
aws iam get-policy --policy-arn $policy_arn
Un ejemplo de salida sería el siguiente.
{ "Policy": { "PolicyName": "my-policy", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE", "Arn": "arn:aws:iam::111122223333:policy/my-policy", "Path": "/", "DefaultVersionId": "v1", [...] } }
-
Vea el contenido de la política para asegurarse de que incluye todos los permisos que su Pod necesita. Si es necesario, reemplace
1
en el siguiente comando por la versión devuelta en la salida anterior.aws iam get-policy-version --policy-arn $policy_arn --version-id v1
Un ejemplo de salida sería el siguiente.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] }
Si creó la política de ejemplo en un paso anterior, el resultado es el mismo. Si creó una política diferente, el contenido de
example
es diferente.
Siguientes pasos
Configuración de pods para acceder a los servicios de AWS con cuentas de servicio