Identidad del servicio

Cuenta de servicio del entorno de ejecución

Durante la ejecución, una revisión de Cloud Run usa una cuenta de servicio como su identidad. Entonces, cuando tu código usa bibliotecas cliente de Google Cloud, obtiene y usa de forma automática las credenciales de la cuenta de servicio del entorno de ejecución de la revisión actual de Cloud Run. Esta estrategia se denomina “credenciales predeterminadas de la aplicación”.

Según la configuración predeterminada, las revisiones de Cloud Run usan la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), que tiene la función de IAM Proyecto > Editor. Esto significa que, de forma predeterminada, las revisiones de Cloud Run tienen acceso de lectura y escritura a todos los recursos del proyecto de Google Cloud. Aunque esto es muy conveniente, recomendamos otorgar permisos más detallados a cada uno de los servicios de Cloud Run mediante la asignación de cuentas de servicio dedicadas con funciones de IAM más restringidas.

Obtén recomendaciones para crear cuentas de servicio dedicadas

El servicio de recomendador proporciona de forma automática recomendaciones para que crees una cuenta de servicio dedicada con el conjunto mínimo de permisos necesarios.

Usa la identidad por servicio

Google recomienda que asignes una identidad exclusiva a cada uno de tus servicios. Para ello, se le asignará una cuenta de servicio creada por el usuario, en lugar de usar una cuenta de servicio predeterminada. Las cuentas de servicio creadas por el usuario te permiten controlar el acceso mediante la concesión de un conjunto mínimo de permisos con Identity and Access Management.

Puedes usar una cuenta de servicio administrada por el usuario en el mismo proyecto que el servicio de Cloud Run. También puedes usar una cuenta de servicio administrada por el usuario en un proyecto diferente, que requiere una configuración adicional. Si la cuenta de servicio y el servicio de Cloud Run están en proyectos diferentes, debes otorgar la función de creador de tokens de cuentas de servicio a las siguientes cuentas de servicio administradas por Google en la cuenta de servicio administrada por el usuario:

  • Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)
  • Agente de servicio de Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

donde PROJECT_NUMBER es el número del proyecto.

Permisos necesarios para las cuentas de servicio administradas por el usuario

Para implementar un servicio con una cuenta de servicio administrada por el usuario, el usuario que implementa el servicio debe tener el permiso iam.serviceAccounts.actAs en esa cuenta de servicio.

Cuando un usuario crea una cuenta de servicio, recibe este permiso de forma automática. De lo contrario, un usuario con los permisos correctos debe otorgarle el permiso iam.serviceAccounts.actAs que implementa el servicio. Para obtener información sobre cómo otorgar permisos, consulta Otorga, cambia y revoca el acceso a los recursos.

Implementa un servicio nuevo con una cuenta de servicio creada por el usuario

Si aún no tienes una cuenta de servicio administrada por el usuario que desees usar, obtén información sobre cómo crear y administrar cuentas de servicio.

Puedes configurar variables de entorno mediante Cloud Console o la línea de comandos de gcloud cuando creas un servicio nuevo o implementas una revisión nueva: Actualiza la cuenta de servicio con el correo electrónico de tu cuenta de servicio asociado con la nueva identidad:

Console

  1. Ir a Cloud Run

  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, en Edit and Deploy New Revision.

  3. Si estás configurando un servicio nuevo, llena la página de configuración inicial del servicio como desees y haz clic en Siguiente > Configuración avanzada para acceder a la página de configuración del servicio.

  4. Haz clic en la pestaña Seguridad.

    image

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

  6. 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 run 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 a la identidad nueva: este valor es la dirección de correo electrónico de la cuenta de servicio, por ejemplo, example@myproject.iam.gserviceaccount.com.

También puedes configurar una cuenta de servicio durante la implementación mediante el siguiente comando:

gcloud run deploy --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 a la identidad nueva: este valor es la dirección de correo electrónico de la cuenta de servicio, por ejemplo, example@myservice.iam.gserviceaccount.com.

YAML

Puedes descargar y ver la configuración del servicio existente mediante el comando gcloud run services describe --format export, que genera resultados limpios en formato YAML. Luego, puedes modificar los campos que se describen a continuación y subir el YAML modificado mediante el comando gcloud beta run services replace. Asegúrate de modificar los campos tal como se indica en la documentación.

  1. Para ver y descargar la configuración, ejecuta el siguiente comando:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza el atributo serviceAccountName::

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

    Reemplaza los siguientes elementos:

    • SERVICE por el nombre del servicio de Cloud Run
    • SERVICE_ACCOUNT por la cuenta de servicio asociada a la identidad nueva: este valor es la dirección de correo electrónico de la cuenta de servicio, por ejemplo, example@myproject.iam.gserviceaccount.com.
  3. Reemplaza el servicio por la configuración nueva mediante el comando siguiente:

    gcloud beta run services replace service.yaml

Recupera los tokens de identidad y acceso

Cuando el código se ejecuta en Cloud Run (completamente administrado), puede usar el servidor de metadatos de Compute para recuperar tokens de identidad y de acceso. No puedes consultar el servidor de metadatos directamente desde tu computadora local.

Tokens de identidad

Debes usar tokens de identidad cuando llamas a otras funciones de Cloud Functions o a cualquier otro servicio que pueda validar un token de identidad.

Puedes usar el servidor de metadatos de Compute para obtener tokens de identidad con un público específico de la siguiente manera:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=[AUDIENCE]" \
  -H "Metadata-Flavor: Google"

Donde AUDIENCE es el JWT Audience solicitado, por ejemplo, la URL de un servicio que estás invocando, como https://service.domain.com, o el ID de cliente de OAuth de un recurso protegido por IAP, como 1234567890.apps.googleusercontent.com.

Tokens de acceso

Debes usar tokens de acceso cuando llamas a las API de Google.

De forma predeterminada, los tokens de acceso tienen el alcance cloud-platform, que permite el acceso a todas las API de Google Cloud Platform, suponiendo que IAM también permita el acceso. Para acceder a otras API de Google o Google Cloud, deberás recuperar un token de acceso con el permiso adecuado.

Puedes usar el servidor de metadatos de Compute para recuperar tokens de acceso.

Si necesitas un token de acceso con un alcance específico, puedes generar uno de la siguiente manera:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=[SCOPES]" \
  -H "Metadata-Flavor: Google"

En el ejemplo anterior, SCOPES es una lista separada por comas de los permisos de OAuth solicitados, por ejemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulta la lista completa de permisos de Google OAuth para buscar los que necesitas.

Próximos pasos

Obtén más información sobre cómo administrar el acceso a los servicios o autenticar a los desarrolladores, los servicios y los usuarios finales en ellos de forma segura.

A fin de obtener una explicación integral de una aplicación que usa la identidad de servicio para minimizar el riesgo de seguridad, sigue el instructivo sobre cómo proteger los servicios de Cloud Run.