Crea y administra vistas autorizadas

En este documento, se describe cómo definir, crear y realizar otras operaciones administrativas en una vista autorizada con Google Cloud CLI. Antes de leer este documento, debes familiarizarte con la Descripción general de las vistas autorizadas.

Funciones obligatorias

Si quieres obtener los permisos que necesitas para realizar operaciones administrativas en una vista autorizada, pídele a tu administrador que te otorgue el rol de IAM Administrador de Bigtable (roles/bigtable.admin) en la tabla subyacente. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para realizar operaciones administrativas en una vista autorizada. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para realizar operaciones administrativas en una vista 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

Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.

Si deseas obtener información sobre cómo administrar las funciones de IAM de Bigtable a nivel de vista autorizada, consulta Administración de IAM a nivel de vista autorizada.

Crear una vista autorizada

Cuando crees una vista autorizada, ten en cuenta las consultas que se ejecutarán en ella. Las solicitudes de lectura, escritura y eliminación que se envían a una vista autorizada solo deben hacer referencia a los datos que se encuentran en la vista autorizada. Esto significa, por ejemplo, que si intentas leer, escribir o borrar una fila que tiene columnas en la tabla que no están en tu vista autorizada, la solicitud falla.

Para evitar una situación en la que las solicitudes de datos a una vista autorizada fallan debido a que se agregaron columnas a la tabla que no están en la vista autorizada, puedes especificar un prefijo de calificador de columna vacío “” para una familia de columnas.

Puedes especificar hasta 100 parámetros de definición por vista autorizada.

gcloud

Ejecuta el comando bigtable authorized-views create.

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

Reemplaza lo siguiente:

  • AUTHORIZED_VIEW_ID: Es un identificador permanente de la vista autorizada que aún no está en uso en la tabla.
  • INSTANCE_ID: El identificador permanente de la instancia que contiene la tabla
  • TABLE_ID: Es el identificador permanente de esa tabla de la que deseas crear una vista autorizada
  • DEFINITION_FILE_PATH: Es la ruta de acceso a una representación válida con formato JSON de una vista autorizada. Para ver ejemplos de archivos de definición con el formato correcto, consulta Ejemplos de archivos de definición.

También puedes ejecutar el comando sin proporcionar el archivo de definición. En este caso, gcloud CLI abre un editor y te solicita valores.

A fin de confirmar que se creó la vista autorizada, obtén una lista de vistas autorizadas para la tabla.

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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());
}

Cómo modificar una vista autorizada

gcloud

Modifica una vista autorizada con el comando bigtable authorized-views update.

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

Reemplaza lo siguiente:

  • AUTHORIZED_VIEW_ID: Es el identificador permanente de la vista autorizada.
  • INSTANCE_ID: el identificador permanente de la instancia.
  • TABLE_ID: Es el identificador permanente de la tabla de origen.
  • DEFINITION_FILE_PATH: Es la ruta de acceso a una representación válida con formato JSON de una vista autorizada. Para ver ejemplos de archivos de definición con el formato correcto, consulta Ejemplos de archivos de definición.

También puedes ejecutar el comando sin proporcionar el archivo de definición. En este caso, gcloud CLI abre un editor y te solicita valores.

Opcional: Para evitar que gcloud CLI muestre un mensaje de confirmación que muestre la diferencia entre la estructura de vistas autorizada actual y después de que se confirme la actualización, agrega la marca --no-interactive al comando.

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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());
}

Habilitar o inhabilitar la protección contra la eliminación

Si deseas habilitar la protección contra la eliminación para una vista autorizada, agrega --deletion-protection al comando de actualización.

Para inhabilitar la protección contra la eliminación, agrega no-deletion-protection al comando de actualización.

Borra una vista autorizada

Si borras una tabla, también se borrarán todas las vistas autorizadas de la tabla.

Si borras una vista autorizada, no podrás recuperarla. Sin embargo, si borras una tabla y, luego, la recuperas, todas las vistas autorizadas de la tabla se restablecen junto con la tabla. Luego, debes volver a configurar IAM para las vistas autorizadas y las tablas. Para obtener más información, consulta Cómo recuperar una tabla.

gcloud

Borra una vista autorizada con el comando bigtable instances tables authorized-views delete.

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

Reemplaza lo siguiente:

  • AUTHORIZED_VIEW_ID: Es el identificador permanente de la vista autorizada.
  • INSTANCE_ID: el identificador permanente de la instancia.
  • TABLE_ID: Es el identificador permanente de la tabla de origen.

Opcional: Para evitar que gcloud CLI muestre un mensaje de confirmación que requiera que confirmes o canceles la eliminación, agrega la marca --nointeractive al comando.

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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());
}

Obtén una lista de vistas autorizadas para una tabla

gcloud

Ejecuta el comando bigtable authorized-views list:

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

Reemplaza lo siguiente:

  • INSTANCE_ID: el identificador permanente de la instancia.
  • TABLE_ID: el identificador permanente de la tabla

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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());
}

Consulta los detalles de una vista autorizada

gcloud

Para obtener detalles sobre una vista autorizada, ejecuta el comando bigtable instances tables authorized-views describe:

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

Reemplaza lo siguiente:

  • INSTANCE_ID: el identificador permanente de la instancia.
  • TABLE_ID: el identificador permanente de la tabla
  • AUTHORIZED_VIEW_ID: Es el identificador permanente de la vista autorizada.

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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());
}

¿Qué sigue?