Criar e gerenciar visualizações autorizadas

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

Funções exigidas

Para ter as permissões necessárias executar operações administrativas em uma visualização autorizada , peça ao administrador para conceder a você Papel do IAM Administrador do Bigtable (roles/bigtable.admin) a tabela subjacente; do Google. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Esse papel predefinido contém as permissões necessárias para executar operações administrativas em uma visualização autorizada do Google. Para conferir 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 executar 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 que são enviadas para um visualização autorizada só pode fazer referência aos dados visualização autorizada. Isso significa, por exemplo, que, se você tentar ler, gravar ou excluir uma linha que contenha colunas na tabela que não estão em seu visualização autorizada, a solicitação falhará.

Para evitar uma situação em que há falha nas solicitações de dados para uma visualização autorizada porque foram adicionadas à tabela colunas que não estão na visualização autorizada, é possível especificar 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 para o 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 um JSON válido formatado representação 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. Neste caso, a CLI gcloud abre um editor e solicita os valores.

Para confirmar que a visualização autorizada foi criada, conseguir uma lista de visualizações autorizadas para a 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.

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 um JSON válido formatado representação 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. Neste caso, a CLI gcloud abre um editor e solicita os 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, em seguida, cancelar a exclusão da tabela, todas as visualizações autorizadas da da tabela são restaurados com ela. 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 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 {
  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());
}

Mostrar 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: o identificador permanente do visualização autorizada

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.

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