En esta página se describe cómo enrutar entradas de registro creando receptores configurados con cuentas de servicio gestionadas 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 gestionar tu propia cuenta de servicio gestionada por el usuario, lo que te permite gestionar de forma centralizada los permisos de gestión de identidades y accesos desde el proyecto que contiene tu cuenta de servicio gestionada por el usuario.
Solo puedes crear un receptor que use una cuenta de servicio gestionada por el usuario cuando el destino del receptor sea un contenedor de registro o un Google Cloud proyecto. En el ejemplo de este documento se muestra cómo configurar un receptor que usa una cuenta de servicio gestionada por el usuario en la que el destino es un bucket de registro.
Antes de empezar
-
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 gestionada por el usuario y, a continuación, asigna los valores adecuados a las siguientes variables de tu cuenta de servicio gestionada por el usuario:
CUSTOM_SA_PROJECT_ID: El ID del proyecto que contiene tu cuenta de servicio gestionada por el usuario.
CUSTOM_SA: la dirección de correo de tu cuenta de servicio gestionada por el usuario.
Para obtener información sobre cómo crear una cuenta de servicio, consulta el artículo Crear cuentas de servicio.
Asegúrate de tener un contenedor de registro que pueda servir como destino de un receptor de registro y, a continuación, asigna a las siguientes variables los valores que correspondan a tu contenedor de registro. Si es necesario, crea un segmento de registro:
LOG_BUCKET_PROJECT_ID: El ID del proyecto que contiene tu bucket de registro.
LOCATION: la ubicación de tu contenedor de registros.
BUCKET_NAME: el nombre de tu contenedor de registros.
Identifica el nombre de la cuenta de servicio de Logging que existe en el proyecto en el que tienes previsto crear el receptor de registro y, a continuación, asigna los valores correspondientes a las siguientes variables:
SINK_PROJECT_ID: El ID del proyecto en el que quieres crear el receptor de registro.
LOGGING_SA: la dirección de correo de la cuenta de servicio de registro predeterminada. Para obtener esta dirección, ejecuta el siguiente comando:
gcloud logging settings describe --project=SINK_PROJECT_ID
En la respuesta, la línea que empieza por
loggingServiceAccountId
muestra la dirección de correo de tu cuenta de servicio.
En el proyecto que contiene tu cuenta de servicio gestionada por el usuario, asegúrate de que la restricción booleana de la política de organización
iam.disableCrossProjectServiceAccountUsage
no se haya aplicado. De forma predeterminada, esta restricción se aplica. Para inhabilitar esta restricción y poder adjuntar una cuenta de servicio a un recurso de 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 varios proyectos, consulta el artículo Habilitar la vinculación de cuentas de servicio en varios proyectos.
- PRINCIPAL: identificador de la cuenta principal a la que quieres asignar el rol. Los identificadores principales suelen tener el siguiente formato:
PRINCIPAL-TYPE:ID
. Por ejemplo,user:my-user@example.com
. Para ver una lista completa de los formatos que puede tenerPRINCIPAL
, consulta Identificadores principales. - SINK_NAME: el nombre del sumidero de registros.
Ejecuta el comando
gcloud logging write
:Antes de ejecutar el siguiente comando, haz las sustituciones que se indican a continuación:
- LOG_NAME: el nombre del registro. Por ejemplo, puedes
definir este campo como
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
definir este campo como
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 cómo enrutar entradas de registro a destinos admitidos, consulta el artículo Enrutar registros a destinos admitidos.
Para obtener una descripción general de cómo enruta y almacena Logging tus entradas de registro, consulta el artículo Información general sobre el enrutamiento y el almacenamiento.
Si tienes problemas al usar los receptores para enrutar entradas de registro, consulta el artículo Solucionar problemas de enrutamiento de registros.
Para saber cómo ver las entradas de registro en sus destinos, así como el formato y la organización de las entradas de registro, consulta Ver registros en destinos de receptor.
Otorgar roles de gestión de identidades y accesos
En esta sección se describen los requisitos previos para crear un receptor que use una cuenta de servicio gestionada por el usuario.
Permitir que la cuenta de servicio gestionada por el usuario escriba entradas de registro en el destino del sumidero
Concede a la cuenta de servicio gestionada 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 segmento de registro almacenado en el proyecto llamado LOG_BUCKET_PROJECT_ID.
Para dar los permisos necesarios a la cuenta de servicio gestionada por el usuario, concédele el rol Escritor del segmento de registros (roles/logging.bucketWriter
) en el proyecto que contenga el segmento 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
.
Configurar la suplantación de cuentas de servicio
Configura la cuenta de servicio predeterminada de Cloud Logging, LOGGING_SA, para que pueda suplantar la cuenta de servicio gestionada por el usuario, CUSTOM_SA. La cuenta de servicio predeterminada de Cloud Logging se encuentra en el proyecto Google Cloud en el que quieres crear receptores de registro que usen la cuenta de servicio gestionada por el usuario.
Para configurar la suplantación de identidad de la cuenta de servicio, asigna el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator
) a la cuenta de servicio de Cloud Logging en la cuenta de servicio gestionada 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 identidad de una cuenta de servicio implica dos principales: la cuenta de servicio que no tiene permisos para acceder a un recurso y la cuenta de servicio con privilegios que sí tiene permisos para acceder a un recurso. En este caso, la cuenta de servicio gestionada por el usuario es la cuenta con privilegios, ya que puede escribir entradas de registro en el destino del sumidero, que es un segmento de registro del proyecto llamado LOG_BUCKET_PROJECT_ID. La cuenta de servicio de Logging tiene los privilegios para enrutar entradas de registro.
Para obtener más información sobre el rol Creador de tokens de cuenta de servicio, consulta el artículo Rol Creador de tokens de cuenta de servicio.
Para obtener más información sobre la suplantación de identidad en cuentas de servicio, consulta el artículo Acerca de la suplantación de identidad en cuentas de servicio.
Permitir que el principal ejecute operaciones como la cuenta de servicio gestionada por el usuario
Concede al principal que creará el receptor los permisos que necesita para ejecutar operaciones como la cuenta de servicio gestionada por el usuario.
Para conceder los permisos necesarios, asigna al principal el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en el proyecto Google Cloud que almacena la cuenta de servicio gestionada por el usuario CUSTOM_SA_PROJECT_ID.
Antes de ejecutar el siguiente comando, haz las sustituciones que se indican a continuación:
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, la entidad debe tener el permiso iam.serviceAccounts.actAs
.
Para obtener más información sobre el rol Usuario de cuenta de servicio, consulta el artículo Rol Usuario de cuenta de servicio.
Crear un receptor de registro que use una cuenta de servicio gestionada por el usuario
Para crear un receptor con una cuenta de servicio gestionada por el usuario, ejecuta el comando
gcloud logging sinks create
e incluye la opción --custom-writer-identity
.
Antes de ejecutar el siguiente comando, haz las sustituciones que se indican a continuación:
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
Verificar que el sumidero está enrutando entradas de registro
En esta sección, usará gcloud CLI para escribir y leer una entrada de registro con el fin de verificar que su receptor está enrutando las entradas de registro correctamente.
Para verificar que el receptor está enrutando las entradas de registro correctamente, haz lo siguiente: