Autorizar al agente de Logging

En esta guía, se explica cómo asegurarte de que el agente de Logging, que instalas en tu instancia de máquina virtual (VM), esté autorizado para enviar datos de telemetría a Google Cloud Observability.

Descripción general de la autorización

La autorización hace referencia al proceso de determinar los permisos que un cliente autenticado tiene para los recursos. Google Cloud autoriza al agente de Logging en una instancia de VM de Compute Engine a través de las credenciales predeterminadas de la aplicación (ADC).

El agente de Logging admite ADC que autentican la cuenta de servicio conectada de una VM o una clave de cuenta de servicio.

  • Una cuenta de servicio conectada hace referencia a una cuenta de servicio específica de un recurso determinado, como una VM. La cuenta de servicio tiene sus propias credenciales únicas. ADC usa el servidor de metadatos de la VM para obtener credenciales para un servicio.
  • Una clave de cuenta de servicio hace referencia a una clave privada que se usa para autorizar el par de claves en una cuenta de servicio en un proyecto, lo que te permite crear un token de acceso. Usa el token para proporcionar una identidad para poder interactuar con las APIs de Google Cloud en nombre de la cuenta de servicio.

Te recomendamos que configures las ADC para autenticar una cuenta de servicio conectada siempre que sea posible, ya que la clave privada requiere almacenamiento local y ese almacenamiento se puede comprometer. Si deseas obtener más información sobre las claves de cuentas de servicio, consulta Prácticas recomendadas para administrar claves de cuentas de servicio.

Para las instancias de VM de AWS EC2, el agente de Logging solo admite la autenticación mediante el método de claves de la cuenta de servicio.

Antes de comenzar

Lee esta página si te encuentras en alguna de las siguientes situaciones:

  • Si ejecutas instancias de Compute Engine muy antiguas o si modificaste los permisos de acceso o la configuración de la cuenta de servicio de tus instancias de Compute Engine, debes completar los pasos de esta guía antes de instalar el agente. Es posible que estas VMs no tengan el archivo de claves de la cuenta de servicio requerido. Para obtener información sobre cómo verificar los permisos de acceso y la configuración de la cuenta de servicio de tus instancias, consulta Verifica las credenciales de Compute Engine.

    En las instancias de VM de Compute Engine recién creadas, los niveles de acceso y la configuración de la cuenta de servicio son suficientes para ejecutar los agentes.

  • Si ejecutas instancias de VM de Amazon EC2 (AWS VC2), haz lo siguiente antes de instalar el agente:

    1. Identifica el proyecto de hosting de AWS para la cuenta de AWS con tus instancias de EC2. El proyecto de hosting es un proyecto de Google Cloud cuyo único propósito es almacenar las métricas y los registros de las instancias de EC2 en una cuenta de AWS.

      Si no puedes encontrar un proyecto de hosting de AWS para la cuenta, te recomendamos que crees un proyecto de Google Cloud que funcione como proyecto de hosting. Si tienes instancias de EC2 en varias cuentas de AWS, crea un proyecto de Google Cloud para cada cuenta. También te recomendamos que uses una convención de nombres para estos proyectos o que uses etiquetas de proyecto a fin de que puedas identificar tus proyectos host. No te recomendamos que vuelvas a usar un proyecto existente de Google Cloud, en especial si contiene recursos de Google Cloud.

    2. Completa los pasos para autorizar al agente a través de un archivo de claves de cuenta de servicio.

Para verificar tus permisos de acceso, haz lo siguiente:

  1. Ejecuta el siguiente comando en tu instancia de Compute Engine para consultar los permisos de acceso:
    curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
  2. En el resultado del comando, si el permiso de acceso https://www.googleapis.com/auth/cloud-platform aparece en la lista, entonces tienes suficiente autorización.

    Si https://www.googleapis.com/auth/cloud-platform no aparece en la lista, necesitas dos permisos de acceso, uno de cada uno de los siguientes pares de “registro” y “supervisión”:

    • https://www.googleapis.com/auth/logging.write o
      https://www.googleapis.com/auth/logging.admin
    • https://www.googleapis.com/auth/monitoring.write o
      https://www.googleapis.com/auth/monitoring.admin

Para modificar tus permisos de acceso, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Compute Engine.

  2. Si es necesario, haz clic en la lista desplegable de proyectos de Google Cloud y selecciona el nombre de tu proyecto.
  3. Selecciona Instancias de VM en el menú de navegación, selecciona la pestaña Instancias y, luego, el nombre de tu VM.
  4. Haz clic en  Detener para apagar la VM.
  5. Después de que la VM se detenga, haz clic en  Editar.
  6. Ubica los permisos de acceso en la sección Identidad y acceso a la API de la página y, luego, selecciona Configurar acceso para cada API.
  7. Para las entradas API de Stackdriver Logging y API de Stackdriver Monitoring, selecciona Solo escritura.
  8. Haz clic en Guardar y, luego, haz clic en  Iniciar/Reanudar para reiniciar la VM.

Usa una cuenta de servicio

La autenticación hace referencia al proceso de determinar la identidad de un cliente. Para la autenticación, te recomendamos usar una cuenta de servicio, un tipo especial de cuenta que suele usar una aplicación o una carga de trabajo, en lugar de una persona. Para obtener más información, consulta Descripción general de cuentas de servicio.

Puedes usar cuentas de servicio para la autenticación sin importar dónde se ejecute tu código: en Compute Engine, App Engine o de forma local. Para obtener más información, consulta Autenticación en Google.

En esta sección, se describe cómo crear una cuenta de servicio nueva y otorgarle los roles necesarios, y cómo actualizar una cuenta de servicio existente si no tiene los roles necesarios.

Crea una cuenta de servicio

Para crear una cuenta de servicio, completa los procedimientos que se indican en Crea una cuenta de servicio con la siguiente información:

  • Selecciona el proyecto de Google Cloud en el que deseas crear la cuenta de servicio:

    • Para las instancias de Compute Engine, elige el proyecto en el que creaste la instancia.

    • Para las instancias de Amazon EC2, elige el proyecto de hosting de AWS.

  • En el menú desplegable Función, selecciona las siguientes funciones:

    • Logging > Escritor de registros. Esto autoriza al agente de Logging a transferir registros.
    • Monitoring > Escritor de métricas de Monitoring. Esto autoriza al agente de Logging a transferir sus propias métricas de estado.
  • Si planeas autenticarte con una clave de cuenta de servicio, selecciona JSON como tipo de clave y haz clic en Crear.

    Cuando haces clic en Crear, se descarga un archivo que contiene una clave de cuenta de servicio a tu sistema local. Para obtener más información, consulta Crea y borra claves de cuentas de servicio.

A continuación, establece la configuración y la cuenta de servicio según si lo autorizas a través de cuentas de servicio conectadas o a través de claves privadas de cuenta de servicio.

Verifica y modifica roles de una cuenta de servicio existente

Puedes usar la consola de Google Cloud para determinar qué roles tiene una cuenta de servicio existente y agregar las funciones necesarias que faltan:

  1. En la consola de Google Cloud, ve a la página IAM:

    Ir a IAM

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es IAM y administración.

  2. Si es necesario, haz clic en la lista desplegable de proyectos de Google Cloud y selecciona el nombre de tu proyecto.

  3. Si no ves una lista de principales de IAM (usuarios y cuentas de servicio), selecciona la pestaña Permisos.

  4. En la lista Ver por principales, busca la entrada de la cuenta de servicio. En la columna Rol, se enumeran los roles otorgados a la cuenta de servicio.

  5. Si tu cuenta de servicio no tiene los roles necesarios para el agente de Logging, sigue estos pasos para agregar los roles que se describen en Crea una cuenta de servicio:

    1. Haz clic en  Editar en la entrada de la cuenta de servicio.
    2. Haz clic en Agregar otro rol para agregar los roles faltantes.
    3. Haz clic en Guardar.

Autoriza con una cuenta de servicio conectada

Para autorizar el agente de Logging instalado en una instancia de VM de Compute Engine que tenga una cuenta de servicio conectada, haz lo siguiente:

  1. Asegúrate de haber verificado los permisos de acceso de tu VM.

  2. Otorga a tu cuenta de servicio los roles de IAM con privilegios mínimos posibles. Para obtener los roles necesarios, consulta la sección Crea una cuenta de servicio de esta página.

  3. Conecta la cuenta de servicio a la VM en la que se ejecuta el agente.

  4. Si aún no lo instalaste, hazlo. Para obtener información sobre cómo instalar el agente, consulta Instala el agente.

Autoriza con una clave de cuenta de servicio

Para autorizar el agente de Logging instalado en una instancia de VM con claves privadas de cuentas de servicio, haz lo siguiente:

  1. Transfiere el archivo de claves de la cuenta de servicio de tu sistema local a tu instancia de VM:

    1. Crea una variable de entorno para que apunte al archivo de claves de la cuenta de servicio en tu sistema local. En el siguiente ejemplo, se crea una variable llamada CREDS:

      CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
      
    2. Completa los pasos que se muestran en la siguiente tabla:

      Compute Engine

      1. En la consola de Google Cloud, ve a la página Instancias de VM.

        Ir a Instancias de VM

        Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Compute Engine.

        Identifica INSTANCE_NAME y INSTANCE_ZONE para la VM.

      2. En tu sistema local, ejecuta un comando de Google Cloud CLI para copiar el archivo de claves del sistema local a la instancia de VM:

        REMOTE_USER="$USER"
        INSTANCE="INSTANCE_NAME"
        ZONE="INSTANCE_ZONE"
        gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
        
      3. En tu instancia de Compute Engine, transfiere el archivo de claves de la cuenta de servicio de la ubicación temporal a una permanente y, para Linux, asegúrate de que el archivo de claves de la cuenta de servicio sea legible solo para root.

        Estas son las ubicaciones en las que el agente espera tu archivo de claves:

        • VMs de Linux: /etc/google/auth/application_default_credentials.json
        • VMs de Windows: C:\ProgramData\Google\Auth\application_default_credentials.json
        • VMs de Linux y Windows: cualquier ubicación que almacenes en la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que debe ser visible para el proceso del agente. Para obtener información sobre la configuración, consulta Configura GOOGLE_APPLICATION_CREDENTIALS.

        Por ejemplo, en Linux puedes ejecutar la siguiente secuencia de comandos, que traslada el archivo de claves de la cuenta de servicio a la ubicación predeterminada y, luego, configura los permisos adecuados:

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

      Amazon EC2

      1. Para tu VM, identifica YOUR-INSTANCE'S-ID y YOUR-INSTANCE'S-AWS-REGION.

      2. En tu sistema local, usa scp para copiar el archivo de claves de la cuenta de servicio de tu sistema local a tu instancia de VM:

        KEY="YOUR-SSH-KEY-PAIR-FILE"
        INSTANCE="ec2-YOUR-INSTANCE'S-ID.YOUR-INSTANCE'S-AWS-REGION.compute.amazonaws.com"
        # The remote user depends on the installed OS: ec2-user, ubuntu, root, etc.
        REMOTE_USER="EC2-USER"
        scp -i "$KEY" "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json"
        

        El valor de la variable de entorno INSTANCE supone que tu instancia de EC2 no está en la región us-east-1. Para aprender a definir la variable INSTANCE cuando tu instancia está en la región us-east-1, consulta la convención de nombres definida por Amazon.

      3. En tu instancia de EC2, mueve el archivo de claves de la cuenta de servicio de la ubicación temporal a una de las siguientes ubicaciones y, para Linux, asegúrate de que el archivo de claves de la cuenta de servicio sea legible solo para root.

        Estas son las ubicaciones en las que el agente espera tu archivo de claves:

        • VMs de Linux: /etc/google/auth/application_default_credentials.json

        • VMs de Windows: C:\ProgramData\Google\Auth\application_default_credentials.json

        • VMs de Linux y Windows: cualquier ubicación que almacenes en la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que debe ser visible para el proceso del agente. Para obtener información sobre la configuración, consulta Configura GOOGLE_APPLICATION_CREDENTIALS.

        Por ejemplo, en Linux puedes ejecutar la siguiente secuencia de comandos, que traslada el archivo de claves de la cuenta de servicio a la ubicación predeterminada y, luego, configura los permisos adecuados:

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

  2. Tu instancia de VM ahora tiene el archivo de claves de la cuenta de servicio que necesita el agente. A continuación, instala o reinicia el agente:

Configura GOOGLE_APPLICATION_CREDENTIALS

En esta sección, se muestra cómo configurar la variable de entorno GOOGLE_APPLICATION_CREDENTIALS para que sea visible para el proceso del agente.

Linux

  1. Edita el siguiente archivo de configuración o créalo si no existe:

    /etc/default/google-fluentd
    
  2. Agrega lo siguiente al archivo de configuración:

    GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
    
  3. Ejecuta el siguiente comando en tu instancia de VM para reiniciar el agente:

    sudo service google-fluentd restart
    

Windows

  1. En PowerShell, ejecuta los siguientes comandos como administrador para configurar la variable de entorno del sistema GOOGLE_APPLICATION_CREDENTIALS para que la use el Agente de operaciones.

    [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
    
  2. Ejecuta el siguiente comando en tu instancia de VM para reiniciar el agente:

    Restart-Service -Name StackdriverLogging