Solución de problemas de VM Manager

En este documento, se describe cómo solucionar problemas con VM Manager.

Para obtener más información sobre VM Manager, consulta VM Manager.

Antes de empezar

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Selecciona la pestaña según cómo planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI. Después de instalarla, inicializa Google Cloud CLI ejecutando el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  • Configura una región y una zona predeterminadas.
  • REST

    Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Descripción general

Para solucionar problemas, primero verifica que VM Manager esté configurado de forma correcta. Si la configuración es correcta y aún tienes problemas, puedes revisar los registros. Cuando revisas los registros, puedes identificar problemas con la VM o en el flujo de trabajo de VM Manager, como errores en comandos o secuencias de comandos, que puedes aislar y resolver.

Puedes recopilar la siguiente información de los registros:

  • Cualquier mensaje de error o advertencia que registre la VM. Estos registros te ayudan a identificar errores a nivel de la VM o errores de otros servicios que se ejecutan en ella. Para revisar estos registros, consulta Inspecciona Cloud Logging.

  • La información de depuración detallada que registra el agente de configuración del SO. Estos registros te ayudan a identificar problemas con cualquiera de las operaciones que ejecuta VM Manager. Para inspeccionar los registros de depuración del agente de configuración del SO, consulta Inspecciona los registros de depuración.

Después de identificar los problemas o errores, también puedes revisar la sección Errores comunes para ver las posibles soluciones o consultar la solución alternativa para administrar las implementaciones de parches en una organización.

Inspecciona Cloud Logging

Puedes usar los vínculos rápidos de la consola de Google Cloud para cada función con el objetivo de ver los registros.

Parche del SO

  1. En la consola de Google Cloud , ve a la pestaña Ejecución de trabajos en la página Parche.

    Ir a Ejecución de trabajos

  2. Haz clic en el nombre del trabajo de aplicación de parche que deseas depurar.
  3. Ve a la sección Instancias de VM actualizadas.
  4. Para una VM específica, en Registros, haz clic en Ver.

Políticas del SO

Este procedimiento es compatible con las políticas del SO. Para las políticas de invitado (Beta), usa la opción de registros de depuración en la siguiente sección.

  1. En la consola de Google Cloud , ve a la pestaña Instancias de VM en la página Políticas del SO.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la VM que deseas depurar.
  3. Ve a la sección Políticas.
  4. En Registros, haz clic en Ver.

Organizadores de políticas del SO

  1. En la consola de Google Cloud , ve a la pestaña Orquestadores de políticas del SO en la página Políticas del SO.

    Ir a Organizadores de políticas del SO

  2. Haz clic en el nombre del organizador de políticas del SO que deseas depurar.
  3. Ve a la sección Registros y verifica la entrada de registro.

Inspecciona registros de depuración

Puedes identificar problemas con cualquier función de VM Manager si habilitas la depuración para el agente de configuración del SO y ves el registro de depuración.

Habilita el registro de depuración para el agente de configuración del SO

Para habilitar el registro de depuración, configura los metadatos osconfig-log-level=debug en la instancia de VM o el proyecto.

Para habilitar el registro de depuración en la VM, completa los siguientes pasos:

Console

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

    Ir a Instancias de VM

  2. Haz clic en el nombre de la VM para la que deseas configurar el valor de metadatos.

  3. En la página Detalles de la instancia, haz clic en Cambiar para cambiar la configuración.

  4. En Metadatos personalizados, agrega las siguientes entradas de metadatos:

    Clave: osconfig-log-level
    Valor: debug

  5. Haz clic en Guardar para aplicar los cambios a la VM.

gcloud

Usa el comando instances add-metadata con la marca --metadata=osconfig-log-level=debug:

gcloud compute instances add-metadata VM_NAME \
    --metadata=osconfig-log-level=debug

Reemplaza VM_NAME por el nombre de tu VM.

REST

Si quieres obtener instrucciones para configurar los metadatos de la instancia, sigue las instrucciones de la API sobre cómo configurar los metadatos de la instancia.

El siguiente par clave-valor es obligatorio como parte de la propiedad de metadatos:

Clave: osconfig-log-level
Valor: debug

Consulta registros de depuración

Cuando el registro de depuración está habilitado, el agente de configuración del SO escribe entradas de registro en Cloud Logging y la consola del puerto en serie.

Después de habilitar el registro de depuración en la VM, el agente de configuración del SO tarda diez minutos en comenzar a escribir mensajes de depuración en Cloud Logging. Para reducir este tiempo de espera, reinicia el agente o reinicia la VM. Para obtener más información sobre Cloud Logging, consulta Visualiza los registros de Cloud Logging.

Para ver los registros de depuración, puedes usar las siguientes opciones:

  • Cloud Logging: Usa la consola de Google Cloud o Google Cloud CLI
  • Consola de puerto en serie

Console

  1. Ve a la página Registro > Explorador de registros (Explorador de registros) en la consola deGoogle Cloud :

    Ve al Explorador de registros

  2. Si es necesario, selecciona un proyecto de Google Cloud existente en la parte superior de la página o crea uno nuevo.

  3. En la lista desplegable Recurso, selecciona Instancia de VM. Aparecerá una lista de VM disponibles (instance_id).

  4. Haz clic en la VM que deseas ver.

  5. Haz clic en Agregar.

  6. En la lista desplegable Nombre del registro, selecciona OSConfigAgent.

  7. Haz clic en Agregar.

  8. Su archivo debería ser similar al siguiente:

    resource.type="gce_instance" resource.labels.instance_id="INSTANCE_ID"
    logName="projects/PROJECT_ID/logs/OSConfigAgent"
    
  9. Haga clic en Run query.

gcloud

Ejecuta el comando gcloud logging read:

 gcloud logging read "resource.type=gce_instance AND logName=projects/PROJECT_ID/logs/OSConfigAgent"
 

Reemplaza PROJECT_ID con el ID del proyecto.

Puerto en serie

Para ver la información del registro de depuración desde la consola del puerto en serie, consulta la sección Visualiza la salida de los puertos en serie.

Errores comunes

Problemas de autenticación

Para que VM Manager funcione, debes tener lo siguiente:

  • Una cuenta de servicio conectada. VM Manager usa esta cuenta de servicio para firmar solicitudes al servicio de API.
  • Asegúrate de que la cuenta de servicio adjunta tenga el rol roles/logging.logWriter para escribir registros en la API de Logging.
  • Agente de servicio de configuración del SO de Google Cloud. VM Manager crea este agente de servicio cuando inicia trabajos de aplicación de parches y le otorga la función de agente de servicio de configuración del SO de Cloud. Para crear políticas del SO, no necesitas configurar este agente de servicio.

Si usas VM Manager y no tienes una cuenta de servicio conectada ni un agente de servicio de configuración del SO de Google Cloud, es posible que veas los siguientes errores mientras trabajas con trabajos de aplicación de parches:

Service account permissions are missing. Verify that the service account has the correct permissions and try again.
OSConfigAgent Error main.go:88: error getting token from metadata: metadata: GCE metadata "instance/service-accounts/default/identity?audience=osconfig.googleapis.com&format=full" not defined
message: "Error running OPERATION_NAME: error calling OPERATION_NAME: code: "PermissionDenied", message: "The caller does not have permission", details: []"

Los problemas de autenticación también pueden evitar que las instancias de VM aparezcan en el panel de parches.

Para resolver estos problemas, intenta realizar una de las siguientes acciones o todas:

  • Verifica que todas las VMs tengan una cuenta de servicio conectada.
  • Asegúrate de que el rol de agente de configuración del SO de Cloud OS (roles/osconfig.serviceAgent) esté configurado en el agente de servicios de configuración del SO de Google Cloud.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-osconfig.iam.gserviceaccount.com' \
      --role='roles/osconfig.serviceAgent'
    

    Reemplaza lo siguiente:

Se produjo un error mientras se excluían los paquetes para las actualizaciones de parches

Si especificas comodines o caracteres especiales para el nombre de los paquetes cuando excluyes paquetes en un trabajo de aplicación de parche, la Administración de parches de SO puede ignorar la lista y actualizar todos los paquetes.

Para resolver este problema, actualiza el agente de configuración del SO a la versión 20220829.00 y usa barras diagonales (/) para unir el nombre del paquete.

En el siguiente ejemplo, la Administración de parches de SO excluye los paquetes yum con el prefijo google- en el nombre del paquete.

      gcloud compute os-config patch-jobs execute --instance-filter-all 
--yum-excludes=/google-.*/

Solución alternativa para administrar implementaciones de parches en una organización

Las implementaciones de parches y los trabajos de aplicación de parches se limitan a proyectos individuales de Google Cloud , a diferencia de las políticas del SO, que puedes organizar en una organización o carpeta con orquestadores de políticas.

Como solución alternativa para administrar las implementaciones de parches a gran escala, puedes usar Cloud Asset Inventory y Google Cloud CLI en una secuencia de comandos de Bash para iterar en todos los proyectos de tu organización. Esta secuencia de comandos te permite completar las siguientes tareas:

  1. Habilita VM Manager en varios proyectos

  2. Crea una implementación de parches en varios proyectos

  3. Exporta los resultados de los trabajos de aplicación de parches de todos los proyectos a un archivo CSV

Permisos y el ID de organización obligatorios

Antes de ejecutar las secuencias de comandos de esta sección, asegúrate de tener los permisos de Identity and Access Management (IAM) necesarios y el ID de organización:

  • Nivel de organización: Para enumerar todos los proyectos de tu organización con Cloud Asset Inventory, tu cuenta de usuario o de servicio debe tener el permiso cloudasset.assets.searchAllResources (incluido en el rol de visualizador de recursos de Cloud, roles/cloudasset.viewer) en la organización.

  • Nivel del proyecto de destino: Según las tareas que ejecutes en tu organización, tu cuenta de usuario o de servicio debe tener los siguientes permisos en cada proyecto de destino (por ejemplo, heredados de una vinculación de rol a nivel de la organización):

    • Para habilitar la API de OS Config y configurar los metadatos del proyecto: serviceusage.services.enable (Administrador de Service Usage, roles/serviceusage.serviceUsageAdmin) y compute.projects.setCommonInstanceMetadata (Administrador de instancias de Compute (v1), roles/compute.instanceAdmin.v1).

    • Para crear implementaciones de parches: osconfig.patchDeployments.create (Administrador de implementación de parches de configuración del SO, roles/osconfig.patchDeploymentAdmin).

    • Para enumerar los trabajos de aplicación de parches y ver los detalles de las instancias de VM: osconfig.patchJobs.list y osconfig.patchJobs.get (Visualizador de trabajos de aplicación de parches de configuración del SO, roles/osconfig.patchJobViewer).

Para encontrar el ID de organización, ejecuta el comando gcloud projects get-ancestors en cualquier proyecto de tu organización:

gcloud projects get-ancestors PROJECT_ID

Reemplaza PROJECT_ID por el ID de un proyecto de tu organización. En el resultado, se enumeran las carpetas superiores del proyecto y el ID de organization.

Habilita VM Manager en todos los proyectos

Para habilitar VM Manager en todos los proyectos existentes y futuros de una organización o carpeta, Google recomienda usar políticas de la organización y activación de servicios jerárquica o Terraform.

Como alternativa, para habilitar la API de OS Config (osconfig.googleapis.com) y establecer los metadatos del proyecto enable-osconfig=TRUE en todos los proyectos existentes de tu organización con una secuencia de comandos de Bash, ejecuta el siguiente comando:

for project in $(gcloud asset search-all-resources \
    --scope=organizations/ORGANIZATION_ID \
    --asset-types=cloudresourcemanager.googleapis.com/Project \
    --format="csv(additionalAttributes.projectId)" | sed 1d | sort); do
  gcloud services enable osconfig.googleapis.com --project="$project"
  gcloud compute project-info add-metadata --project="$project" \
      --metadata=enable-osconfig=TRUE
done

Reemplaza ORGANIZATION_ID por el ID de tu organización.

Crea una implementación de parches en varios proyectos

Para aplicar un programa de implementación de parches estandarizado en todos los proyectos de tu organización, crea un archivo de configuración de implementación de parches y aplícalo a cada proyecto:

  1. Crea un archivo de plantilla JSON o YAML llamado patch_deployment_template.json que defina el filtro de la instancia de destino, la configuración de parches y el programa. Para obtener más información sobre los campos de configuración admitidos, consulta Crea una implementación de parches y la referencia de recursos de PatchDeployment.

    Por ejemplo, el siguiente archivo patch_deployment_template.json programa un trabajo de aplicación de parche semanal recurrente todos los martes a las 7:30 p.m. en la zona horaria America/Los_Angeles para todas las instancias de VM de un proyecto:

    {
      "instanceFilter": {
        "all": true
      },
      "patchConfig": {
        "rebootConfig": "DEFAULT"
      },
      "recurringSchedule": {
        "frequency": "WEEKLY",
        "weekly": {
          "dayOfWeek": "TUESDAY"
        },
        "timeOfDay": {
          "hours": 19,
          "minutes": 30
        },
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      }
    }
    
  2. Ejecuta el siguiente bucle para crear la implementación de parches en cada proyecto de tu organización con el comando gcloud compute os-config patch-deployments create:

    for project in $(gcloud asset search-all-resources \
        --scope=organizations/ORGANIZATION_ID \
        --asset-types=cloudresourcemanager.googleapis.com/Project \
        --format="csv(additionalAttributes.projectId)" | sed 1d | sort); do
      gcloud compute os-config patch-deployments create patch-"$project" \
          --project="$project" \
          --file=patch_deployment_template.json
    done
    

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

Exporta los resultados de los trabajos de aplicación de parches de todos los proyectos a un archivo CSV

Para auditar los resultados de los trabajos de aplicación de parches, puedes usar el comando gcloud compute os-config patch-jobs list-instance-details para exportar los detalles de las instancias de VM de los trabajos de aplicación de parches con errores o exitosos a un archivo CSV.

  • Trabajo de aplicación de parche único: Para exportar las instancias de VM que fallaron o se realizaron de forma correcta en un trabajo de aplicación de parche específico, ejecuta los siguientes comandos:

    • Exporta las instancias de VM con errores:

      gcloud compute os-config patch-jobs list-instance-details PATCH_JOB_ID \
          --project=PROJECT_ID \
          --filter="state:(FAILED OR TIMED_OUT OR NO_AGENT_DETECTED)" \
          --format="csv(name.basename():label=INSTANCE_NAME,zone:label=ZONE,state:label=STATE,failureReason:label=FAILURE_REASON)" > failed_patches.csv
      
    • Instancias de VM exportadas correctamente:

      gcloud compute os-config patch-jobs list-instance-details PATCH_JOB_ID \
          --project=PROJECT_ID \
          --filter="state=SUCCEEDED" \
          --format="csv(name.basename():label=INSTANCE_NAME,zone:label=ZONE,state:label=STATE,attemptCount:label=ATTEMPT_COUNT)" > succeeded_patches.csv
      

    Reemplaza lo siguiente:

    • PATCH_JOB_ID: el ID del trabajo de aplicación de parche

    • PROJECT_ID: Es el ID del proyecto.

  • Todos los proyectos de una organización: Para iterar en todos los proyectos de tu organización y exportar las instancias de VM con errores y con éxito en los trabajos de aplicación de parches a archivos CSV, ejecuta la siguiente secuencia de comandos:

    echo "PROJECT_ID,PATCH_JOB_ID,INSTANCE_NAME,ZONE,STATE,FAILURE_REASON" > failed_patches.csv
    echo "PROJECT_ID,PATCH_JOB_ID,INSTANCE_NAME,ZONE,STATE,ATTEMPT_COUNT" > succeeded_patches.csv
    
    for project in $(gcloud asset search-all-resources \
        --scope=organizations/ORGANIZATION_ID \
        --asset-types=cloudresourcemanager.googleapis.com/Project \
        --format="csv(additionalAttributes.projectId)" | sed 1d | sort); do
      for job in $(gcloud compute os-config patch-jobs list \
          --project="$project" \
          --format="value(name.basename())"); do
        gcloud compute os-config patch-jobs list-instance-details "$job" \
            --project="$project" \
            --filter="state:(FAILED OR TIMED_OUT OR NO_AGENT_DETECTED)" \
            --format="csv[no-heading](name.basename(),zone,state,failureReason)" | \
            sed "s/^/${project},${job},/" >> failed_patches.csv
        gcloud compute os-config patch-jobs list-instance-details "$job" \
            --project="$project" \
            --filter="state=SUCCEEDED" \
            --format="csv[no-heading](name.basename(),zone,state,attemptCount)" | \
            sed "s/^/${project},${job},/" >> succeeded_patches.csv
      done
    done
    

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

    De forma predeterminada, el comando gcloud compute os-config patch-jobs list devuelve hasta 10 trabajos de aplicación de parches por proyecto. Para exportar los resultados solo del trabajo de aplicación de parches más reciente de cada proyecto, agrega --sort-by="~update_time" --limit=1 al comando gcloud compute os-config patch-jobs list.

Para obtener informes de cumplimiento de parches y vulnerabilidades en toda la organización en la consola deGoogle Cloud o BigQuery, consulta Visualiza el resumen de parches para las VMs de una organización o carpeta y Visualiza informes de vulnerabilidades de tu organización.

Próximos pasos