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
- Configure o VM Manager.
- Ative a API Inventário de recursos do Cloud.
- Crie um conjunto de dados do BigQuery para armazenar os dados exportados.
- Crie uma atribuição de política do SO que gere dados personalizados.
-
Configure a autenticação, caso ainda não tenha feito isso.
Com isso, você confirma sua identidade para acesso a serviços e APIs do Cloud de Confiance by S3NS . Para executar
códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Selecione a guia para como planeja usar as amostras nesta página:
Console
Quando você usa o console Cloud de Confiance para acessar os serviços e as APIs Cloud de Confiance by S3NS , não é necessário configurar a autenticação.
gcloud
-
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:
gcloud init
-
- Defina uma região e uma zona padrão.
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:
- Leitor de recursos do Cloud (
roles/cloudasset.viewer) - Editor de dados do BigQuery (
roles/bigquery.dataEditor) - Usuário de jobs do BigQuery (
roles/bigquery.jobUser)
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 scriptvalidatesai com o código101para indicar que o recurso não corresponde ao estado selecionado. Esse código de saída aciona o scriptenforceem todas as avaliações.enforce: especifica o campooutputFilePath, executa o comando personalizado, grava a saída no caminho especificado e sai com o código100para 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:
Para identificar o ID da sua organização, execute o seguinte comando:
gcloud projects get-ancestors PROJECT_IDSubstitua
PROJECT_IDpela ID do seu projeto.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).
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_OSPolicyAssignmentReportno 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:
No console do Cloud de Confiance , acesse a página BigQuery.
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 instanceSubstitua
DATASET_IDpelo ID do seu conjunto de dados do BigQuery (por exemplo,cai_exp).A saída da consulta é semelhante à tabela a seguir:
instancecompliance_resultsubuntu-15.15.0-1036-gcpubuntu-25.15.0-1044-gcprhel9-15.14.0-162.18.1.el9_1.x86_64Saída JSON da consulta:
A consulta a seguir extrai os campos
nameekernelda 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_latestSubstitua
DATASET_IDpelo ID do seu conjunto de dados do BigQuery (por exemplo,cai_exp).A saída da consulta é semelhante à tabela a seguir:
instanceos_namekernel_versionubuntu-1Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP5.15.0-1036-gcprhel9-1Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP5.14.0-162.18.1.el9_1.x86_64
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: