Autorizar el agente de Monitoring

En esta guía se explica cómo asegurarse de que el agente de Monitoring, que se instala en la instancia de máquina virtual, tenga autorización para enviar datos de telemetría a Google Cloud Observability.

Descripción general de la autorización

La autorización es el proceso para determinar qué permisos tiene un cliente autenticado para un conjunto de recursos. Google Cloud autorizaal agente de Monitoring en una instancia de VM de Compute Engine mediante las credenciales predeterminadas de la aplicación (ADC).

El agente de Monitoring admite ADC que autentica la cuenta de servicio vinculada a una VM o una clave de cuenta de servicio.

  • Una cuenta de servicio adjunta es una cuenta de servicio específica de un recurso determinado, como una máquina virtual. La cuenta de servicio tiene sus propias credenciales únicas. ADC usa el servidor de metadatos de la VM para obtener las credenciales de un servicio.
  • Una clave de cuenta de servicio es una clave privada que se usa para autorizar el par de claves de una cuenta de servicio de un proyecto, lo que te permite crear un token de acceso. Usas el token para proporcionar una identidad que te permita interactuar con las APIs de Google Cloud en nombre de la cuenta de servicio.

Te recomendamos que configures ADC para que se autentique mediante una cuenta de servicio adjunta siempre que sea posible, ya que la clave privada requiere almacenamiento local y ese almacenamiento se puede poner en peligro. Para obtener más información sobre las claves de cuentas de servicio, consulta las prácticas recomendadas para gestionar las claves de cuentas de servicio.

En el caso de las instancias de VM de AWS EC2, el agente de monitorización solo admite la autenticación mediante el método de clave de cuenta de servicio.

Antes de empezar

Lee esta guía si se da alguna de las siguientes situaciones:

  • Si estás ejecutando instancias de Compute Engine muy antiguas o has modificado los ámbitos 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 clave de cuenta de servicio necesario. Para obtener información sobre cómo verificar los ámbitos de acceso y la configuración de la cuenta de servicio de tus instancias, consulta Verificar las credenciales de Compute Engine.

    En las instancias de VM de Compute Engine recién creadas, los ámbitos 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 alojamiento de AWS de la cuenta de AWS con tus instancias de EC2. El proyecto de alojamiento es un Google Cloud proyecto cuyo único propósito es almacenar las métricas y los registros de las instancias de EC2 de una cuenta de AWS.

      Si no encuentras ningún proyecto de alojamiento de AWS para la cuenta, te recomendamos que crees un Google Cloud proyecto que sirva como proyecto de alojamiento. Si tienes instancias EC2 en varias cuentas de AWS, crea un Google Cloud proyecto para cada cuenta. También te recomendamos que uses una convención de nomenclatura para estos proyectos o que utilices etiquetas de proyecto para poder identificar tus proyectos de alojamiento. No te recomendamos que reutilices un proyecto deGoogle Cloud , sobre todo si contiene recursos de Google Cloud .

    2. Completa los pasos para autorizar al agente mediante un archivo de clave de cuenta de servicio.

Para verificar tus ámbitos de acceso, sigue estos pasos:

  1. Consulta los ámbitos de acceso ejecutando el siguiente comando en tu instancia de Compute Engine:
    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 se muestra el ámbito de acceso https://www.googleapis.com/auth/cloud-platform, significa que tienes autorización suficiente.

    Si https://www.googleapis.com/auth/cloud-platform no aparece en la lista, necesitas dos ámbitos de acceso, uno de cada uno de los siguientes pares "logging" y "monitoring":

    • 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 ámbitos de acceso, sigue estos pasos:

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

    Ve a Instancias de VM.

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

  2. Si es necesario, haz clic en la lista desplegable de Google Cloud proyectos y selecciona el nombre del proyecto.
  3. En el menú de navegación, selecciona Instancias de VM, la pestaña Instancias y, a continuación, el nombre de tu VM.
  4. Cierra la VM haciendo clic en  Detener.
  5. Cuando la VM se detenga, haz clic en  Editar.
  6. Busca la sección Permisos de acceso en Identidad y acceso de API de la página y, a continuación, selecciona Definir acceso para cada API.
  7. En las entradas de API Stackdriver Logging y API Stackdriver Monitoring, selecciona Solo escritura.
  8. Haga clic en Guardar y, a continuación, reinicie la VM haciendo clic en  Iniciar/Reanudar.

Usar una cuenta de servicio

La autenticación es el proceso para determinar la identidad de un cliente. Para la autenticación, te recomendamos que utilices una cuenta de servicio, un tipo especial de cuenta que suelen usar las aplicaciones o las cargas de trabajo, en lugar de una persona. Para obtener más información, consulta el artículo Resumen de las cuentas de servicio.

Puedes usar cuentas de servicio para la autenticación independientemente de dónde se ejecute tu código: en Compute Engine, App Engine o en un entorno local. Para obtener más información, consulta el artículo Autenticación en Google.

En esta sección se describe cómo crear una cuenta de servicio, asignarle los roles necesarios y actualizar una cuenta de servicio que ya tengas si no tiene los roles necesarios.

Crear una cuenta de servicio

Para crear una cuenta de servicio, sigue los pasos que se indican en el artículo Crear una cuenta de servicio con la siguiente información:

  • Selecciona el Google Cloud proyecto en el que quieras crear la cuenta de servicio.

    • En el caso de las instancias de Compute Engine, elige el proyecto en el que hayas creado la instancia.

    • En el caso de las instancias de Amazon EC2, selecciona el proyecto de alojamiento de AWS.

  • En el menú desplegable Rol, selecciona los siguientes roles:

    • Monitorización > Editor de las métricas de monitorización. De esta forma, se autoriza al agente de Monitoring.

    Si también vas a instalar el agente de Logging, añade el siguiente rol para ese agente:

    • Logging > Escritor de registros. De esta forma, se autoriza al agente de Logging.
  • Si tienes previsto autenticarte con una clave de cuenta de servicio, selecciona JSON como Tipo de clave y haz clic en Crear.

    Cuando hagas clic en Crear, se descargará en tu sistema local un archivo que contiene una clave de cuenta de servicio. Para obtener más información, consulta el artículo Crear y eliminar claves de cuentas de servicio.

A continuación, configura tu cuenta de servicio y los ajustes en función de si autorizas el acceso mediante cuentas de servicio asociadas o mediante claves privadas de cuentas de servicio.

Verificar y modificar los roles de una cuenta de servicio

Puedes usar la Google Cloud consola para determinar qué roles tiene una cuenta de servicio y añadir los que falten:

  1. En la Google Cloud consola, ve a la página Gestión de identidades y accesos:

    Ve a Gestión de identidades y accesos.

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

  2. Si es necesario, haz clic en la lista desplegable de Google Cloud proyectos 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 muestran los roles concedidos a la cuenta de servicio.

  5. Si tu cuenta de servicio no tiene los roles necesarios para el agente de Monitoring, sigue estos pasos para añadir los roles descritos en Crear una cuenta de servicio:

    1. Haz clic en  Editar en la entrada de la cuenta de servicio.
    2. Haz clic en Añadir otro rol para añadir los roles que falten.
    3. Haz clic en Guardar.

Autorizar con una cuenta de servicio adjunta

Para autorizar el agente de Monitoring instalado en una instancia de VM de Compute Engine que tenga una cuenta de servicio asociada, haga lo siguiente:

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

  2. Concede a tu cuenta de servicio los roles de gestión de identidades y accesos con privilegios mínimos posibles. Para consultar los roles necesarios, ve a la sección Crear una cuenta de servicio de esta página.

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

  4. Si aún no has instalado el agente, hazlo. Para obtener información sobre cómo instalar el agente, consulta el artículo Instalar el agente.

Autorizar con una clave de cuenta de servicio

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

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

    1. Crea una variable de entorno que apunte al archivo de clave de 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. Sigue los pasos que se indican en la siguiente tabla:

      Compute Engine

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

        Ve a Instancias de VM.

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

        Identifica el INSTANCE_NAME y el INSTANCE_ZONE de tu máquina virtual.

      2. En tu sistema local, ejecuta un comando de CLI de Google Cloud para copiar el archivo de claves de tu sistema local a tu 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, mueve el archivo de la clave de la cuenta de servicio de la ubicación temporal a una permanente y, en Linux, asegúrate de que solo root pueda leerlo.

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

        • Máquinas virtuales Linux: /etc/google/auth/application_default_credentials.json
        • Máquinas virtuales Linux: 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 Configurar GOOGLE_APPLICATION_CREDENTIALS.

        Por ejemplo, en Linux puedes ejecutar la siguiente secuencia de comandos, que mueve el archivo de clave de la cuenta de servicio a la ubicación predeterminada y, a continuación, establece 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. En tu máquina virtual, identifica YOUR-INSTANCE'S-ID y YOUR-INSTANCE'S-AWS-REGION.

      2. En tu sistema local, usa scp para copiar el archivo de clave de la cuenta de servicio de tu sistema local en 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 presupone que tu instancia EC2 no está en la región us-east-1. Para saber cómo definir la variable INSTANCE cuando tu instancia se encuentre en la región us-east-1, consulta la convención de nomenclatura definida por Amazon.

      3. En tu instancia de EC2, mueve el archivo de la clave de la cuenta de servicio desde la ubicación temporal a una de las siguientes ubicaciones y, en Linux, asegúrate de que solo root pueda leer el archivo de la clave de la cuenta de servicio.

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

        • Máquinas virtuales Linux: /etc/google/auth/application_default_credentials.json

        • Máquinas virtuales Windows: C:\ProgramData\Google\Auth\application_default_credentials.json

        • Máquinas virtuales 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 Configurar GOOGLE_APPLICATION_CREDENTIALS.

        Por ejemplo, en Linux puedes ejecutar la siguiente secuencia de comandos, que mueve el archivo de clave de la cuenta de servicio a la ubicación predeterminada y, a continuación, establece 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 clave de cuenta de servicio que necesita el agente. A continuación, instala o reinicia el agente:

Serie GOOGLE_APPLICATION_CREDENTIALS

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

Linux

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

    /etc/default/stackdriver-agent
    
  2. Añade lo siguiente al archivo de configuración:

    GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
    
  3. Reinicia el agente ejecutando el siguiente comando en tu instancia de VM:

    sudo service stackdriver-agent restart
    

Windows

  1. En PowerShell, ejecuta los siguientes comandos como administrador para definir la variable de entorno del sistema GOOGLE_APPLICATION_CREDENTIALS para que la use el agente de Ops:

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

    Restart-Service -Name StackdriverMonitoring