Configurar receptores de registros con cuentas de servicio gestionadas por el usuario

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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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:

    • 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 tener PRINCIPAL, consulta Identificadores principales.

    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:

    • SINK_NAME: el nombre del sumidero de registros.

    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:

    1. 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.

    2. 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
      

    Siguientes pasos