Gravar a análise de políticas no BigQuery

Nesta página, explicamos como analisar políticas de gerenciamento de identidade e acesso (IAM) de forma assíncrona e gravar resultados no BigQuery. O processo é semelhante à análise de políticas do IAM, mas o resultado da análise é gravado nas tabelas do BigQuery.

Antes de começar

Ative a Cloud Asset API.

Ative a API

Ative a API no projeto ou na organização que usará para enviar a consulta. Não precisa ser o mesmo recurso que está no escopo da sua consulta.

Papéis e permissões necessárias

Os papéis e permissões a seguir são necessários para executar uma análise de política e exportar os resultados para o BigQuery.

Papéis do IAM obrigatórios

Para receber as permissões necessárias para analisar uma política e exportar os resultados para o BigQuery, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto, na pasta ou na organização que terá o escopo da sua consulta:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Esses papéis predefinidos contêm as permissões necessárias para analisar uma política e exportar os resultados para o BigQuery. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para analisar uma política e exportar os resultados para o BigQuery:

  • bigquery.datasets.create
  • bigquery.jobs.create
  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.updateData
  • bigquery.tables.update
  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • Para analisar políticas com papéis personalizados do IAM: iam.roles.get
  • Para usar a Google Cloud CLI para analisar políticas: serviceusage.services.use

Também é possível receber essas permissões com papéis personalizados ou outros papéis predefinidos.

Permissões necessárias do Google Workspace

Para conferir se um principal tem determinados papéis ou permissões resultantes da associação a um grupo do Google Workspace, você precisa da permissão groups.read do Google Workspace. Essa permissão está contida no papel Administrador de leitor de grupos e em papéis mais avançados, como Administrador de grupos ou Superadministrador. Consulte Atribuir funções administrativas específicas para mais informações.

Analisar políticas e exportar resultados

Console

  1. No console do Google Cloud, acesse a página "Análise de políticas".

    Acessar a ferramenta Análise de políticas políticas

  2. Na seção Analisar políticas, encontre o modelo de consulta que você quer usar e clique em Criar consulta. Se quiser criar uma consulta personalizada, clique em Criar consulta personalizada.

  3. No campo Selecionar escopo da consulta, selecione o projeto, a pasta ou a organização em que você quer definir o escopo da consulta. a ferramenta Análise de políticas vai analisar o acesso referente ao projeto, à pasta ou à organização, bem como quaisquer recursos que estiverem dentro.

  4. Verifique se os parâmetros de consulta estão definidos:

    • Se você estiver usando um modelo de consulta, confirme os parâmetros já preenchidos.
    • Se estiver criando uma consulta personalizada, defina os recursos, principais, papéis e permissões que você quer consultar.

    Para mais informações sobre os tipos de consultas que podem ser criadas, consulte Analisar políticas do IAM.

  5. No painel com o nome da consulta, clique em Analisar > Exportar apenas resultado. O painel Exportar resultados será aberto.

  6. Na seção Definir destino da exportação, digite as seguintes informações:

    • Projeto: o projeto em que o conjunto de dados do BigQuery está localizado.
    • Conjunto de dados: o conjunto de dados do BigQuery para onde você quer exportar os resultados.
    • Tabela: o prefixo das tabelas do BigQuery em que os resultados da análise serão gravados. Se não existir uma tabela com o prefixo especificado, o BigQuery criará uma nova.
  7. Clique em Continuar.

  8. Opcional: na seção Definir configurações adicionais, selecione as opções que quiser:

    • Particionamento: se a tabela deve ser particionada. Para saber mais sobre tabelas particionadas, consulte Introdução às tabelas particionadas.
    • Preferência de gravação: especifica a ação que ocorrerá se a tabela ou partição de destino já existir. Por padrão, se a tabela ou partição já existir, o BigQuery anexará os dados a ela ou à partição mais recente.
  9. Clique em Exportar.

A ferramenta Análise de políticas políticas executa a consulta e exporta os resultados para a tabela especificada.

gcloud

O método AnalyzeIamPolicyLongrunning permite que você emita uma solicitação de análise e receba resultados no destino especificado do BigQuery.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RESOURCE_TYPE: o tipo de recurso para o qual você quer restringir sua pesquisa. Somente as políticas de permissão do IAM anexadas a este recurso e aos descendentes dele serão analisadas. Use o valor project, folder ou organization.
  • RESOURCE_ID: o ID do projeto, da pasta ou da organização do Google Cloud para a qual você quer definir o escopo da sua pesquisa. Somente as políticas de permissão do IAM anexadas a este recurso e aos descendentes dele serão analisadas. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.
  • PRINCIPAL: o principal com o acesso que você quer analisar, no formato PRINCIPAL_TYPE:ID. Por exemplo, user:my-user@example.com. Para uma lista completa dos tipos principais, consulte Identificadores principais.
  • PERMISSIONS: uma lista separada por vírgulas das permissões que você quer verificar, por exemplo, compute.instances.get,compute.instances.start. Se você listar várias permissões, a Análise de políticas vai procurar qualquer uma delas.
  • DATASET: o conjunto de dados do BigQuery no formato projects/PROJECT_ID/datasets/DATASET_ID, em que PROJECT_ID é o ID alfanumérico do projeto do Google Cloud e DATASET_ID é o ID do conjunto de dados.
  • TABLE_PREFIX: o prefixo das tabelas do BigQuery em que os resultados da análise serão gravados. Se uma tabela com o prefixo especificado não existir, o BigQuery criará uma nova tabela.
  • PARTITION_KEY: opcional. A chave de partição da tabela particionada do BigQuery. A ferramenta Análise de políticas políticas só oferece suporte a chaves de partição REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica a ação que ocorrerá se a tabela ou partição de destino já existir. Para ver uma lista de valores possíveis, consulte writeDisposition. Por padrão, se a tabela ou partição já existir, o BigQuery anexará os dados à tabela ou à partição mais recente.

Execute o comando gcloud asset analyze-iam-policy-longrunning:

Linux, macOS ou Cloud Shell

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --identity=PRINCIPAL \
    --permissions='PERMISSIONS' \
    --bigquery-dataset=DATASET \
    --bigquery-table-prefix=TABLE_PREFIX \
    --bigquery-partition-key=PARTITION_KEY \
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (PowerShell)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --identity=PRINCIPAL `
    --permissions='PERMISSIONS' `
    --bigquery-dataset=DATASET `
    --bigquery-table-prefix=TABLE_PREFIX `
    --bigquery-partition-key=PARTITION_KEY `
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (cmd.exe)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --identity=PRINCIPAL ^
    --permissions='PERMISSIONS' ^
    --bigquery-dataset=DATASET ^
    --bigquery-table-prefix=TABLE_PREFIX ^
    --bigquery-partition-key=PARTITION_KEY ^
    --bigquery-write-disposition=WRITE_DISPOSITION

Você receberá uma resposta semelhante a esta

Analyze IAM Policy in progress.
Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.

REST

O método AnalyzeIamPolicyLongrunning permite que você emita uma solicitação de análise e receba resultados no destino especificado do BigQuery.

Para analisar uma política de permissão do IAM e exportar os resultados para o BigQuery, use o método analyzeIamPolicyLongrunning da API Cloud Asset Inventory.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • RESOURCE_TYPE: o tipo de recurso para o qual você quer restringir sua pesquisa. Somente as políticas de permissão do IAM anexadas a este recurso e aos descendentes dele serão analisadas. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: o ID do projeto, da pasta ou da organização do Google Cloud para a qual você quer definir o escopo da sua pesquisa. Somente as políticas de permissão do IAM anexadas a este recurso e aos descendentes dele serão analisadas. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.
  • FULL_RESOURCE_NAME: opcional. O nome completo do recurso com o acesso que você quer analisar. Para uma lista de formatos de nomes de recursos completos, consulte Formato de nomes de recursos.
  • PRINCIPAL: opcional. O principal com o acesso que você quer analisar, no formato PRINCIPAL_TYPE:ID (por exemplo, user:my-user@example.com). Para uma lista completa dos tipos principais, consulte Identificadores principais.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: opcional. As permissões que você quer verificar, por exemplo, compute.instances.get. Se você listar várias permissões, a Análise de políticas vai procurar qualquer uma delas.
  • DATASET: o conjunto de dados do BigQuery no formato projects/PROJECT_ID/datasets/DATASET_ID, em que PROJECT_ID é o ID alfanumérico do projeto do Google Cloud e DATASET_ID é o ID do conjunto de dados.
  • TABLE_PREFIX: o prefixo das tabelas do BigQuery em que os resultados da análise serão gravados. Se uma tabela com o prefixo especificado não existir, o BigQuery criará uma nova tabela.
  • PARTITION_KEY: opcional. A chave de partição da tabela particionada do BigQuery. A ferramenta Análise de políticas políticas só oferece suporte a chaves de partição REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica a ação que ocorrerá se a tabela ou partição de destino já existir. Para ver uma lista de valores possíveis, consulte writeDisposition. Por padrão, se a tabela ou partição já existir, o BigQuery anexará os dados à tabela ou à partição mais recente.

Método HTTP e URL:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning

Corpo JSON da solicitação:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  },
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "DATASET",
      "tablePrefix": "TABLE_PREFIX",
      "partitionKey": "PARTITION_KEY",
      "writeDisposition": "WRITE_DISPOSITION"
    }
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata",
    "createTime": "2022-04-12T21:31:10.753173929Z"
  }
}

Ver os resultados da análise da política do IAM

Para visualizar sua análise de política do IAM, faça o seguinte:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Acessar o BigQuery

  2. Para exibir as tabelas e visualizações no conjunto de dados, abra o painel de navegação. Na seção Explorador, selecione o projeto para expandi-lo e escolha um conjunto de dados.

  3. Na lista, selecione as tabelas com seu prefixo. A tabela com um sufixo analysis contém a consulta e os metadados, como o nome da operação, o horário da solicitação e erros não críticos. A tabela com o sufixo analysis_result é o resultado que lista as tuplas de {identity, role(s)/permission(s), resource} junto com as políticas do IAM que geram essas tuplas.

  4. Para conferir um conjunto de dados de amostra, selecione a guia Visualizar.

API

Para procurar os dados da tabela, chame tabledata.list. No parâmetro tableId, especifique o nome da sua tabela.

É possível configurar os seguintes parâmetros opcionais para controlar a saída.

  • maxResults é o número máximo de resultados a serem retornados.
  • selectedFields é uma lista de colunas separadas por vírgulas a ser retornada. Se não for especificado, todas as colunas serão retornadas.
  • startIndex é o índice baseado em zero da primeira linha a ser lida.

Os valores são retornados incorporados em um objeto JSON para análise, conforme descrito na documentação de referência de tabledata.list.

Consultar o BigQuery

Esta seção fornece exemplos de consultas SQL para mostrar como usar as tabelas do BigQuery gravadas por AnalyzeIamPolicyLongrunning. Para mais informações sobre a sintaxe do BigQuery, consulte Sintaxe de consulta SQL padrão.

OP_ID é necessário para a maioria das consultas. É possível recebê-lo na resposta AnalyzeIamPolicyLongrunning. Por exemplo, no gcloud, você encontrará OP_ID como 123456 em "Usar [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] para verificar o status da operação".

Listar operações

A tabela pode armazenar resultados de várias operações AnalyzeIamPolicyLongrunning. Use a seguinte consulta para listar todos eles:

SELECT DISTINCT
  requestTime,
  opName
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
ORDER BY 1 DESC
;

Listar análises em uma operação

Em uma operação AnalyzeIamPolicyLongrunning, pode haver vários registros de análise gerados. Por exemplo, quando você ativa a opção analyze_service_account_impersonation na solicitação, o resultado pode conter uma análise principal (com analysisId 0) e várias análises de representação de contas de serviço.

Use a consulta a seguir para encontrar toda a análise fornecendo um nome de operação.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisId,
  requestTime,
  TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery,
  analysis.fullyExplored,
  TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
WHERE opName=_opName
ORDER BY 1
;

Listar ACEs (Entradas de controle de acesso) em uma análise

Uma ACE é uma entrada de controle de acesso {identity, role(s)/permission(s), resource}. Você pode usar a consulta a seguir para listar as ACE em uma análise.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName
AND analysisId = 0
ORDER BY 1,2,3,4
;

Listar ACEs (Entradas no controle de acesso) com a vinculação de política do IAM em uma análise

Nessa consulta, listamos a ACE e a vinculação de política do IAM que gera essa ACE para uma análise.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission,
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2,3,4
;

Listar vinculações de políticas do IAM em uma análise

Nesta consulta, listamos as vinculações de política do IAM exibidas em uma análise.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`
WHERE opName=_opName AND analysisId = 0
ORDER BY 1, 2
;

Listar vinculações da política do IAM com a ACE (Entrada de controle de acesso) em uma análise

Nesta consulta, listamos as vinculações de política do IAM com as ACEs derivadas em uma análise.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding,
  TO_JSON_STRING(analysisResult.identityList.identities, true) as identities,
  TO_JSON_STRING(acls.accesses, true) as accesses,
  TO_JSON_STRING(acls.resources, true) as resources
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.accessControlLists) AS acls
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2
;