Criar e gerenciar visualizações autorizadas

Este documento descreve como definir, criar e executar outras operações administrativas em uma visualização autorizada usando a CLI do Google Cloud. Antes de você leia este documento, você deve estar familiarizado com a Visão geral de visualizações autorizadas.

Funções exigidas

Para receber as permissões necessárias para executar operações administrativas em uma visualização autorizada, peça ao administrador para conceder a você o papel do IAM Administrador do Bigtable (roles/bigtable.admin) na tabela. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para executar operações administrativas em uma visualização autorizada , 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 realizar operações administrativas em uma visualização autorizada:

  • bigtable.authorizedViews.get
  • bigtable.authorizedViews.list
  • bigtable.authorizedViews.create
  • bigtable.authorizedViews.update
  • bigtable.authorizedViews.delete
  • bigtable.authorizedViews.getIamPolicy
  • bigtable.authorizedViews.setIamPolicy
  • bigtable.authorizedViews.readRows
  • bigtable.authorizedViews.sampleRowKeys
  • bigtable.authorizedViews.mutateRows

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

Para saber como gerenciar os papéis do IAM do Bigtable na visualização autorizada consulte as informações sobre IAM autorizado de configuração.

Criar uma visualização autorizada

Ao criar uma visualização autorizada, considere as consultas que serão executar com ele. As solicitações de leitura, gravação e exclusão enviadas para uma visualização autorizada precisam referenciar apenas os dados que estão na visualização autorizada. Isso significa, por exemplo, que, se você tentar ler, gravar ou excluir uma linha que tenha colunas na tabela que não estão na sua visualização autorizada, a solicitação falhará.

Para evitar uma situação em que as solicitações de dados para uma visualização autorizada falhem porque colunas foram adicionadas à tabela que não estão na visualização autorizada, especifique um prefixo de qualificador de coluna vazio "" para um grupo de colunas.

É possível especificar até 100 parâmetros de definição por visualização autorizada.

gcloud

Execute o comando bigtable authorized-views create.

gcloud bigtable authorized-views create AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

Substitua:

  • AUTHORIZED_VIEW_ID: um identificador permanente da visualização autorizada que ainda não está em uso na tabela
  • INSTANCE_ID: o identificador permanente da instância. que contém a tabela
  • TABLE_ID: o identificador permanente da tabela que você está criar uma visualização autorizada do
  • DEFINITION_FILE_PATH: o caminho para uma representação válida formatada em JSON de uma visualização autorizada. Para exemplos de respostas corretas, de definições formatados, consulte Arquivo de definição exemplos.

Também é possível executar o comando sem fornecer o arquivo de definição. Nesse caso, a CLI gcloud abre um editor e solicita valores.

Para confirmar que a visualização autorizada foi criada, confira uma lista de visualizações autorizadas para a tabela.

Java

Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.

Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

try {
  CreateAuthorizedViewRequest request =
      CreateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY,
                      FamilySubsets.create().addQualifierPrefix(COLUMN_QUALIFIER_NAME)));
  AuthorizedView authorizedView = adminClient.createAuthorizedView(request);
  System.out.printf("AuthorizedView: %s created successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println(
      "Failed to create an authorized view from a non-existent table: " + e.getMessage());
}

Modificar uma visualização autorizada

gcloud

Modifique uma visualização autorizada usando o comando bigtable authorized-views update.

gcloud bigtable authorized-views update AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

Substitua:

  • AUTHORIZED_VIEW_ID: o identificador permanente do visualização autorizada
  • INSTANCE_ID: identificador permanente da instância;
  • TABLE_ID: o identificador permanente da tabela de origem.
  • DEFINITION_FILE_PATH: o caminho para uma representação válida formatada em JSON de uma visualização autorizada. Para exemplos de respostas corretas, de definições formatados, consulte Arquivo de definição exemplos.

Também é possível executar o comando sem fornecer o arquivo de definição. Nesse caso, a CLI gcloud abre um editor e solicita valores.

Opcional: para impedir que a CLI gcloud mostre uma confirmação comando mostrando a diferença entre a visualização autorizada atual e, após o commit da atualização, anexe a flag --no-interactive ao comando.

Java

Para aprender a instalar e usar a biblioteca de cliente para o Bigtable, consulte Bibliotecas de cliente do Bigtable.

Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

try {
  // Update to an authorized view permitting everything.
  UpdateAuthorizedViewRequest request =
      UpdateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY, FamilySubsets.create().addQualifierPrefix("")));
  AuthorizedView authorizedView = adminClient.updateAuthorizedView(request);
  System.out.printf("AuthorizedView: %s updated successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println("Failed to modify a non-existent authorized view: " + e.getMessage());
}

Ativar ou desativar a proteção contra exclusão

Para ativar a proteção contra exclusão em uma visualização autorizada, adicione --deletion-protection ao comando de atualização.

Para desativar a proteção contra exclusão, adicione no-deletion-protection ao comando de atualização.

Excluir uma visualização autorizada

Se você excluir uma tabela, todas as visualizações autorizadas dela também serão excluídas.

Não é possível desfazer a exclusão de uma visualização autorizada. No entanto, se você excluir uma tabela e depois desfazer a exclusão, todas as visualizações autorizadas dela serão restauradas. Depois, é preciso reconfigurar o IAM para as visualizações autorizadas e as tabelas. Para mais detalhes, consulte Cancelar exclusão uma tabela.

gcloud

Exclua uma visualização autorizada usando o comando bigtable instances tables authorized-views delete.

gcloud bigtable authorized-views delete AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

Substitua:

  • AUTHORIZED_VIEW_ID: o identificador permanente do visualização autorizada
  • INSTANCE_ID: identificador permanente da instância;
  • TABLE_ID: o identificador permanente da tabela de origem

Opcional: para impedir que a CLI gcloud mostre uma confirmação solicitando que você confirme ou cancele a exclusão, anexe o sinalização --nointeractive ao comando.

Java

Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.

Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

try {
  adminClient.deleteAuthorizedView(tableId, authorizedViewId);
  System.out.printf("AuthorizedView: %s deleted successfully%n", authorizedViewId);
} catch (NotFoundException e) {
  System.err.println("Failed to delete a non-existent authorized view: " + e.getMessage());
}

Conseguir uma lista de visualizações autorizadas para uma tabela

gcloud

Execute o comando bigtable authorized-views list:

gcloud bigtable authorized-views list \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

Substitua:

  • INSTANCE_ID: identificador permanente da instância;
  • TABLE_ID: identificador permanente da tabela;

Java

Para aprender a instalar e usar a biblioteca de cliente para o Bigtable, consulte Bibliotecas de cliente do Bigtable.

Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

List<String> authorizedViewIds = new ArrayList<>();
try {
  authorizedViewIds = adminClient.listAuthorizedViews(tableId);
  for (String authorizedViewId : authorizedViewIds) {
    System.out.println(authorizedViewId);
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to list authorized views from a non-existent table: " + e.getMessage());
}

Conferir detalhes sobre uma visualização autorizada

gcloud

Para acessar detalhes sobre uma visualização autorizada, execute o comando bigtable instances tables authorized-views describe:

gcloud bigtable authorized-views describe \
–-instance=INSTANCE_ID \
–-table=TABLE_ID \
–-view=AUTHORIZED_VIEW_ID

Substitua:

  • INSTANCE_ID: identificador permanente da instância;
  • TABLE_ID: identificador permanente da tabela;
  • AUTHORIZED_VIEW_ID: identificador permanente da visualização autorizada.

Java

Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.

Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

AuthorizedView authorizedView = null;
try {
  authorizedView = adminClient.getAuthorizedView(tableId, authorizedViewId);
  SubsetView subsetView = (SubsetView) authorizedView.getAuthorizedViewType();

  for (ByteString rowPrefix : subsetView.getRowPrefixes()) {
    System.out.printf("Row Prefix: %s%n", rowPrefix.toStringUtf8());
  }
  for (Map.Entry<String, FamilySubsets> entry : subsetView.getFamilySubsets().entrySet()) {
    for (ByteString qualifierPrefix : entry.getValue().getQualifierPrefixes()) {
      System.out.printf(
          "Column Family: %s, Qualifier Prefix: %s%n",
          entry.getKey(), qualifierPrefix.toStringUtf8());
    }
    for (ByteString qualifier : entry.getValue().getQualifiers()) {
      System.out.printf(
          "Column Family: %s, Qualifier: %s%n", entry.getKey(), qualifier.toStringUtf8());
    }
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to retrieve metadata from a non-existent authorized view: " + e.getMessage());
}

A seguir