Un servicio o una revisión de Cloud Run tiene una identidad de servicio que se usa como cuenta autenticada para acceder a las APIs Google Cloud desde el contenedor de la instancia de Cloud Run. Para obtener más información sobre la identidad de los servicios, consulta la introducción a la identidad de los servicios.
Cómo se usa la identidad del servicio
En Cloud Run, la identidad de servicio es una cuenta de servicio que es un recurso y una cuenta principal.
- Identidad de servicio como recurso: para adjuntar una cuenta de servicio como identidad de servicio, la cuenta de implementador debe tener acceso al recurso de identidad de servicio. Algunas operaciones, como crear o actualizar un servicio o una revisión, requieren que la cuenta de implementación tenga permisos en el recurso de identidad del servicio.
- Identidad de servicio como principal: para acceder a las APIs de Google Cloud desde un servicio o una revisión de Cloud Run, debes conceder a la identidad de servicio los roles o permisos necesarios para las operaciones que quieras que realice tu servicio o revisión.
En la siguiente sección se explican los roles necesarios para conceder acceso a la cuenta de implementación al recurso de identidad de servicio y para conceder los roles o permisos que necesita el principal de la cuenta de servicio.
Roles obligatorios
Tú o tu administrador debéis conceder roles y permisos de gestión de identidades y accesos a la cuenta de implementación y a la identidad de servicio.
Haz clic para ver los roles necesarios de la cuenta de implementación
Para obtener los permisos que necesitas para adjuntar una cuenta de servicio como identidad de servicio en el servicio o la revisión, tú o tu administrador debéis asignar a tu cuenta de implementación el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la cuenta de servicio que se usa como identidad de servicio.
Este rol predefinido contiene el permiso iam.serviceAccounts.actAs
, que es necesario para adjuntar una cuenta de servicio al servicio o a la revisión. También puedes obtener este permiso
configurando roles personalizados
o usando otros roles predefinidos.
Para obtener instrucciones sobre cómo asignar este rol a la cuenta de implementación en la identidad de servicio, consulta Permisos de implementación. Si la cuenta de servicio está en un proyecto distinto del servicio o la revisión de Cloud Run, tú o tu administrador también debéis configurar un rol de gestión de identidades y accesos para el agente de servicio de Cloud Run y configurar una política de la organización. Consulta más información sobre cómo usar cuentas de servicio en otros proyectos.
Haga clic para ver los roles necesarios de la identidad de servicio
Para permitir que la identidad de servicio acceda a las APIs de Cloud Run, tú o tu administrador debéis conceder a la identidad de servicio los permisos o roles que requieran las operaciones que quieras realizar. Google Cloud Para acceder a bibliotecas de cliente de Cloud específicas, consulta la documentación del servicio correspondiente. Google Cloud Google Cloud
Si un servicio o una revisión de Cloud Run no accede a otros servicios de Google Cloud , no es necesario que concedas ningún rol ni permiso a la identidad del servicio, y puedes usar la cuenta de servicio predeterminada que se haya asignado al proyecto.
Recibir recomendaciones para crear cuentas de servicio específicas
Cuando creas una cuenta de servicio desde la consola de Google Cloud , el paso opcional "Concede acceso a esta cuenta de servicio al proyecto" es para cualquier acceso adicional que se necesite. Por ejemplo, un servicio de Cloud Run puede invocar otro servicio de Cloud Run privado o acceder a una base de datos de Cloud SQL, y ambos requieren roles de IAM específicos. Consulta la documentación sobre gestión de acceso para obtener más información.
El servicio Recomendador también proporciona automáticamente recomendaciones para crear cuentas de servicio específicas con el conjunto mínimo de permisos necesarios.
Configurar la identidad del servicio
Si aún no has creado una cuenta de servicio, puedes crear una cuenta de servicio gestionada por el usuario en IAM o en Cloud Run.
Para configurar la identidad de servicio, usa la Google Cloud consola, la CLI de gcloud o la API (YAML) cuando crees un servicio o despliegues una revisión, o bien Terraform:
Consola
En la Google Cloud consola, ve a Cloud Run:
Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.
Haz clic en la pestaña Seguridad.
- Haz clic en el menú desplegable Cuenta de servicio y selecciona una cuenta de servicio disponible o haz clic en Crear una cuenta de servicio si procede.
Haz clic en Crear o en Implementar.
gcloud
Si aún no has creado una cuenta de servicio, puedes crear una cuenta de servicio gestionada por el usuario en IAM.
Puedes actualizar un servicio para que tenga una nueva cuenta de servicio con el siguiente comando:
gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio.
- SERVICE_ACCOUNT: la cuenta de servicio asociada a la nueva identidad. Este valor es la dirección de correo de la cuenta de servicio. Por ejemplo,
example@myproject.iam.gserviceaccount.com
.
También puedes definir una cuenta de servicio durante la implementación con el siguiente comando:
gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
Haz los cambios siguientes:
- IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - SERVICE_ACCOUNT: la cuenta de servicio asociada a la nueva identidad. Este valor es la dirección de correo de la cuenta de servicio. Por ejemplo,
example@myservice.iam.gserviceaccount.com
.
YAML
Si aún no has creado una cuenta de servicio, puedes crear una cuenta de servicio gestionada por el usuario en IAM.
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Actualice el atributo
serviceAccountName:
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: SERVICE_ACCOUNT
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio de Cloud Run.
- SERVICE_ACCOUNT: la cuenta de servicio asociada a la nueva identidad. Este valor es la dirección de correo de la cuenta de servicio. Por ejemplo,
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform:Para crear una cuenta de servicio, añade el siguiente recurso al archivo main.tf
:
Crea o actualiza un servicio de Cloud Run e incluye tu cuenta de servicio:
Usar cuentas de servicio en otros proyectos
Si configuras una cuenta de servicio de un Google Cloud proyecto Google Cloud distinto al del recurso de Cloud Run, haz lo siguiente:
Tú o tu administrador debéis asignar el rol Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio que uses como identidad de servicio.Consola
Ve a la página Cuentas de servicio de la Google Cloud consola:
Selecciona la dirección de correo de la cuenta de servicio que estás usando como identidad de servicio.
Haz clic en la pestaña Permisos.
Haz clic en el botón
Conceder acceso.Introduce la dirección de correo de la cuenta de implementación que coincida con la entidad a la que vas a asignar el rol de administrador o desarrollador.
En el menú desplegable Seleccionar un rol, selecciona el rol Cuentas de servicio > Usuario de cuenta de servicio.
Haz clic en Guardar.
gcloud
Usa el comando
gcloud iam service-accounts add-iam-policy-binding
y sustituye las variables destacadas por los valores que correspondan:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="PRINCIPAL" \ --role="roles/iam.serviceAccountUser"
Haz los cambios siguientes:
SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicio a la que vas a asociar el recurso de Cloud RunSERVICE_ACCOUNT_PROJECT_ID
: el ID del proyecto en el que se encuentra la cuenta de servicioPRINCIPAL: la cuenta de implementador a la que vas a añadir la vinculación, con el formato
user|group|serviceAccount:email
odomain:domain
. Por ejemplo:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
Tú o tu administrador debéis asignar el rol Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) al agente de servicio del recurso de Cloud Run en la cuenta de servicio que utilices como identidad de servicio. El agente de servicio sigue el formato deservice-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.Consola
Ve a la página Cuentas de servicio de la Google Cloud consola:
Selecciona la dirección de correo de la cuenta de servicio que estás usando como identidad de servicio.
Haz clic en la pestaña Permisos.
Haz clic en el botón
Conceder acceso.Escribe la dirección de correo del agente de servicio. Por ejemplo:
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.En el menú desplegable Seleccionar un rol, selecciona el rol Cuentas de servicio > Creador de tokens de cuenta de servicio.
Haz clic en Guardar.
gcloud
Usa el comando
gcloud iam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
Haz los cambios siguientes:
SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicio a la que vas a asociar el recurso de Cloud RunSERVICE_ACCOUNT_PROJECT_ID
: el ID del proyecto en el que se encuentra la cuenta de servicioCLOUD_RUN_RESOURCE_PROJECT_NUMBER
: el número de proyecto en el que se encuentra Cloud Run
El comando imprime la política de permisos actualizada para la cuenta de servicio gestionada por el usuario.
El proyecto que contiene esta cuenta de servicio requiere que la política de la organización
iam.disableCrossProjectServiceAccountUsage
se defina como "false" o como "unenforced" a nivel de carpeta, o que se herede de los ajustes a nivel de proyecto. De forma predeterminada, se define entrue
.Consola
Ve a la página Políticas de la organización de la Google Cloud consola:
En el selector de proyectos, selecciona la organización y el proyecto en los que quieras inhabilitar el uso de cuentas de servicio entre proyectos.
Selecciona la política disable cross-project service account usage (inhabilitar el uso de cuentas de servicio entre proyectos).
Haz clic en Gestionar política.
En Fuente de la política, seleccione Anular política del recurso superior.
Haz clic en Añadir regla.
En Implementación obligatoria, selecciona Desactivada.
Para aplicar la política, haz clic en Definir política.
gcloud
En el proyecto que tiene la cuenta de servicio, comprueba que no se haya aplicado la
iam.disableCrossProjectServiceAccountUsage
restricción de la política de organización. Esta restricción se aplica de forma predeterminada.Para inhabilitar esta restricción de política de organización, ejecuta el siguiente comando:
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID
Sustituye SERVICE_ACCOUNT_PROJECT_ID por el ID del proyecto que contiene la cuenta de servicio.
Puedes aplicar las pertenencias a roles directamente al recurso de cuenta de servicio o heredarlas de niveles superiores de la jerarquía de recursos.
Siguientes pasos
- Para obtener más información sobre las cuentas de servicio, consulta las guías sobre cuentas de servicio de gestión de identidades y accesos y cuentas de servicio gestionadas por usuarios.
- Si tu servicio, trabajo o grupo de trabajadores de Cloud Run accede a las APIs o los servicios de Google, debes configurar tu cuenta de servicio como identidad de servicio.Google Cloud Más información