Usa Workload Identity

En esta página, se explica cómo autenticar Cloud Run for Anthos en Google Cloud para usar las API de Google Cloud mediante la habilitación de Workload Identity.

Para usar las API de Google Cloud, como las API de Compute, Storage y Database, o las API de aprendizaje automático desde el clúster de GKE, debes tener permisos y autenticar tu servicio de Cloud Run for Anthos. Para ello, habilita Workload Identity y vincula una cuenta de servicio de Kubernetes a fin de que actúe como una cuenta de servicio de Google.

Habilita Workload Identity en tu clúster

Si deseas configurar Workload Identity con Cloud Run for Anthos, consulta las siguientes instrucciones para habilitarlo en tu clúster; de lo contrario, pasa a la siguiente sección:

Habilita Workload Identity en un clúster nuevo o Habilita Workload Identity en un clúster existente.

Habilita métricas en un clúster con Workload Identity

Cuando habilitas Workload Identity, Cloud Run for Anthos no informa ciertas métricas, como el recuento de solicitudes de revisión o la latencia de las solicitudes, a Google Cloud's operations suite, pero continúa informando métricas de CPU y memoria.

A fin de habilitar todas las métricas, necesitas configurar de forma manual los permisos para escribir métricas en Cloud Monitoring. Con este propósito, otorga la función de escritor de métricas de Monitoring a la cuenta de servicio de Google (GSA) asociada con el servicio de Cloud Run for Anthos.

Otorga los permisos de la función de escritor de métricas de Monitoring a la GSA de tu servicio:

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
--role=roles/monitoring.metricWriter

Reemplaza lo siguiente:

  • PROJECT_ID por el ID del proyecto de clúster que aloja tu KSA.
  • GSA_PROJECT por el ID del proyecto de una GSA que no está en el clúster. Puedes usar cualquier GSA de tu organización.

Para obtener más información, consulta Otorga, cambia y revoca el acceso a los recursos.

Vincula cuentas de servicio

Debes configurar una relación para una cuenta de servicio de Kubernetes (KSA) a fin de que actúe como una cuenta de servicio de Google (GSA). Cualquier carga de trabajo que se ejecute como KSA se autenticará de forma automática como la GSA cuando se acceda a las API de Google Cloud.

  1. Si no existe una cuenta de servicio de Kubernetes (KSA), crea una en el mismo espacio de nombres de Kubernetes que tu servicio de Cloud Run for Anthos. De lo contrario, continúa con el siguiente paso:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  2. Crea una relación entre KSA y GSA, de modo que la carga de trabajo que se ejecuta como KSA se autentique de forma automática como GSA cuando se acceda a las API de Google Cloud:

    1. Autoriza a tu KSA para que actúe como GSA:

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
    2. Actualiza el clúster para aprovechar la vinculación:

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE \
       KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com

Implementa un servicio nuevo con una identidad nueva

Implementa tu servicio mediante la KSA que existe en el clúster y el espacio de nombres del servicio que deseas implementar. La cuenta de servicio puede pertenecer a un proyecto diferente al del clúster.

Console

  1. Ir a Cloud Run for Anthos en Google Cloud

  2. Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, haz clic en IMPLEMENTAR Y EDITAR UNA NUEVA REVISIÓN.

  3. En Configuración avanzada, haz clic en Contenedor.

    imagen

  4. Haz clic en el menú desplegable Service account (Cuenta de servicio) y selecciona la cuenta de servicio que deseas.

  5. Haz clic en Crear o Implementar.

gcloud

Puedes actualizar un servicio existente para tener una nueva cuenta de servicio del entorno de ejecución mediante el siguiente comando:

gcloud kuberun core services update SERVICE --service-account SERVICE_ACCOUNT

Reemplaza lo siguiente:

  • SERVICE por el nombre de tu servicio
  • SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva También puedes configurar una cuenta de servicio durante la implementación mediante el siguiente comando:
gcloud kuberun core services create --image IMAGE_URL --service-account SERVICE_ACCOUNT

Reemplaza lo siguiente:

  • IMAGE_URL por una referencia a la imagen del contenedor, como gcr.io/myproject/my-image:latest
  • SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva

YAML

Si deseas usar un archivo YAML para modificar la configuración de tu servicio existente, obtén una copia de la configuración actual, modifica y guarda los cambios en un archivo local y, luego, implementa esos cambios en tu servicio.

  1. Muestra los cambios como YAML y, luego, copia la configuración de tu servicio en un archivo local, por ejemplo service.yaml:

    gcloud kuberun core services describe SERVICE --format yaml

    Reemplaza SERVICE por el nombre de tu servicio de Cloud Run for Anthos.

  2. En tu archivo local, actualiza el atributo serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

    Reemplazar

    • SERVICE por el nombre de tu servicio de Cloud Run for Anthos en Google Cloud.
    • SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud beta run services replace service.yaml