Conferir dados personalizados das políticas do SO da sua organização

Este documento descreve como usar o VM Manager, Inventário de recursos do Cloud e o BigQuery para visualizar dados personalizados e mensagens de erro de aplicação das políticas de SO em toda a organização. Use esse fluxo de trabalho quando precisar de relatórios em toda a organização sobre configurações personalizadas de VM, saídas de script ou falhas na execução de políticas que os estados de compliance padrão não capturam.

Para coletar dados personalizados, configure um outputFilePath na política do SO, que é o caminho local na VM em que o script da política grava texto personalizado ou saída JSON. O VM Manager lê a saída desse caminho e a armazena no relatório de atribuição de política do SO. Em seguida, exporte esses relatórios para o BigQuery usando o Inventário de recursos do Cloud para consultar os resultados em toda a frota de VMs.

Antes de começar

Funções exigidas

Para ter as permissões necessárias para exportar dados de recursos para o BigQuery e consultar dados personalizados de políticas do SO, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto, na pasta ou na organização:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esses papéis predefinidos contêm as permissões necessárias para exportar dados de recursos para o BigQuery e consultar dados personalizados de políticas do SO. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para exportar dados de recursos para o BigQuery e consultar dados personalizados de políticas do SO:

  • cloudasset.assets.exportOSInventories
  • cloudasset.assets.exportResource
  • bigquery.datasets.get
  • bigquery.tables.create
  • bigquery.tables.update
  • bigquery.tables.get
  • bigquery.jobs.create

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Exemplo de políticas do SO

Antes de exportar e consultar dados personalizados no BigQuery, crie e atribua uma política do SO que colete a saída personalizada das suas VMs. Para mais informações, consulte Criar uma atribuição de política do SO.

Para coletar dados personalizados, defina uma política do SO com um recurso exec que inclua as seguintes seções:

  • validate: verifica se a VM corresponde ao estado selecionado. Nas políticas de exemplo a seguir, o script validate sai com o código 101 para indicar que o recurso não corresponde ao estado selecionado. Esse código de saída aciona o script enforce em todas as avaliações.
  • enforce: especifica o campo outputFilePath, executa o comando personalizado, grava a saída no caminho especificado e sai com o código 100 para indicar uma aplicação bem-sucedida.

Política do SO que gera uma string

A amostra de política de SO a seguir gera uma string que contém a versão do kernel da instância de VM:

id: return-kernel-version-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: return-kernel-version
      exec:
        validate:
          interpreter: SHELL
          script: exit 101
        enforce:
          interpreter: SHELL
          outputFilePath: policy-output.txt
          script: uname -r > policy-output.txt && exit 100

Política do SO que gera um arquivo JSON

A política de SO de exemplo a seguir gera um objeto JSON que contém o nome do sistema operacional e a versão do kernel:

id: return-kernel-version-js-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: return-kernel-version-js
      exec:
        validate:
          interpreter: SHELL
          script: exit 101
        enforce:
          interpreter: SHELL
          outputFilePath: policy-output.json
          script: |-
            k=$(uname -r)
            o=$(uname -a)
            echo "{ \"name\": \""$o"\", \"kernel\": \""$k"\" }" > policy-output.json
            exit 100

Exportar dados do Gerenciador de VMs para o BigQuery

Depois que o VM Manager aplica sua política de SO, o Inventário de recursos do Cloud coleta os relatórios de inventário do SO e de atribuição de política do SO resultantes em toda a organização. Ao exportar esses dados para o BigQuery com a flag --per-asset-type, o Inventário de recursos do Cloud cria uma tabela separada para cada tipo de recurso. A tabela <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport resultante armazena as saídas da política personalizada e as mensagens de erro de aplicação.

Para exportar dados de inventário e recursos do SO para o BigQuery, siga estas etapas:

  1. Para identificar o ID da sua organização, execute o seguinte comando:

    gcloud projects get-ancestors PROJECT_ID
    

    Substitua PROJECT_ID pela ID do seu projeto.

  2. Para exportar os dados de inventário do SO que o VM Manager coleta das suas instâncias de VM, execute o seguinte comando:

    gcloud asset export \
        --content-type=os-inventory \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"
    

    Substitua os seguintes marcadores pelos seus valores:

    • ORGANIZATION_ID: o ID da organização.
    • BQ_PROJECT_ID: o ID do projeto que contém seu conjunto de dados do BigQuery.
    • DATASET_ID: o ID do seu conjunto de dados do BigQuery (por exemplo, cai_exp).
  3. Para exportar os metadados de recursos, incluindo relatórios de atribuição de políticas do SO, para o BigQuery, execute o seguinte comando:

    gcloud asset export \
        --content-type=resource \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"
    

    Substitua os seguintes marcadores pelos seus valores:

    • ORGANIZATION_ID: o ID da organização.
    • BQ_PROJECT_ID: o ID do projeto que contém seu conjunto de dados do BigQuery.
    • DATASET_ID: o ID do seu conjunto de dados do BigQuery (por exemplo, cai_exp).

    Quando a exportação for concluída, o Inventário de recursos do Cloud vai criar a tabela res_osconfig_googleapis_com_OSPolicyAssignmentReport no conjunto de dados do BigQuery. Para mais informações, consulte Exportar snapshot de recurso.

Consultar dados de políticas de SO personalizadas no BigQuery

Depois de exportar os dados de recursos para o BigQuery, é possível consultar a tabela res_osconfig_googleapis_com_OSPolicyAssignmentReport para conferir saídas personalizadas e mensagens de erro de aplicação das políticas do SO.

Para executar uma consulta no BigQuery, siga estas etapas:

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, cole uma das seguintes consultas SQL:

    • Saída de texto da consulta:

      A consulta a seguir retorna a versão do kernel que a política do SO coleta para cada instância de VM:

      SELECT
        resource.data.instance as instance,
        ANY_VALUE(
          SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64(REPLACE(REPLACE(
            resource_compliances.execResourceOutput.enforcementOutput
            , '-', '+'), '_', '/')))
          HAVING MAX updateTime) as compliance_results
      FROM
        `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
        UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances,
        UNNEST(resource_compliances.configSteps) as config_steps
      WHERE
        resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-policy"
        AND resource_compliances.osPolicyResourceId = "return-kernel-version"
        AND config_steps.type = "VALIDATION"
      GROUP BY
        instance
      

      Substitua DATASET_ID pelo ID do seu conjunto de dados do BigQuery (por exemplo, cai_exp).

      A saída da consulta é semelhante à tabela a seguir:

      instance compliance_results
      ubuntu-1 5.15.0-1036-gcp
      ubuntu-2 5.15.0-1044-gcp
      rhel9-1 5.14.0-162.18.1.el9_1.x86_64
    • Saída JSON da consulta:

      A consulta a seguir extrai os campos name e kernel da saída JSON e os retorna como colunas separadas para cada instância de VM:

      WITH compliance_history AS (
        SELECT
          updateTime,
          resource.data.instance,
          SAFE_CONVERT_BYTES_TO_STRING(
            FROM_BASE64(
              REPLACE(
                REPLACE(
                  resource_compliances.execResourceOutput.enforcementOutput, '-', '+'
                ), '_', '/'
              )
            )
          ) as compliance_results
        FROM
          `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
          UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances,
          UNNEST(resource_compliances.configSteps) as config_steps
        WHERE
          resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-js-policy"
          AND resource_compliances.osPolicyResourceId = "return-kernel-version-js"
          AND config_steps.type = "VALIDATION"
      ),
      compliance_latest AS (
        SELECT
          instance,
          ANY_VALUE(compliance_results HAVING MAX updateTime) as compliance_results
        FROM compliance_history
        GROUP BY instance
      )
      SELECT
        instance,
        JSON_EXTRACT_SCALAR(compliance_results, "$.name") as os_name,
        JSON_EXTRACT_SCALAR(compliance_results, "$.kernel") as kernel_version
      FROM compliance_latest
      

      Substitua DATASET_ID pelo ID do seu conjunto de dados do BigQuery (por exemplo, cai_exp).

      A saída da consulta é semelhante à tabela a seguir:

      instance os_name kernel_version
      ubuntu-1 Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP 5.15.0-1036-gcp
      rhel9-1 Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP 5.14.0-162.18.1.el9_1.x86_64
  3. Para executar a consulta, clique em Executar.

Para mais informações, consulte Executar uma consulta.

Analisar mensagens de erro de aplicação

Quando um recurso de política do SO falha na validação ou na aplicação, o VM Manager registra a mensagem de erro no campo configSteps.errorMessage da tabela res_osconfig_googleapis_com_OSPolicyAssignmentReport. É possível consultar esse campo no BigQuery para resolver falhas de execução de políticas em toda a organização.

A consulta a seguir retorna as mensagens de erro de validação ou imposição mais recentes para cada instância de VM:

SELECT
  resource.data.instance AS instance,
  resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId AS policy_id,
  resource_compliances.osPolicyResourceId AS resource_id,
  config_steps.type AS step_type,
  ANY_VALUE(config_steps.errorMessage HAVING MAX updateTime) AS error_message
FROM
  `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
  UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) AS resource_compliances,
  UNNEST(resource_compliances.configSteps) AS config_steps
WHERE
  config_steps.errorMessage IS NOT NULL
  AND config_steps.errorMessage != ""
GROUP BY
  instance,
  policy_id,
  resource_id,
  step_type

Substitua DATASET_ID pelo ID do seu conjunto de dados do BigQuery (por exemplo, cai_exp).

A saída da consulta é semelhante à tabela a seguir:

instance policy_id resource_id step_type error_message
ubuntu-2 return-kernel-version-policy return-kernel-version DESIRED_STATE_ENFORCEMENT Error running enforce script: exit status 1

A seguir

Para mais informações sobre como gerenciar políticas do SO e analisar dados de compliance, consulte os seguintes recursos: