Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como gravar análises 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 das políticas de IAM, exceto pelo fato do resultado da análise ser gravado nas tabelas do BigQuery.

Antes de começar

  • É necessário ativar a API Cloud Asset no seu projeto.

  • Se você estiver usando a API para executar essas consultas, precisará configurar o ambiente e gcurl.

    1. Configure o ambiente.

    2. Para configurar um alias do gcurl, conclua as seguintes etapas

      Se você estiver em uma instância do Compute Engine, execute o seguinte comando.

      alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json" -X POST'
      

      Se você não estiver em uma instância do Compute Engine, execute o seguinte comando.

      alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
      -H "Content-Type: application/json" -X POST'
      

      Em que CREDENTIALS é o caminho do arquivo de credenciais, como ~/credentials.json.

Chamando AnalyzeIamPolicyLongrunning

O método AnalyzeIamPolicyLongrunning permite emitir uma solicitação de análise e receber resultados no destino do BigQuery especificado.

gcloud

É possível chamar AnalyzeIamPolicyLongrunning no projeto com API ativada usando o comando do gcloud asset analyze-iam-policy-longrunning. É preciso executar o SDK do Cloud versão 314.0.0 ou posterior. Para verificar sua versão, use o comando gcloud version.

gcloud asset analyze-iam-policy-longrunning \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --bigquery-dataset="projects/BQ_PROJECT_ID/datasets/BQ_DATASET_NAME" \
    --bigquery-table-prefix="BQ_TABLE_PREFIX"

Por exemplo, para gravar resultados de análise de quem tem permissões compute.instances.get e compute.instances.start na instância do Compute Engine ipa-gce-instance-2 no órgão 123456789 do BigQuery para o conjunto de dados do BigQuery projects/project1/datasets/bq-dataset-01 com um prefixo de tabela como some_prefix, faça o seguinte:

gcloud asset analyze-iam-policy-longrunning --organization=123456789 \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --permissions="compute.instances.get,compute.instances.start" \
    --bigquery-dataset="projects/project1/datasets/bq-dataset-01" \
    --bigquery-table-prefix="some_prefix"

Saiba mais na ajuda:

gcloud asset analyze-iam-policy-longrunning --help

REST

Analise as políticas do IAM e grave os resultados usando o alias gcurl.

gcurl -d "$JSON_REQUEST" \
"https://cloudasset.googleapis.com/v1/organizations/${YOUR_ORG_ID}:analyzeIamPolicyLongrunning"

Em que:

  • YOUR_ORG_ID é o ID da organização, como: 123456789

  • JSON_REQUEST é a solicitação de análise no formato JSON. Por exemplo, para analisar quem tem permissões compute.instances.get e compute.instances.start na instância do Compute Engine ipa-gce-instance-2 na organização 123456789 para o conjunto de dados do BigQuery projects/project1/datasets/bq-dataset-01 com um prefixo de tabela como some_prefix, faça o seguinte:

    JSON_REQUEST='{
      "analysisQuery":{
         "scope":"organization/123456789",
         "resourceSelector":{
            "fullResourceName":"//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
         "accessSelector":{
            "permissions":[
               "compute.instances.get",
               "compute.instances.start"
            ]
         }
      },
      "outputConfig":{
         "bigqueryDestination":{
            "dataset":"projects/project1/datasets/bq-dataset-01",
            "tablePrefix":"some_prefix"
         }
      }
    }'
    

Como definir a chave de partição

As tabelas do BigQuery podem ser particionadas, o que pode melhorar o desempenho da consulta e reduzir o custo da consulta filtrando partições. As seguintes chaves de partição são compatíveis:

  • REQUEST_TIME: o momento em que a solicitação é recebida.

Como definir a disposição de gravação

Especifica a ação que ocorre se a tabela ou partição de destino já existir. Consulte também disposição de gravação no BigQuery. Os valores a seguir são compatíveis:

  • WRITE_APPEND: valor padrão. Anexa os dados à tabela ou à partição mais recente.
  • WRITE_TRUNCATE: substitui toda a tabela ou todos os dados das partições.
  • WRITE_EMPTY: retorna um erro.

Como ver os resultados da análise de política do IAM

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

Console

  1. Acesse a página do BigQuery no Console do Cloud.
    Acessar a página do BigQuery

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

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

  4. Para visualizar um conjunto de dados de amostra, selecione 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.

Como criar uma consulta

Para saber mais sobre outros casos de uso e opções para consultas, veja como analisar exemplos de consultas de políticas do IAM.

Como consultar o BigQuery

Nesta seção, apresentamos exemplos de consultas SQL para mostrar como usar tabelas do BigQuery escritas 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
;