Habilitar el emulador de IMDS

En esta página se explica cómo habilitar el emulador de IMDS, que emula el servicio de metadatos de instancias (IMDS) de AWS. Puedes ejecutar el emulador como un contenedor auxiliar para permitir que las cargas de trabajo antiguas se ejecuten en grupos de nodos de GKE en AWS. Si tienes cargas de trabajo antiguas que no admiten directamente Workload Identity Federation para GKE, usa este emulador para acceder a los datos de IMDS.

Limitaciones

  • Tu clúster debe usar una versión de Kubernetes 1.24 o posterior.
  • El emulador no es compatible con la generación anterior de GKE en AWS.
  • El servidor del emulador de IMDS solo atiende solicitudes de credenciales (API_VERSION/meta-data/iam/security-credentials/). Todas las demás solicitudes de metadatos devuelven un error 404.
  • Una implementación de sidecar requiere que el contenedor init tenga las NET_ADMIN y las NET_RAW capacidades del contexto de seguridad. Si no sabes si el contenedor tiene estos contextos, consulta a tu equipo de seguridad.
  • El token de AWS STS puede durar una hora. El token de rol de los metadatos de EC2 puede durar 24 horas. Esto no debería afectar al uso del emulador, pero es posible que necesites esta información durante una auditoría de seguridad.
  • El emulador de IMDS solo emula respuestas de IMDSv1. No se admite IMDSv2.

Habilitar el emulador

Para habilitar el emulador de IMDS, añade una etiqueta y una anotación a los metadatos de un pod. También puedes habilitar el emulador mediante un Deployment, un DaemonSet o cualquier otro recurso que cree pods:

  1. Añade la siguiente etiqueta y valor a tu pod:

    gkemulticloud.googleapis.com/aws-imds-emulator-enabled: "True"
    

    El único valor aceptable para esta etiqueta es True. Todos los demás valores (incluido true con una t en minúscula) inhabilitan el emulador.

  2. Añade la siguiente anotación a tu pod:

    gkemulticloud.googleapis.com/aws-imds-emulator-role-arn: ARN_ROLE
    

    Sustituye ARN_ROLE por un nombre de recurso de Amazon (ARN) que especifique el rol que quieres que tenga el recurso.

Ejemplo

En el siguiente ejemplo se muestra un pod con el emulador de IMDS habilitado:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    gkemulticloud.googleapis.com/aws-imds-emulator-enabled: "True"
  annotations:
    gkemulticloud.googleapis.com/aws-imds-emulator-role-arn: "arn:aws:iam::123456789012:role/my-example-role"
spec:
 serviceAccountName: my-sa
 containers:
 - name: nginx
   image: nginx