En esta página, se describe cómo enrutar entradas de registro creando 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 de 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 sea un bucket de registros o un proyecto Google Cloud . En el ejemplo de este documento, se ilustra 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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Asegúrate de tener una cuenta de servicio administrada por el usuario y, luego, establece las siguientes variables en los valores adecuados para tu cuenta de servicio administrada por el usuario:
CUSTOM_SA_PROJECT_ID: Es el ID del proyecto que contiene tu cuenta de servicio administrada por el usuario.
CUSTOM_SA: La dirección de correo electrónico de tu cuenta de servicio administrada por el usuario.
Para obtener información sobre cómo crear una cuenta de servicio, consulta Crea cuentas de servicio.
Asegúrate de tener un bucket de registros que pueda servir como destino de un receptor de registros y, luego, establece las siguientes variables en valores adecuados para tu bucket de registros. Si es necesario, crea un bucket de registros:
LOG_BUCKET_PROJECT_ID: ID del proyecto que contiene tu bucket de registros.
LOCATION: Es la ubicación de tu bucket de registros.
BUCKET_NAME: Es el nombre de tu bucket de registros.
Identifica el nombre de la cuenta de servicio de Logging que existe en el proyecto en el que planeas crear el receptor de registros y, luego, establece las siguientes variables en sus valores correspondientes:
SINK_PROJECT_ID: Es el ID del proyecto en el que planeas crear el receptor de registros.
LOGGING_SA: Es la dirección de correo electrónico de la cuenta de servicio predeterminada de Logging. Para obtener esta dirección, ejecuta el siguiente comando:
gcloud logging settings describe --project=SINK_PROJECT_ID
En la respuesta, la línea que comienza con
loggingServiceAccountId
enumera la dirección de correo electrónico de tu cuenta de servicio.
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, esta restricción se aplica. Para inhabilitar esta restricción y poder 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
Para obtener más información sobre cómo habilitar cuentas de servicio en todos los proyectos, consulta Habilita cuentas de servicio para conectarlas entre proyectos.
- PRINCIPAL: Es un identificador de la principal a la que deseas otorgar el rol. Los identificadores principales suelen tener el siguiente formato:
PRINCIPAL-TYPE:ID
. Por ejemplo,user:my-user@example.com
. Para obtener una lista completa de los formatos que puede tenerPRINCIPAL
, consulta Identificadores de principal. - SINK_NAME: Es el nombre del receptor de registros.
Ejecuta el comando
gcloud logging write
:Antes de ejecutar el siguiente comando, realiza los siguientes reemplazos:
- LOG_NAME: El nombre del registro. Por ejemplo, puedes establecer este campo en
mylog
.
Ejecuta el comando
gcloud logging write
:gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
El comando anterior devuelve el siguiente mensaje:
Created log entry.
- LOG_NAME: El nombre del registro. Por ejemplo, puedes establecer este campo en
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
Para obtener información sobre el enrutamiento de entradas de registro a destinos compatibles, consulta Enruta registros a destinos compatibles.
Para obtener una descripción general sobre cómo Logging enruta y almacena tus entradas de registro, consulta Descripción general del enrutamiento y el almacenamiento.
Si tienes problemas cuando usas receptores para enrutar entradas de registro, consulta Soluciona problemas de enrutamiento de registros.
Para obtener información sobre cómo ver tus entradas de registro en sus destinos, así como sobre cómo se les da formato y se organizan, consulta Visualiza los registros en los destinos de los receptores.
Asigna roles de IAM
En esta sección, se describen los requisitos previos para crear un receptor que use una cuenta de servicio administrada por el usuario.
Permite que la cuenta de servicio administrada por el usuario escriba entradas de registro en el destino del receptor
Otorga a la cuenta de servicio administrada por el usuario los permisos que necesita para escribir entradas de registro en el destino del receptor que crearás en un paso posterior. El destino del receptor será un bucket de registros almacenado en el proyecto llamado LOG_BUCKET_PROJECT_ID.
Para otorgar los permisos necesarios a la cuenta de servicio administrada por el usuario, otórgale el rol de escritor del bucket de registros (roles/logging.bucketWriter
) en el proyecto que contiene el bucket de registros:
gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'
Para obtener más información sobre el comando anterior, consulta gcloud projects add-iam-policy-binding
.
Configura la identidad temporal como cuenta de servicio
Configura la cuenta de servicio predeterminada de Cloud Logging, LOGGING_SA, para que pueda suplantar la identidad de la cuenta de servicio administrada por el usuario, CUSTOM_SA. La cuenta de servicio predeterminada de Cloud Logging existe en el proyecto Google Cloud en el que deseas crear receptores de registros que usen la cuenta de servicio administrada por el usuario.
Para configurar la suplantación de identidad de la cuenta de servicio, otorga el rol 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'
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 cuenta con privilegios porque tiene la capacidad de escribir entradas de registro en el destino del receptor, que es un bucket de registros en el proyecto llamado LOG_BUCKET_PROJECT_ID. La cuenta de servicio de Logging tiene privilegios para enrutar entradas de registro.
Para obtener más información sobre el rol de creador de tokens de cuenta de servicio, consulta Rol de creador de tokens de cuenta de servicio.
Para obtener más información sobre la identidad temporal como cuenta de servicio, consulta Acerca de la identidad temporal como cuenta de servicio.
Permite que la principal ejecute operaciones como la cuenta de servicio administrada por el usuario
Otorga a la principal que creará el receptor los permisos que necesita para ejecutar operaciones como la cuenta de servicio administrada por el usuario.
Para otorgar los permisos necesarios, otorga a la principal el rol de usuario de la cuenta de servicio (roles/iam.serviceAccountUser
) en el proyecto Google Cloud que almacena la cuenta de servicio administrada por el usuario, CUSTOM_SA_PROJECT_ID.
Antes de ejecutar el siguiente comando, realiza los siguientes reemplazos:
Ejecuta el comando gcloud iam service-accounts add-iam-policy-binding
:
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'
Si usas roles personalizados, el principal necesita el permiso iam.serviceAccounts.actAs
.
Para obtener más información sobre el rol de usuario de cuenta de servicio, consulta Rol de usuario de cuenta de servicio.
Crea un receptor de registros que use una cuenta de servicio administrada por el usuario
Para crear un receptor con una cuenta de servicio administrada por el usuario, ejecuta el comando gcloud logging sinks create
y, luego, incluye la opción --custom-writer-identity
.
Antes de ejecutar el siguiente comando, realiza los siguientes reemplazos:
Ejecuta el comando gcloud logging sinks create
:
gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
Verifica que tu receptor esté enrutando las entradas de registro
En esta sección, usarás gcloud CLI para escribir y leer una entrada de registro y verificar que tu receptor esté enrutando las entradas de registro correctamente.
Para verificar que tu receptor enrute las entradas de registro correctamente, haz lo siguiente: