Créer et gérer des vues autorisées

Ce document explique comment définir, créer et effectuer d'autres opérations administratives sur une vue autorisée à l'aide de la Google Cloud CLI. Avant de lire ce document, vous devez connaître la présentation des vues autorisées.

Rôles requis

Pour obtenir les autorisations dont vous avez besoin pour effectuer des opérations administratives sur une vue autorisée, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur Bigtable (roles/bigtable.admin) pour la table sous-jacente. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ce rôle prédéfini contient les autorisations requises pour effectuer des opérations administratives sur une vue autorisée. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour effectuer des opérations d'administration sur une vue autorisée :

  • 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

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur la gestion des rôles IAM Bigtable au niveau d'une vue autorisée, consultez la page Gestion IAM au niveau de la vue autorisée.

Créer une vue autorisée

Lorsque vous créez une vue autorisée, tenez compte des requêtes qui seront exécutées sur celle-ci. Les requêtes de lecture, d'écriture et de suppression envoyées à une vue autorisée ne doivent référencer que des données figurant dans cette vue. Cela signifie, par exemple, que si vous essayez de lire, d'écrire ou de supprimer une ligne contenant des colonnes de la table qui ne figurent pas dans votre vue autorisée, la requête échoue.

Pour éviter une situation où les requêtes de données vers une vue autorisée échouent en raison de l'ajout de colonnes à la table qui ne se trouvent pas dans la vue autorisée, vous pouvez spécifier un préfixe de qualificatif de colonne vide "" pour une famille de colonnes.

Vous pouvez spécifier jusqu'à 100 paramètres de définition par vue autorisée.

gcloud

Exécutez la commande bigtable authorized-views create.

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

Remplacez les éléments suivants :

  • AUTHORIZED_VIEW_ID: identifiant permanent de la vue autorisée qui n'est pas déjà utilisé pour la table
  • INSTANCE_ID: identifiant permanent de l'instance contenant la table
  • TABLE_ID: identifiant permanent de la table pour laquelle vous créez une vue autorisée
  • DEFINITION_FILE_PATH: chemin d'accès à une représentation d'une vue autorisée au format JSON valide. Pour obtenir des exemples de fichiers de définition correctement mis en forme, consultez Exemples de fichiers de définition.

Vous pouvez également exécuter la commande sans fournir le fichier de définition. Dans ce cas, la gcloud CLI ouvre un éditeur et vous invite à saisir des valeurs.

Pour vérifier que la vue autorisée a bien été créée, obtenez la liste des vues autorisées pour la table.

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Bigtable, consultez la page Bibliothèques clientes Bigtable.

Pour vous authentifier auprès de Bigtable, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
}

Modifier une vue autorisée

gcloud

Modifiez une vue autorisée à l'aide de la commande bigtable authorized-views update.

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

Remplacez les éléments suivants :

  • AUTHORIZED_VIEW_ID: identifiant permanent de la vue autorisée
  • INSTANCE_ID : identifiant permanent de l'instance.
  • TABLE_ID: identifiant permanent de la table source
  • DEFINITION_FILE_PATH: chemin d'accès à une représentation d'une vue autorisée au format JSON valide. Pour obtenir des exemples de fichiers de définition correctement mis en forme, consultez Exemples de fichiers de définition.

Vous pouvez également exécuter la commande sans fournir le fichier de définition. Dans ce cas, la gcloud CLI ouvre un éditeur et vous invite à saisir des valeurs.

Facultatif: Pour empêcher la gcloud CLI d'afficher une invite de confirmation indiquant la différence entre la structure de vue actuellement autorisée et une fois la mise à jour validée, ajoutez l'option --no-interactive à la commande.

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Bigtable, consultez la page Bibliothèques clientes Bigtable.

Pour vous authentifier auprès de Bigtable, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
}

Activer ou désactiver la protection contre la suppression

Pour activer la protection contre la suppression pour une vue autorisée, ajoutez --deletion-protection à la commande de mise à jour.

Pour désactiver la protection contre la suppression, ajoutez no-deletion-protection à la commande de mise à jour.

Supprimer une vue autorisée

Si vous supprimez une table, toutes les vues autorisées de celle-ci sont également supprimées.

La suppression d'une vue autorisée ne peut pas être annulée. Toutefois, si vous supprimez une table, puis que vous annulez sa suppression, toutes les vues autorisées de celle-ci sont restaurées, en même temps que la table. Vous devez ensuite reconfigurer IAM pour les vues autorisées ainsi que pour les tables. Pour en savoir plus, consultez Annuler la suppression d'une table.

gcloud

Supprimez une vue autorisée à l'aide de la commande bigtable instances tables authorized-views delete.

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

Remplacez les éléments suivants :

  • AUTHORIZED_VIEW_ID: identifiant permanent de la vue autorisée
  • INSTANCE_ID : identifiant permanent de l'instance.
  • TABLE_ID: identifiant permanent de la table source

Facultatif: Pour empêcher la gcloud CLI d'afficher une invite de confirmation vous demandant de confirmer ou d'annuler la suppression, ajoutez l'option --nointeractive à la commande.

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Bigtable, consultez la page Bibliothèques clientes Bigtable.

Pour vous authentifier auprès de Bigtable, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
}

Obtenir la liste des vues autorisées pour une table

gcloud

Exécutez la commande bigtable authorized-views list :

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

Remplacez les éléments suivants :

  • INSTANCE_ID : identifiant permanent de l'instance.
  • TABLE_ID : identifiant permanent de la table.

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Bigtable, consultez la page Bibliothèques clientes Bigtable.

Pour vous authentifier auprès de Bigtable, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
}

Afficher les détails d'une vue autorisée

gcloud

Pour obtenir des informations sur une vue autorisée, exécutez la commande bigtable instances tables authorized-views describe:

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

Remplacez les éléments suivants :

  • INSTANCE_ID : identifiant permanent de l'instance.
  • TABLE_ID : identifiant permanent de la table.
  • AUTHORIZED_VIEW_ID: identifiant permanent de la vue autorisée

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Bigtable, consultez la page Bibliothèques clientes Bigtable.

Pour vous authentifier auprès de Bigtable, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
}

Étapes suivantes