Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Asignación de roles de IAM a cuentas de servicio de Kubernetes
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). 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.
Requisitos previos
-
Un clúster existente. Si no tiene uno, puede crearlo mediante una de las siguientes guías de Introducción a Amazon EKS.
-
Un proveedor de OpenID Connect (OIDC) de IAM existente para el clúster. Para saber si ya tiene un proveedor o cómo crear uno, consulte Creación de un proveedor de OIDC de IAM para su clúster.
-
La versión
2.12.3
o posterior, o bien, la versión1.27.160
o posterior de la AWS Command Line Interface (AWS CLI) instalada y configurada en su dispositivo o AWS CloudShell. Para comprobar su versión actual, utilice
. Los administradores de paquetes tales comoaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, consulte Instalar, actualizar y desinstalar la AWS CLI 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 la AWS CLI en el directorio de inicio 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 archivo conconfig
dekubectl
, consulte Conexión de kubectl a un clúster de EKS mediante la creación de un archivo kubeconfig.
Para asociar el rol de IAM con una cuenta de servicio de Kubernetes
-
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. Puede utilizar
eksctl
o AWS CLI. -
Confirme que el rol y la cuenta de servicio se hayan configurado correctamente.
-
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.AssumeRolePolicyDocumentUn ejemplo de salida sería el siguiente.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:default:my-service-account
", "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } -
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 textUn 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 v
1
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. -
Confirme que la cuenta de servicio de Kubernetes se anota con el rol.
kubectl describe serviceaccount
my-service-account
-ndefault
Un ejemplo de salida sería el siguiente.
Name:
my-service-account
Namespace:default
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333
:role/my-role
Image pull secrets: <none> Mountable secrets:my-service-account
-token-qqjfl
Tokens:my-service-account
-token-qqjfl
[...]
-
-
(Opcional) Configure el punto de conexión AWS Security Token Service de una cuenta de servicio. AWS recomienda el uso de un punto de conexión de AWS STS en lugar del global. Esto reduce la latencia, proporciona redundancia integrada y aumenta la validez de los tokens de sesión.
Siguiente paso
Configuración de Pods para usar una cuenta de servicio de Kubernetes