Accorder le rôle "tagTemplateUser"

Après avoir créé un modèle de tag Data Catalog dans votre projet, vous pouvez accorder le rôle tagTemplateUser de Data Catalog aux membres de votre organisation pour leur permettre d'utiliser votre modèle pour ajouter des tags aux ressources de données (consultez la section Associer des tags aux ressources GCP).

La section suivante décrit comment accorder le rôle tagTemplateUser aux membres.

Attribuer le rôle "tagTemplateUser"

Console

Pour accorder le rôle tagTemplateUser de Data Catalog au membre de votre projet, cliquez sur l'icône de modification (crayon) située à droite de la fiche du membre sur la page IAM de Google Cloud Console.

La boîte de dialogue "Modifier les autorisations" s'affiche. Cliquez sur "Ajouter un autre rôle", puis cochez la case "Sélectionner un rôle". Ajoutez un filtre en saisissant "data catalog" pour répertorier les rôles Data Catalog disponibles. Cliquez sur le rôle "Data Catalog TagTemplate User" (Utilisateur de modèles de tag Data Catalog) pour sélectionner le rôle, puis cliquez sur "Enregistrer" pour fermer la boîte de dialogue.

Python

"""This application demonstrates how to allow a project member to use a
Template in order to create Tags with the Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
"""

import argparse
from google.cloud import datacatalog_v1

def grant_tag_template_user_role(project_id, template_id, member_id):
    """Grants a user the Tag Template User role for a given template."""
    datacatalog = datacatalog_v1.DataCatalogClient()

    # Currently, Data Catalog stores metadata in the us-central1 region.
    location = "us-central1"

    # Format the Template name.
    template_name = datacatalog_v1.DataCatalogClient.tag_template_path(
        project_id, location, template_id)

    # Retrieve Template's current IAM Policy.
    policy = datacatalog.get_iam_policy(template_name)

    # Add Tag Template User role and member to the policy.
    binding = policy.bindings.add()
    binding.role = 'roles/datacatalog.tagTemplateUser'
    binding.members.append(member_id)

    # Update Template's policy.
    datacatalog.set_iam_policy(template_name, policy)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )

    parser.add_argument('project_id', help='Your Google Cloud project ID')
    parser.add_argument('template_id', help='Your Template ID')
    parser.add_argument('member_id', help='Member who will be granted access,'
                                          ' e.g. \'user:test-user@gmail.com\'')

    args = parser.parse_args()

    grant_tag_template_user_role(
        args.project_id, args.template_id, args.member_id)

Java

/*
This application demonstrates how to allow a project member to use a
Template in order to create Tags with the Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
*/

package com.example.datacatalog;

import com.google.cloud.datacatalog.v1.DataCatalogClient;
import com.google.cloud.datacatalog.v1.TagTemplateName;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;

public class AllowMemberUseTemplate {

  public static void grantTagTemplateUserRole() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String tagTemplateId = "my_tag_template";
    String memberId = "user:test-user@gmail.com";
    grantTagTemplateUserRole(projectId, tagTemplateId, memberId);
  }

  /**
   * Grant a project member the Tag Template User role for a given template.
   *
   * @param projectId  The project ID to which the Template belongs, e.g. 'my-project'.
   * @param templateId The template ID to grant access, e.g. 'my_template'.
   * @param memberId   The member ID who access will be granted to, e.g. 'user:test-user@gmail.com'.
   */
  public static void grantTagTemplateUserRole(
      String projectId, String templateId, String memberId) {

    // Currently, Data Catalog stores metadata in the us-central1 region.
    String location = "us-central1";

    // Format the Template name.
    String templateName =
        TagTemplateName.newBuilder()
            .setProject(projectId)
            .setLocation(location)
            .setTagTemplate(templateId)
            .build()
            .toString();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DataCatalogClient dataCatalogClient = DataCatalogClient.create()) {

      // Create a Binding to add the Tag Template User role and member to the policy.
      Binding binding =
          Binding.newBuilder()
              .setRole("roles/datacatalog.tagTemplateUser")
              .addMembers(memberId)
              .build();

      // Create a Policy object to update Template's IAM policy by adding the new binding.
      Policy policyUpdate =
          Policy.newBuilder()
              .addBindings(binding)
              .build();

      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder().setPolicy(policyUpdate)
          .setResource(templateName).build();

      // Update Template's policy.
      dataCatalogClient.setIamPolicy(request);

      System.out.println(String.format("Role successfully granted to %s", memberId));

    } catch (Exception e) {
      System.out.print("Error during AllowMemberUseTemplate:\n" + e.toString());
    }
  }
}

Node.js

/**
 * This application demonstrates how to grant a project member
 * the Tag Template User role for a given template.

 * For more information, see the README.md under /datacatalog and the
 * documentation at https://cloud.google.com/data-catalog/docs.
*/

const main = async (
    projectId = process.env.GCLOUD_PROJECT,
    templateId,
    memberId
) => {
    // -------------------------------
    // Import required modules.
    // -------------------------------
    const { DataCatalogClient } = require('@google-cloud/datacatalog').v1;
    const datacatalog = new DataCatalogClient();

    const location = 'us-central1';

    // Format the Template name.
    const templateName = datacatalog.tagTemplatePath(
        projectId,
        location,
        templateId
    );

    // Retrieve Template's current IAM Policy.
    const [getPolicyResponse] = await datacatalog.getIamPolicy({ resource: templateName });
    const policy = getPolicyResponse;

    // Add Tag Template User role and member to the policy.
    policy.bindings.push({
        role: 'roles/datacatalog.tagTemplateUser',
        members: [memberId],
    });

    const request = {
        resource: templateName,
        policy: policy,
    };

    // Update Template's policy.
    const [updatePolicyResponse] = await datacatalog.setIamPolicy(request);
    console.log(`Iam policy: ${JSON.stringify(updatePolicyResponse)}`);
};

// node grantTagTemplateUserRole.js   
// sample values:
// projectId = 'my-project';
// templateId = 'my-template';
// memberId = 'user:member@gmail.com';
main(...process.argv.slice(2));

API REST et ligne de commande

Si vous n'avez pas accès aux bibliothèques clientes cloud pour votre langage ou si vous souhaitez tester l'API à l'aide de requêtes REST, consultez les exemples suivants et la documentation API REST de Data Catalog.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID du projet GCP
  • template-id : ID du modèle de tag

Méthode HTTP et URL :

POST https://datacatalog.googleapis.com/v1/projects/project-id/locations/us-central1/tagTemplates/template-id:setIamPolicy

Corps JSON de la requête :

{
  "policy":{
    "bindings":[
      {
        "role":"roles/datacatalog.tagTemplateUser",
        "members":[
          "user:username@gmail.com"
        ]
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "version":1,
  "etag":"xxxxx.....",
  "bindings":[
    {
      "role":"roles/datacatalog.tagTemplateUser",
      "members":[
        "user:username@gmail.com"
      ]
    }
  ]
}