En Google Cloud, los agentes de servicio a nivel del proyecto, de la carpeta y de la organización se crean automáticamente a medida que habilitas y usas los servicios deGoogle Cloud . A veces, a estos agentes de servicio también se les otorgan automáticamente roles que les permiten crear recursos y acceder a ellos en tu nombre.
Si es necesario, también puedes solicitar Google Cloud que se creen agentes de servicio a nivel del proyecto, la carpeta y la organización para un servicio antes de usarlo. Solicitar Google Cloud la creación de agentes de servicio te permite otorgarles roles antes de usar un servicio. Si aún no se creó un agente de servicio, no puedes otorgarle roles.
Esta opción es útil si usas una de las siguientes estrategias para administrar tus políticas de permiso:
- Un framework declarativo como Terraform Si tu configuración de Terraform no incluye los roles de los agentes de servicio, esos roles se revocarán cuando apliques la configuración. Si creas agentes de servicio y les otorgas roles en tu configuración de Terraform, te aseguras de que estos roles no se revoquen.
- Un sistema de políticas como código que almacena copias de tus políticas de permiso actuales en un repositorio de código. Si permites que Google Cloud otorgue roles a los agentes de servicio automáticamente, esos roles aparecerán en tu política de permisos real, pero no en la copia almacenada de la política de permisos. Para resolver esta incoherencia, es posible que revoques estos roles de forma incorrecta. Si creas agentes de servicio y les otorgas roles de forma proactiva, puedes ayudar a evitar el desvío entre tu repositorio de código y tus políticas de permiso reales.
Después de activar la creación del agente de servicio, debes otorgarles los roles que suelen recibir automáticamente. De lo contrario, es posible que algunos servicios no funcionen correctamente. Esto se debe a que los agentes de servicio que se crean a pedido del usuario no se les otorgan roles automáticamente.
Antes de comenzar
Habilita las APIs de Resource Manager y Workload Identity.
Roles necesarios para habilitar las APIs
Para habilitar APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.Comprende cómo funcionan los agentes de servicio.
Roles obligatorios
Para obtener los permisos que necesitas para crear agentes de servicio y otorgarles acceso, pídele a tu administrador que te otorgue los siguientes roles de IAM en los proyectos, las carpetas y las organizaciones para los que creas agentes de servicio y a los que les otorgas acceso:
-
Enumera los servicios disponibles y sus extremos:
Visualizador de Service Usage (
roles/serviceusage.serviceUsageViewer) -
Habilita los agentes de servicio:
Administrador de la API de Workload Identity (
roles/workloadidentity.admin) -
Otorga a los agentes de servicio acceso a un proyecto: Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin) -
Otorga a los agentes de servicio acceso a una carpeta: Administrador de carpetas (
roles/resourcemanager.folderAdmin) -
Otorga a los agentes de servicio acceso a proyectos, carpetas y organizaciones:
Administrador de la organización (
roles/resourcemanager.organizationAdmin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para crear agentes de servicio y otorgarles acceso. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para crear agentes de servicio y otorgarles acceso:
-
Enumera los servicios disponibles y sus extremos:
serviceusage.services.list -
Habilita los agentes de servicio:
workloadidentity.serviceAgents.create -
Ver operaciones de larga duración:
workloadidentity.operations.get -
Otorga a los agentes de servicio acceso a un proyecto:
-
resourcemanager.projects.getIamPolicy -
resourcemanager.projects.setIamPolicy
-
-
Otorga a los agentes de servicio acceso a una carpeta:
-
resourcemanager.folders.getIamPolicy -
resourcemanager.folders.setIamPolicy
-
-
Otorga a los agentes de servicio acceso a una organización:
-
resourcemanager.organizations.getIamPolicy -
resourcemanager.organizations.setIamPolicy
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Identifica los agentes de servicio que deseas crear
Para identificar los agentes de servicio que necesitas crear y los recursos para los que debes crearlos, haz lo siguiente:
Haz una lista de los servicios que usas y sus extremos de API. Para ver todos los servicios disponibles y sus extremos, usa uno de los siguientes métodos:
Console
Ve a la página Biblioteca de APIs en la consola de Google Cloud .
El extremo de API es el Nombre del servicio que se indica en la sección Detalles adicionales.
gcloud
El comando
gcloud services listenumera todos los servicios disponibles para un proyecto.Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
-
EXPRESSION: Opcional Es una expresión para filtrar los resultados. Por ejemplo, la siguiente expresión filtra todos los servicios cuyos nombres contienengoogleapis.com, pero nosandbox:name ~ googleapis.com AND name !~ sandbox
Para obtener una lista de expresiones de filtro, consulta
gcloud topic filters. -
LIMIT: Opcional La cantidad máxima de resultados que se mostrarán. El puerto predeterminado esunlimited.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud services list --available --filter='EXPRESSION' --limit=LIMIT
Windows (PowerShell)
gcloud services list --available --filter='EXPRESSION' --limit=LIMIT
Windows (cmd.exe)
gcloud services list --available --filter='EXPRESSION' --limit=LIMIT
La respuesta contiene los nombres y títulos de todos los servicios disponibles. El extremo de API es el valor del campo
NAME.REST
El método
services.listde la API de Service Usage enumera todos los servicios disponibles para un proyecto.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
-
RESOURCE_TYPE: Es el tipo de recurso para el que deseas enumerar los servicios disponibles. Usaprojects,foldersoorganizations. -
RESOURCE_ID: El ID del proyecto, la carpeta o la organización de Google Cloud para el que deseas enumerar los servicios disponibles. Los IDs de proyecto son cadenas alfanuméricas, comomy-project. Los IDs de carpeta y organización son numéricos, como123456789012. -
PAGE_SIZE: Opcional Es la cantidad de servicios que se deben incluir en la respuesta. El valor predeterminado es 50 y el valor máximo es 200. Si la cantidad de servicios es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para consultar la siguiente página de resultados. -
NEXT_PAGE_TOKEN: Opcional Es el token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de servicios comenzará desde el punto en que finalizó la solicitud anterior.
Método HTTP y URL:
GET https://serviceusage.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/services?pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN
Para enviar tu solicitud, expande una de estas opciones:
La respuesta contiene los nombres y títulos de todos los servicios disponibles para el recurso. Si la cantidad de servicios disponibles es mayor que el tamaño de la página, la respuesta también contiene un token de paginación.El extremo de API es el valor del campo
name.-
Para cada extremo de API que usarás, haz una lista de los recursos en los que necesitas crear los agentes de servicio de ese endpoint:
En la página referencia del agente de servicio, busca cada extremo de API para encontrar todos los agentes de servicio de ese endpoint.
Es posible que algunos extremos no tengan agentes de servicio asociados, por lo que puedes omitir la activación de la creación de agente de servicio para estos extremos.
Para cada uno de los agentes de servicio del extremo, usa la dirección de correo electrónico del agente de servicio para determinar dónde debes crear el agente de servicio.
El marcador de posición en la dirección de correo electrónico de un agente de servicio indica dónde debes crear el agente de servicio:
Marcador de posición Dónde crear el agente de servicio PROJECT_NUMBERCada proyecto en el que usarás el servicio FOLDER_NUMBERCada carpeta en la que usarás el servicio ORGANIZATION_NUMBERCada organización en la que usarás el servicio Para cada extremo, registra cada recurso único en el que necesites crear agentes de servicio para ese extremo.
Activa la creación del agente de servicio
Después de saber qué agentes de servicio necesitas crear, puedes pedirle aGoogle Cloud que los cree.
Cuando le pides a Google Cloud que cree agentes de servicio, le proporcionas un servicio y un recurso. Luego, Google Cloud crea todos los agentes de servicio para ese servicio y ese recurso.
Durante este paso, si usas gcloud CLI o la API de REST, también puedes crear una lista de los roles que se deben otorgar a cada agente de servicio. Usarás esta información para otorgar roles a los agentes de servicio. Si usas Terraform, no necesitas hacer un seguimiento manual de los roles requeridos, ya que puedes hacer referencia a los roles de forma programática.
gcloud
Usa el comando gcloud workload-identity service-agents
generate para crear agentes de servicio para cada extremo y recurso que identificaste en Identifica los agentes de servicio que se deben crear.
Cada vez que ejecutes el comando, revisa la respuesta. Para cada rol en la respuesta, registra la dirección de correo electrónico del agente de servicio al que se le debe otorgar el rol. Usarás esta información para otorgar roles a los agentes de servicio.
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
-
ENDPOINT: Es el extremo de la API para la que deseas crear agentes de servicio, por ejemplo,aiplatform.googleapis.com. -
RESOURCE_TYPE: Es el tipo de recurso para el que deseas crear agentes de servicio. Usaproject,folderoorganization. -
RESOURCE_ID: Es el ID numérico del proyecto, la carpeta o la organización para los que deseas crear agentes de servicio. Google CloudPor ejemplo,123456789012.Puedes crear agentes de servicio para un recurso a la vez. Si necesitas crear agentes de servicio para varios recursos, ejecuta el comando una vez para cada recurso.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud workload-identity service-agents generate --service="ENDPOINT" \ --location="global" --RESOURCE_TYPE="RESOURCE_ID"
Windows (PowerShell)
gcloud workload-identity service-agents generate --service="ENDPOINT" ` --location="global" --RESOURCE_TYPE="RESOURCE_ID"
Windows (cmd.exe)
gcloud workload-identity service-agents generate --service="ENDPOINT" ^ --location="global" --RESOURCE_TYPE="RESOURCE_ID"
La respuesta contiene una lista de todos los agentes de servicio que se crearon. Para cada agente de servicio, la respuesta enumera el recurso para el que se creó, la dirección de correo electrónico del agente de servicio, el servicio con el que está asociado y el estado del agente de servicio. Si al agente de servicio se le suele otorgar un rol específico, la respuesta también lo incluye.
El rol que se indica no se otorga automáticamente al agente de servicio. Para cada rol en la respuesta, registra la dirección de correo electrónico del agente de servicio al que se le debe otorgar el rol. Usarás esta información para otorgar roles a los agentes de servicio.
A continuación, se muestra un ejemplo truncado de la respuesta para crear agentes de servicio para aiplatform.googleapis.com.
Provisioned service agents for aiplatform.googleapis.com under projects/123456789012: container: projects/123456789012 principal: serviceAccount:service-123456789012@gcp-sa-aiplatform.iam.gserviceaccount.com role: roles/aiplatform.serviceAgent serviceProducer: aiplatform.googleapis.com state: ACTIVE ---- container: projects/123456789012 principal: serviceAccount:service-123456789012@gcp-ri-aiplatform.iam.gserviceaccount.com serviceProducer: aiplatform.googleapis.com state: ACTIVE ---- ... ---- container: projects/123456789012 principal: serviceAccount:service-123456789012@gcp-sa-vertex-vtc.iam.gserviceaccount.com role: roles/aiplatform.trainingClusterServiceAgent serviceProducer: aiplatform.googleapis.com state: ACTIVE ----
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 obtener más información, consulta la documentación de referencia del proveedor de Terraform.
Usa el recurso google_workload_identity_service_agent para activar la creación de agentes de servicio para cada extremo y recurso que identificaste en Identifica los agentes de servicio que deseas crear.
Por ejemplo, si deseas crear todos los agentes de servicio a nivel del proyecto para BigQuery en el proyecto predeterminado, puedes agregar el siguiente código a tu configuración de Terraform:
REST
Sigue estos pasos para cada extremo en el que necesites crear agentes de servicio:
Crea agentes de servicio para cada recurso que identificaste en Identifica los agentes de servicio que deseas crear:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
-
RESOURCE_TYPE: Es el tipo de recurso para el que deseas crear agentes de servicio. Usaprojects,foldersoorganizations. -
RESOURCE_NUMERIC_ID: Es el ID numérico del Google Cloud proyecto, la carpeta o la organización para los que deseas crear agentes de servicio. Por ejemplo,123456789012.Puedes crear agentes de servicio para un recurso a la vez. Si necesitas crear agentes de servicio para varios recursos, envía una solicitud para cada recurso.
-
ENDPOINT: Es el extremo de la API para la que deseas crear un agente de servicio, por ejemplo,aiplatform.googleapis.com.
-