Escreva a análise de políticas no BigQuery

Esta página explica como analisar políticas de gestão de identidade e de acesso (IAM) de forma assíncrona e escrever resultados no BigQuery. O processo é semelhante à análise de políticas de IAM, exceto que o resultado da análise é escrito em tabelas do BigQuery.

Antes de começar

Enable the Cloud Asset API.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the API

Tem de ativar a API no projeto que vai usar para enviar a consulta. Não tem de ser o mesmo recurso ao qual restringe a sua consulta.

Funções e autorizações necessárias

As seguintes funções e autorizações são necessárias para executar uma análise de políticas e exportar os resultados para o BigQuery.

Funções de IAM necessárias

Para receber as autorizações de que precisa para analisar uma política e exportar os resultados para o BigQuery, peça ao seu administrador que lhe conceda as seguintes funções de IAM no projeto, na pasta ou na organização ao qual vai restringir a sua consulta:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para analisar uma política e exportar os resultados para o BigQuery. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações 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 funções de IAM personalizadas: iam.roles.get
  • Para usar a CLI do Google Cloud para analisar políticas: serviceusage.services.use

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Autorizações do Google Workspace necessárias

Se quiser ver se um principal tem determinadas funções ou autorizações como resultado da respetiva associação a um grupo do Google Workspace, precisa da autorização do Google Workspace.groups.read Esta autorização está contida na função de administrador do leitor de grupos e em funções mais poderosas, como as funções de administrador de grupos ou superadministrador. Consulte o artigo Atribua funções de administrador específicas para mais informações.

Analise políticas e exporte resultados

Consola

  1. Na Google Cloud consola, aceda à página Analisador de políticas.

    Aceda ao Analisador de políticas

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

  3. No campo Selecionar âmbito da consulta, selecione o projeto, a pasta ou a organização ao qual quer restringir a consulta. O Analisador de políticas vai analisar o acesso a esse projeto, pasta ou organização, bem como a todos os recursos nesse projeto, pasta ou organização.

  4. Certifique-se de que os parâmetros de consulta estão definidos:

    • Se estiver a usar um modelo de consulta, confirme os parâmetros de consulta pré-preenchidos.
    • Se estiver a criar uma consulta personalizada, defina os recursos, os responsáveis, as funções e as autorizações para os quais quer consultar.

    Para mais informações sobre os tipos de consultas que pode criar, consulte o artigo Analise as políticas de IAM.

  5. No painel etiquetado com o nome da consulta, clique em Analisar > Exportar apenas o resultado. É aberto o painel Exportar resultados.

  6. Na secção Defina o destino da exportação, introduza as seguintes informações:

    • Projeto: o projeto onde o seu conjunto de dados do BigQuery está localizado.
    • Conjunto de dados: o conjunto de dados do BigQuery para o qual quer exportar os resultados.
    • Tabela: o prefixo das tabelas do BigQuery nas quais os resultados da análise serão escritos. Se não existir uma tabela com o prefixo especificado, o BigQuery cria uma nova tabela.
  7. Clique em Continuar.

  8. Opcional: na secção Configure definições adicionais, selecione as opções pretendidas:

    • Partição: se a tabela deve ser particionada. Para saber mais sobre as tabelas particionadas, consulte o artigo Introdução às tabelas particionadas.
    • Preferência de escrita: especifica a ação que ocorre se a tabela ou a partição de destino já existir. Por predefinição, se a tabela ou a partição já existir, o BigQuery anexa os dados à tabela ou à partição mais recente.
  9. Clique em Exportar.

O Analisador de políticas executa a consulta e exporta os resultados para a tabela especificada.

gcloud

O método AnalyzeIamPolicyLongrunning permite-lhe emitir um pedido de análise e obter resultados no destino do BigQuery especificado.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • RESOURCE_TYPE: o tipo de recurso ao qual quer restringir a sua pesquisa. Apenas as políticas de autorização da IAM anexadas a este recurso e aos respetivos descendentes são analisadas. Use o valor project, folder ou organization.
  • RESOURCE_ID: o ID do projeto, da pasta ou da organização ao qual quer restringir a sua pesquisa.Google Cloud Apenas as políticas de autorização do IAM anexadas a este recurso e aos respetivos descendentes vão ser analisadas. Os IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.
  • PRINCIPAL: o principal cujo acesso quer analisar, no formato PRINCIPAL_TYPE:ID, por exemplo, user:my-user@example.com. Para ver uma lista completa dos tipos principais, consulte o artigo Identificadores principais.
  • PERMISSIONS: uma lista separada por vírgulas das autorizações que quer verificar. Por exemplo, compute.instances.get,compute.instances.start. Se indicar várias autorizações, o Analisador de políticas verifica se existe alguma das autorizações indicadas.
  • DATASET: O conjunto de dados do BigQuery no formato projects/PROJECT_ID/datasets/DATASET_ID, onde PROJECT_ID é o ID alfanumérico do seu projeto Google Cloud e DATASET_ID é o ID do seu conjunto de dados.
  • TABLE_PREFIX: o prefixo das tabelas do BigQuery nas quais os resultados da análise vão ser escritos. Se não existir uma tabela com o prefixo especificado, o BigQuery cria uma nova tabela.
  • PARTITION_KEY: opcional. A chave de partição para a tabela particionada do BigQuery. O analisador de políticas só suporta chaves de partição REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica a ação que ocorre se a tabela ou a partição de destino já existir. Para ver uma lista de valores possíveis, consulte writeDisposition. Por predefinição, se a tabela ou a partição já existir, a app BigQuery anexa 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

Deve receber uma resposta semelhante à seguinte:

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-lhe emitir um pedido de análise e obter resultados no destino do BigQuery especificado.

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

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • RESOURCE_TYPE: o tipo de recurso ao qual quer restringir a sua pesquisa. Apenas as políticas de autorização da IAM anexadas a este recurso e aos respetivos descendentes são analisadas. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: o ID do projeto, da pasta ou da organização ao qual quer restringir a sua pesquisa.Google Cloud Apenas as políticas de autorização do IAM anexadas a este recurso e aos respetivos descendentes vão ser analisadas. Os IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.
  • FULL_RESOURCE_NAME: opcional. O nome completo do recurso para o qual quer analisar o acesso. Para ver uma lista de formatos de nomes de recursos completos, consulte o artigo Formato do nome do recurso.
  • PRINCIPAL: opcional. O principal cujo acesso quer analisar, no formato PRINCIPAL_TYPE:ID, por exemplo, user:my-user@example.com. Para ver uma lista completa dos tipos principais, consulte o artigo Identificadores principais.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: opcional. As autorizações que quer verificar, por exemplo, compute.instances.get. Se listar várias autorizações, o Analisador de políticas verifica se alguma das autorizações indicadas está presente.
  • DATASET: O conjunto de dados do BigQuery no formato projects/PROJECT_ID/datasets/DATASET_ID, onde PROJECT_ID é o ID alfanumérico do seu projeto Google Cloud e DATASET_ID é o ID do seu conjunto de dados.
  • TABLE_PREFIX: o prefixo das tabelas do BigQuery nas quais os resultados da análise vão ser escritos. Se não existir uma tabela com o prefixo especificado, o BigQuery cria uma nova tabela.
  • PARTITION_KEY: opcional. A chave de partição para a tabela particionada do BigQuery. O analisador de políticas só suporta chaves de partição REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica a ação que ocorre se a tabela ou a partição de destino já existir. Para ver uma lista de valores possíveis, consulte writeDisposition. Por predefinição, se a tabela ou a partição já existir, a app BigQuery anexa 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 do pedido:

{
  "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 o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

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

Veja os resultados da análise de políticas IAM

Para ver os resultados da análise de políticas de IAM:

Consola

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. Para apresentar as tabelas e as vistas no conjunto de dados, abra o painel de navegação. Na secção Explorador, selecione o seu projeto para o expandir e, de seguida, selecione um conjunto de dados.

  3. Na lista, selecione as tabelas com o seu prefixo. A tabela com o sufixo analysis contém a consulta e os metadados (por exemplo, o nome da operação, a hora do pedido e os erros não críticos). A tabela com o sufixo analysis_result apresenta tuplos de {identity, role(s)/permission(s), resource} juntamente com as políticas de IAM que geram esses tuplos.

  4. Para ver um conjunto de dados de amostra, selecione o separador Pré-visualização.

API

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

Pode configurar os seguintes parâmetros opcionais para controlar o resultado.

  • maxResults é o número máximo de resultados a devolver.
  • selectedFields é uma lista de colunas separadas por vírgulas a devolver; se não for especificado, são devolvidas todas as colunas.
  • startIndex é o índice baseado em zero da linha inicial a ler.

Os valores são devolvidos envolvidos num objeto JSON que tem de analisar, conforme descrito na documentação de referência tabledata.list.

Consultar o BigQuery

Esta secção fornece exemplos de consultas SQL para mostrar como usar tabelas do BigQuery escritas pelo AnalyzeIamPolicyLongrunning. Para mais informações sobre a sintaxe do BigQuery, consulte a sintaxe de consulta SQL padrão.

OP_ID é necessário para a maioria das consultas. Pode obtê-lo na resposta de AnalyzeIamPolicyLongrunning. Por exemplo, no gcloud, vai encontrar OP_ID é 123456 em "Use [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] to check the status of the operation.".

Apresentar operações

A sua tabela pode armazenar os resultados de várias operações.AnalyzeIamPolicyLongrunning Pode usar a seguinte consulta para apresentar uma lista de todos os grupos de anúncios:

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

Apresentar análises numa operação

Numa operação AnalyzeIamPolicyLongrunning, podem ser gerados vários registos de análise. Por exemplo, quando ativa a opção analyze_service_account_impersonation no seu pedido, o resultado pode conter uma análise principal (com o ID de análise 0) e várias análises de roubo de identidade da conta de serviço.

Pode usar a seguinte consulta para saber todas as análises através de 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
;

Liste ACEs(Access Control Entries) numa análise

Uma ACE é uma Access Control Entry {identity, role(s)/permission(s), resource}. Pode usar a seguinte consulta para listar o ACE numa 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
;

Apresente ACEs(Access Control Entries) com associação de políticas IAM numa análise

Nesta consulta, listamos a ACE e a associação da política de IAM que gera esta 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
;

Apresente associações de políticas IAM numa análise

Nesta consulta, listamos as associações de políticas de IAM apresentadas numa 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
;

Liste as associações de políticas da IAM com ACE(Access Control Entry) numa análise

Nesta consulta, listamos as associações de políticas de IAM com os respetivos ACEs derivados numa 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
;