En esta página, se describe cómo enrutar registros mediante la creación de receptores configurados con cuentas de servicio administradas por el usuario. De forma predeterminada, Logging usa una cuenta de servicio de Logging para todos los receptores en un recurso. Sin embargo, si tus receptores de registros están en proyectos diferentes, puedes crear y administrar tu propia cuenta de servicio administrada por el usuario, lo que te permite administrar de forma centralizada los permisos de Identity and Access Management desde el proyecto que contiene tu cuenta de servicio administrada por el usuario.
Solo puedes crear un receptor que use una cuenta de servicio administrada por el usuario cuando el destino del receptor es un bucket de registros o un proyecto de Google Cloud. En el ejemplo de este documento, se muestra cómo configurar un receptor que usa una cuenta de servicio administrada por el usuario en la que el destino es un bucket de registros.
Antes de comenzar
Para usar los ejemplos de línea de comandos de esta guía, instala y configura Google Cloud CLI.
Asegúrate de tener una cuenta de servicio administrada por el usuario. Para obtener información sobre cómo crear una cuenta de servicio, consulta Crea cuentas de servicio.
Para utilizar los comandos de este documento, identifica los siguientes valores:
DESTINATION_PROJECT_ID: Es el ID del proyecto que contiene tu bucket de registros.
CUSTOM_SA_PROJECT_ID: Es el ID del proyecto que contiene tu cuenta de servicio administrada por el usuario.
SINK_PROJECT_ID: El ID del proyecto en el que planeas crear el receptor de registros
CUSTOM_SA: Es la cuenta de servicio administrada por el usuario. Si quieres obtener información para crear cuentas de servicio, consulta Cómo crear cuentas de servicio.
El formato de una cuenta de servicio administrada por el usuario es similar al siguiente:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
LOGGING_SA: Es la cuenta de servicio de Logging predeterminada. Para recibir este correo electrónico, ejecuta el siguiente comando:
gcloud logging settings describe --project=SINK_PROJECT_ID
El resultado incluye la siguiente información sobre la cuenta de servicio:
loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
BUCKET_NAME: Es el nombre de tu bucket de registros.
La ruta de destino del receptor de un bucket de registros se ve de la siguiente manera:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
En el proyecto que contiene tu cuenta de servicio administrada por el usuario, asegúrate de que no se aplique la restricción booleana de la política de la organización
iam.disableCrossProjectServiceAccountUsage
. De forma predeterminada, se aplica esta restricción. Para inhabilitar esta restricción a fin de que puedas conectar una cuenta de servicio a un recurso en otro proyecto, ejecuta el siguiente comando:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_ID
Si quieres obtener más información para habilitar cuentas de servicio en todos los proyectos, consulta Habilita cuentas de servicio para que se adjunten en todos los proyectos.
Asigna roles de IAM
En esta sección, se describen los requisitos para crear un receptor que use una cuenta de servicio administrada por el usuario.
En el proyecto que contiene el bucket de registros que es el destino de los receptores de registros, haz lo siguiente:
Otorga el rol de escritor del bucket de registros (
roles/logging.bucketWriter
) a la cuenta de servicio administrada por el usuario. Este rol permite que la cuenta de servicio administrada por el usuario escriba registros en el bucket de registros:gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \ --member="serviceAccount:CUSTOM_SA" \ --role="roles/logging.bucketWriter"
En el proyecto de Google Cloud en el que deseas crear receptores de registros que usen la cuenta de servicio administrada por el usuario, haz lo siguiente:
Otorga la función de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) a la cuenta de servicio de Cloud Logging en la cuenta de servicio administrada por el usuario:gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --project=CUSTOM_SA_PROJECT_ID \ --member="serviceAccount:LOGGING_SA" \ --role="roles/iam.serviceAccountTokenCreator"
El comando anterior permite que la cuenta de servicio de Logging suplante la identidad de la cuenta de servicio administrada por el usuario mediante la función de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
).La suplantación de cuentas de servicio involucra dos principales: la cuenta de servicio que no tiene permisos para acceder a un recurso y la cuenta de servicio con privilegios que tiene los permisos para acceder a un recurso. En este caso, la cuenta de servicio administrada por el usuario es la que tiene privilegios porque tiene la capacidad de escribir registros en un bucket de registros en el proyecto de destino. La cuenta de servicio de Logging tiene los privilegios para enrutar registros.
Para obtener más información sobre la función de creador de tokens de cuenta de servicio, consulta Funciones para administrar y suplantar la identidad de cuentas de servicio: Función de creador de tokens de cuenta de servicio.
Para obtener más información sobre la suplantación de cuentas de servicio, consulta Acerca de la suplantación de cuentas de servicio.
Otorga la función de usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) a la principal que crea los receptores de registros. Específicamente, una principal necesita el permisoiam.serviceAccounts.actAs
en la cuenta de servicio:gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --member 'user:user@example.com' \ --role "roles/iam.serviceAccountUser"
El comando anterior permite que un usuario ejecute operaciones como la cuenta de servicio administrada por el usuario.
Si deseas obtener más información sobre la función de usuario de cuenta de servicio, consulta Funciones para administrar y suplantar la identidad de cuentas de servicio: función de usuario de cuenta de servicio.
Crea un receptor de registros que use una cuenta de servicio administrada por el usuario
gcloud
Para crear un receptor con una cuenta de servicio administrada por el usuario, reemplaza las variables con tu propia información y ejecuta el comando gcloud logging sinks create
con la marca --custom-writer-identity
:
gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
API
Para crear un receptor de registros en tu proyecto de Google Cloud, usa projects.sinks.create en la API de Logging. En el objeto LogSink, pasa el parámetro
customWriterIdentity
y proporciona los valores necesarios adecuados en el cuerpo de la solicitud del método:name
: Un identificador para el receptor. Ten en cuenta que después de crear el receptor, no puedes cambiarle el nombre, pero puedes borrarlo y crear uno nuevo.destination
: El bucket de registros al que deseas que se enruten tus registros. La ruta de destino tiene el siguiente formato:logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
Llama a projects.sinks.create para crear el receptor.
Para obtener más información sobre cómo crear receptores con la API de Logging, consulta la documentación de referencia de LogSink.
Verifica que tu receptor enrute los registros
En esta sección, usarás gcloud CLI para escribir y leer una entrada de registro y verificar que tu receptor enrute los registros de forma correcta.
Para verificar que el receptor enruta los registros de forma correcta, haz lo siguiente:
Reemplaza las variables con tu propia información y escribe una entrada de registro de muestra con el comando
gcloud logging write
:gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
El comando anterior muestra el siguiente mensaje:
Created log entry.
Para leer la entrada de registro que acabas de escribir, ejecuta el siguiente comando:
gcloud logging read 'textPayload="Test log entry"' \ --bucket=BUCKET_NAME --location=LOCATION \ --view=_AllLogs --project=SINK_PROJECT_ID
¿Qué sigue?
Para obtener más información sobre cómo enrutar tus registros a destinos compatibles, consulta Cómo enrutar registros a destinos compatibles.
Para obtener una descripción general sobre cómo Logging enruta y almacena tus registros, consulta Descripción general del enrutamiento y el almacenamiento.
Si tienes problemas cuando usas receptores para enrutar registros, consulta Soluciona problemas de registros de enrutamiento.
Para aprender a ver tus registros enrutados en sus destinos, además de cómo se formatean y organizan los registros, consulta Visualiza registros en destinos de receptores.