AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
¿Cómo puedo solucionar los problemas de un proveedor de OIDC e IRSA en Amazon EKS?
Mis pods no pueden usar los permisos del rol de AWS Identity and Access Management (IAM) con el token de cuenta de AWS de Amazon Elastic Kubernetes Service (Amazon EKS).
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Cómo comprobar si ya tienes un proveedor de OIDC de IAM para tu clúster
Si no existe un proveedor de OpenID Connect (OIDC), recibirás un error similar al siguiente:
«WebIdentityErr: failed to retrieve credentials\ncaused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.eu-west-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E\n\tstatus code: 400»
Para comprobar si ya tienes un proveedor de OIDC de IAM, sigue estos pasos:
-
Para comprobar la URL del proveedor de OIDC de tu clúster, ejecuta el siguiente comando describe-cluster de la AWS CLI:
aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output textNota: Sustituye cluster_name por el nombre de tu clúster.
Resultado de ejemplo:https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E -
Para enumerar los proveedores de OIDC de IAM de tu cuenta, ejecuta el siguiente comando list-open-id-connect-providers:
aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041ENota: Sustituye EXAMPLED539D4633E53DE1B716D3041E por la URL del proveedor de OIDC que hayas obtenido del comando anterior.
Si el comando devuelve un resultado, significa que ya tienes un proveedor para tu clúster. Si el comando no devuelve ningún resultado, debes crear un proveedor de OIDC de IAM. Resultado de ejemplo:"Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"
Cómo comprobar si tu rol de IAM tiene los permisos necesarios y una política de IAM adjunta
Sigue estos pasos:
- Abre la consola de IAM.
- En el panel de navegación, selecciona Roles.
- Elige el rol que está asociado a tu cuenta de servicio de Kubernetes.
- Selecciona la pestaña Permisos. A continuación, comprueba la política asociada al rol para asegurarte de que contiene los permisos necesarios para tu configuración.
- Elige la pestaña Relaciones de confianza. A continuación, comprueba que el formato de tu política de IAM coincida con el formato de la siguiente política JSON:
O bien, ejecuta el siguiente comando get-role para comprobar tu relación de confianza:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com" } } } ] }
Nota: Sustituye EKS-IRSA por tu nombre de rol de IAM para cuentas de servicio (IRSA).aws iam get-role --role-name EKS-IRSA
Resultado de ejemplo:
En el JSON de salida, consulta la sección AssumeRolePolicyDocument para verificar la política de relación de confianza.{ "Role": { "Path": "/", "RoleName": "EKS-IRSA", "RoleId": "AROAQ55NEXAMPLELOEISVX", "Arn": "arn:aws:iam::ACCOUNT_ID:role/EKS-IRSA", "CreateDate": "2021-04-22T06:39:21+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com", "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME" } } } ] }, "MaxSessionDuration": 3600, "RoleLastUsed": { "LastUsedDate": "2021-04-22T07:01:15+00:00", "Region": "AWS_REGION" } } } - (Opcional) Actualiza la relación de confianza del rol con la región de AWS, el nombre de la cuenta de servicio de Kubernetes o el espacio de nombres de Kubernetes correctos.
Cómo comprobar si has creado una cuenta de servicio
Para comprobar si existe una cuenta de servicio, ejecuta el siguiente comando:
kubectl get sa -n YOUR_NAMESPACE
Nota: Sustituye YOUR_NAMESPACE por tu espacio de nombres de Kubernetes.
Resultado de ejemplo:
NAME SECRETS AGEdefault 1 28d irsa 1 66m
Asegúrate de que la salida muestre tu cuenta de servicio. Si no tienes una cuenta de servicio, consulta Configuración de cuentas de servicio para pods en el sitio web de Kubernetes.
Cómo verificar si la cuenta de servicio tiene las anotaciones de rol de IAM correctas
Para comprobar que tu cuenta de servicio tenga las anotaciones de rol de IAM correctas, ejecuta el siguiente comando:
kubectl describe sa irsa -n YOUR_NAMESPACE
Nota: Sustituye irsa por el nombre de tu cuenta de servicio de Kubernetes y YOUR_NAMESPACE por tu espacio de nombres de Kubernetes.
Resultado de ejemplo:
Name: irsa Namespace: default Labels: none Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME Image pull secrets: none Mountable secrets: irsa-token-v5rtc Tokens: irsa-token-v5rtc Events: none
Comprueba las anotaciones para asegurarte de que el rol de IAM es correcto. Si no lo es, ejecuta el siguiente comando para editar la cuenta de servicio:
kubectl edit sa -n NAMESPACE
Nota: Sustituye NAMESPACE por el ID de tu espacio de nombres.
A continuación, actualiza el valor de las anotaciones con el rol de IAM correcto.
Cómo verificar si ha especificado correctamente serviceAccountName en el pod
Para verificar el serviceAccountName, ejecuta el siguiente comando:
kubectl get pod POD_NAME -o yaml -n YOUR_NAMESPACE| grep -i serviceAccountName:
Nota: Sustituye POD_NAME por tu pod de Kubernetes y YOUR_NAMESPACE por tu espacio de nombres.
Resultado de ejemplo:
serviceAccountName: irsa
Si el valor del resultado es un nombre de cuenta de servicio incorrecto, modifica el manifiesto de despliegue con el nombre correcto. A continuación, vuelve a desplegar el manifiesto de despliegue.
Comprobación de las variables de entorno y los permisos
Para comprobar las variables de entorno del pod, ejecuta el siguiente comando:
kubectl -n YOUR_NAMESPACE exec -it POD_NAME -- env | grep AWS
Resultado de ejemplo:
AWS_REGION=ap-southeast-2 AWS_ROLE_ARN=arn:aws:iam::111122223333:role/EKS-IRSA AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_DEFAULT_REGION=ap-southeast-2
Asegúrate de que la salida muestre tu cuenta de servicio. Si no tienes una cuenta de servicio, consulta Configuración de cuentas de servicio para pods en el sitio web de Kubernetes.
Cómo verificar si la aplicación utiliza un SDK de AWS compatible
La versión del SDK de AWS debe ser superior o igual a la versión requerida para el SDK de AWS.
Cómo volver a crear pods
Si has creado pods antes de aplicar IRSA, ejecuta el siguiente comando para volver a crear los pods:
kubectl rollout restart deploy nginx
Resultado de ejemplo:
deployment.apps/nginx restarted
Para los despliegues de daemonsets o satefulsets, ejecuta el siguiente comando:
kubectl rollout restart deploy DEPLOYMENT_NAME
Si solo has creado un pod, debes eliminarlo y volver a crearlo. Sigue estos pasos:
- Para eliminar el pod, ejecuta el siguiente comando:
Nota: Sustituye POD_NAME por el nombre de tu pod.kubectl delete pod POD_NAME - Para volver a crear el pod, ejecuta el siguiente comando:
Nota: Sustituye SPEC_FILE por la ruta y el nombre del archivo de manifiesto de Kubernetes.kubectl apply -f SPEC_FILE
Cómo verificar si el público es correcto
Si has creado el proveedor de OIDC con el público incorrecto, se mostrará el siguiente error:
«Error - An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Incorrect token audience»
Para comprobar el proveedor de identidades de IAM de tu clúster, ejecuta el siguiente comando get-open-id-connect-provider:
aws iam get-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::ACCOUNT_ID:oidc-provider/oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E
Nota: Sustituye ACCOUNT_ID por tu ID de cuenta, AWS_REGION por tu región y EXAMPLED539D4633E53DE1B716D3041E por la URL de tu proveedor de OIDC.
Resultado de ejemplo:
{ "Url": "oidc.eks.AWS_REGION.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E", "ClientIDList": [ "sts.amazonaws.com" ], "ThumbprintList": [ "9e99a48a9960b14926bb7f3b02e22da2b0ab7280" ], "CreateDate": "2021-01-21T04:29:09.788000+00:00", "Tags": [] }
En el resultado, asegúrate de que ClientIDList sea sts.amazonaws.com. Si no lo es, agrega un proveedor de identidades al rol e introduce sts.amazonaws.com para Público.
Cómo verificar si has configurado la huella digital correcta
Si la huella digital que has configurado en el OIDC de IAM no es correcta, recibirás el siguiente error:
«failed to retrieve credentials caused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint»
Para configurar automáticamente la huella digital correcta, utiliza eksctl o la consola de Amazon AWS para crear el proveedor de identidades de IAM. Para ver otras formas de obtener una huella digital, consulta Obtención de la huella digital de un proveedor de identidades de OpenID Connect.
(Solo región de AWS de China) Comprobación de la variable de entorno AWS_DEFAULT_REGION
Para desplegar un pod o daemonset aplicado por IRSA en un clúster de la región de China de AWS, debes configurar AWS_DEFAULT_REGION en la especificación del pod. Si no configuras la variable de entorno AWS_DEFAULT_REGION, es posible que recibas el siguiente error en tu pod o daemonset:
«An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid»
Para agregar la variable de entorno AWS_DEFAULT_REGION a la especificación del pod o daemonset, crea un manifiesto de despliegue similar al del siguiente ejemplo:
apiVersion: apps/v1kind: Deployment metadata: name: my-app spec: template: metadata: labels: app: my-app spec: serviceAccountName: my-app containers: - name: my-app image: my-app:latest env: - name: AWS_DEFAULT_REGION value: "AWS_REGION" ...
O bien, ejecuta el siguiente comando para establecer la variable de entorno:
kubectl set env deployment deployment_name AWS_DEFAULT_REGION=example_region -n NAMESPACE"
Nota: Sustituye deployment_name por el nombre de tu despliegue, example_region por la región de China de AWS y NAMESPACE por tu espacio de nombres.
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace un mes
- preguntada hace 6 meses
- preguntada hace 8 meses
- preguntada hace 8 meses
- preguntada hace 6 meses
OFICIAL DE AWSActualizada hace 2 años
OFICIAL DE AWSActualizada hace 8 meses