Un servicio o una revisión de Cloud Run tiene una identidad de servicio que se usa como la cuenta autenticada para acceder a las APIs de Google Cloud desde el contenedor de instancias de Cloud Run. Para obtener más información sobre la identidad del servicio, consulta la guía Introducción a la identidad del servicio.
Cómo se usa la identidad de servicio
En Cloud Run, la identidad del servicio es una cuenta de servicio que es un recurso y un principal.
- Identidad del servicio como recurso: Para conectar una cuenta de servicio como la identidad del servicio, la cuenta del implementador debe tener acceso al recurso de identidad del servicio. Algunas operaciones, como crear o actualizar un servicio o una revisión, requieren que la cuenta del implementador tenga permisos en el recurso de identidad del servicio.
- Identidad del servicio como principal: Para acceder a las APIs de Google Cloud desde un servicio o una revisión de Cloud Run, debes otorgar a la identidad del servicio los roles o los permisos necesarios para las operaciones que deseas que realice el servicio o la revisión.
En la siguiente sección, se abordan los roles necesarios para otorgar a la cuenta de implementador acceso en el recurso de identidad de servicio y otorgar acceso para el principal de la cuenta de servicio.
Roles obligatorios
Tú o tu administrador deben otorgar roles y permisos de IAM para la cuenta del implementador y la identidad del servicio.
Haz clic para ver los roles obligatorios para la cuenta de implementador
Para obtener los permisos que necesitas para conectar una cuenta de servicio como la identidad del servicio en el servicio o revisión, tú o tu administrador deben otorgar a tu cuenta de implementador el rol Usuario de cuenta de servicio rol (roles/iam.serviceAccountUser
) en la cuenta de servicio que se usa como identidad del servicio.
Este rol predefinido contiene el permiso iam.serviceAccounts.actAs
, que se requiere para conectar una cuenta de servicio en el servicio o la revisión. También puedes obtener este permiso si configuras roles personalizados o usas otros roles predefinidos.
Para obtener instrucciones sobre cómo otorgar a la cuenta del implementador este rol en la identidad del servicio, consulta permisos de implementación. Si la cuenta de servicio está en un proyecto diferente del servicio o la revisión de Cloud Run, tú o tu administrador también deben configurar un rol de IAM para el agente de servicio de Cloud Run y establecer una política de la organización. Consulta Usa cuentas de servicio en otros proyectos para obtener más detalles.
Haz clic para ver los roles necesarios para la identidad del servicio
Para permitir que la identidad del servicio acceda a las APIs de Google Cloud desde Cloud Run, tú o tu administrador deben otorgar a la identidad del servicio los permisos o roles que requieren las operaciones que deseas. realizar. Para acceder a bibliotecas cliente de Cloud específicas, consulta la documentación de Google Cloud sobre el servicio de Google Cloud.
Si un servicio o una revisión de Cloud Run no accede a otros servicios de Google Cloud, no necesitas otorgar roles ni permisos a la identidad del servicio y puedes usar la cuenta de servicio predeterminada que se asignó al proyecto.
Obtén recomendaciones para crear cuentas de servicio dedicadas
Cuando creas una cuenta de servicio nueva desde la consola de Google Cloud, el paso opcional “Otorgar a esta cuenta de servicio acceso al proyecto” es para cualquier acceso adicional necesario. Por ejemplo, un servicio de Cloud Run puede invocar otro servicio privado de Cloud Run o acceder a una base de datos de Cloud SQL, las cuales requieren una especificación específica de roles de IAM. Consulta la documentación sobre la administración de acceso para obtener más información.
El servicio de recomendación proporciona de forma automática recomendaciones para crear una cuenta de servicio dedicada con el conjunto mínimo de permisos necesarios.
Configura la identidad del servicio
Si aún no creaste una cuenta de servicio, puedes crear una cuenta de servicio administrada por el usuario en IAM o en Cloud Run.
Para configurar la identidad del servicio, usa la consola de Google Cloud, la CLI de gcloud y la API (YAML) cuando crees un servicio nuevo o implementes un servicio nuevo. Revisión o Terraform:
Console
En la consola de Google Cloud ve a Cloud Run:
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 implementar y editar la nueva revisión.
Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedor, herramientas de redes, seguridad para expandir 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 existente, o haz clic en Crear una cuenta de servicio nueva si corresponde.
Haz clic en Crear o Implementar.
gcloud
Si aún no creaste una cuenta de servicio, puedes crear una cuenta de servicio administrada por el usuario en IAM.
Puedes actualizar un servicio existente para tener una nueva cuenta de servicio 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
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - 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
Si aún no creaste una cuenta de servicio, puedes crear una cuenta de servicio administrada por el usuario en IAM.
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
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,
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para crear una cuenta de servicio, agrega el siguiente recurso a tu archivo main.tf
existente:
Crea o actualiza un servicio de Cloud Run y, luego, incluye tu cuenta de servicio:
Usa cuentas de servicio en otros proyectos
Si configuras una cuenta de servicio de un proyecto de Google Cloud diferente del recurso de Cloud Run, haz lo siguiente:
Tú o tu administrador deben otorgar el rol de usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio que usas como identidad del servicio.Console
Ve a la página Cuentas de servicio de Google Cloud Console.
Selecciona la dirección de correo electrónico de la cuenta de servicio que usas como identidad de servicio.
Haz clic en la pestaña Permisos.
Haz clic en el botón
Otorgar acceso.Ingresa la dirección de correo electrónico de la cuenta de implementador que coincida con la principal a la que le otorgas el rol de administrador o desarrollador.
En el menú desplegable Seleccionar un rol, selecciona la función 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 reemplaza las variables destacadas por los valores adecuados:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="PRINCIPAL" \ --role="roles/iam.serviceAccountUser"
Reemplaza lo siguiente:
SERVICE_ACCOUNT_NAME
: El nombre de la cuenta de servicio a la que conectas el recurso de Cloud Run.SERVICE_ACCOUNT_PROJECT_ID
: El ID del proyecto en el que se encuentra la cuenta de servicioPRINCIPAL por la cuenta del implementador a la que agregas la vinculación, mediante 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 deben otorgar al agente de servicio del recurso de Cloud Run el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) en la cuenta de servicio que usas como identidad del servicio. El agente de servicio sigue el formato deservice-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.Console
Ve a la página Cuentas de servicio de Google Cloud Console.
Selecciona la dirección de correo electrónico de la cuenta de servicio que usas como identidad de servicio.
Haz clic en la pestaña Permisos.
Haz clic en el botón
Otorgar acceso.Ingresa la dirección de correo electrónico 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 cuentas 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"
Reemplaza los siguientes valores:
SERVICE_ACCOUNT_NAME
: El nombre de la cuenta de servicio a la que conectas el recurso de Cloud Run.SERVICE_ACCOUNT_PROJECT_ID
: El ID del proyecto en el que se encuentra la cuenta de servicioCLOUD_RUN_RESOURCE_PROJECT_NUMBER
: El número del proyecto en el que se encuentra Cloud Run.
El comando imprime la política de permisos actualizada para la cuenta de servicio administrada por el usuario.
El proyecto que contiene esta cuenta de servicio requiere que la política de la organización
iam.disableCrossProjectServiceAccountUsage
se establezca como falsa o no se aplique a nivel de carpeta o se herede de la configuración a nivel de proyecto. El valor predeterminado es detrue
.Console
Ve a la página Políticas de la organización en la consola de Google Cloud.
En el selector de proyectos, selecciona la organización y el proyecto para los que deseas inhabilitar el uso de la cuenta de servicio entre proyectos.
Selecciona la política Inhabilitar el uso de cuentas de servicio entre proyectos.
Haz clic en Administrar política.
En Fuente de la política, selecciona Anular la política del publicador superior.
Haz clic en Agregar una regla.
En Aplicación forzosa, selecciona Desactivada.
Para aplicar la política, haz clic en Configurar política.
gcloud
En el proyecto que tiene la cuenta de servicio, asegúrate de que no se aplique la restricción de la política de la organización
iam.disableCrossProjectServiceAccountUsage
. Esta restricción se aplica de forma predeterminada.Para inhabilitar esta restricción de política de la organización, ejecuta el siguiente comando:
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID
Reemplaza SERVICE_ACCOUNT_PROJECT_ID por el ID del proyecto que contiene la cuenta de servicio.
Puedes aplicar membresías de roles directamente al recurso de la cuenta de servicio o heredar de niveles superiores en la jerarquía de recursos.
¿Qué sigue?
- Para obtener más información sobre las cuentas de servicio, consulta las guías de cuenta de servicio de IAM y cuenta de servicio administrada por el usuario.
- Si tu servicio o trabajo de Cloud Run accede a las APIs de Google o a los servicios de Google Cloud, debes configurar tu cuenta de servicio como la identidad del servicio. Obtener más información.