Se connecter à Blob Storage

En tant qu'administrateur BigQuery, vous pouvez créer une connexion pour permettre aux analystes de données d'accéder aux données stockées dans Azure Blob Storage.

BigQuery Omni accède aux données Blob Storage via des connexions. Il existe deux méthodes pour accéder en toute sécurité aux données sur Blob Storage. Vous pouvez utiliser la fédération d'identité en accordant l'accès à votre application Azure à un compte de service Google Cloud, ou vous pouvez accorder directement l'accès à votre application Azure Active Directory (AD) dans votre locataire :

  • Utiliser une identité fédérée Azure. Il s'agit de l'approche recommandée. BigQuery Omni est compatible avec la fédération d'identité de charge de travail Azure. BigQuery Omni étant compatible avec la fédération d'identité de charge de travail Azure, vous pouvez autoriser un compte de service Google à accéder à l'application Azure située dans votre locataire. L'accès aux identités fédérées est plus sécurisé qu'un accès non fédéré, car le client d'application existe dans votre locataire Azure. Les codes secrets du client d'application ne sont gérés ni par vous, ni par Google.

    La fédération d'identité vous permet de mieux contrôler l'application à laquelle vous avez accordé l'accès à vos données, car celle-ci existe dans votre locataire.

  • Utiliser une identité non fédérée. L'annonce obligatoire sur le service (MSA) informant les clients de l'abandon de l'utilisation d'une identité non fédérée pour accéder à votre application Azure a été envoyée aux partenaires et clients concernés le 20 juin 2023 à titre de préavis avant la prise d'effet des modifications le 8 janvier 2024. Envisagez plutôt d'utiliser une identité fédérée Azure. Chaque connexion non fédérée possède sa propre application Azure Active Directory (Azure AD) unique. Les autorisations sont accordées aux applications via les rôles IAM (Identity and Access Management) Azure. Les rôles IAM Azure attribués déterminent les données auxquelles BigQuery peut accéder pour chaque connexion.

Après avoir créé une connexion BigQuery Azure, vous pouvez interroger les données Blob Storage ou exporter les résultats de la requête vers Blob Storage.

Avant de commencer

Rôles requis

  • Pour obtenir les autorisations nécessaires pour créer une connexion permettant d'accéder aux données Azure Blob Storage, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de connexion BigQuery (roles/bigquery.connectionAdmin) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

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

  • Assurez-vous de disposer des autorisations IAM Azure suivantes sur votre locataire :
    • Application.ReadWrite.All
    • AppRoleAssignment.ReadWrite.All

Quotas

Pour en savoir plus sur les quotas, consultez la page API BigQuery Connection.

Utiliser une identité fédérée Azure

Pour accéder aux données à l'aide d'une identité fédérée, procédez comme suit :

  1. Créez une application dans votre locataire Azure.
  2. Créez la connexion BigQuery Azure.
  3. Ajoutez un identifiant fédéré.
  4. Attribuez un rôle aux applications BigQuery Azure AD.

Pour en savoir plus sur l'utilisation des identifiants d'identité fédérée pour accéder aux données dans Azure, consultez la page Fédération d'identité de charge de travail.

Créer une application dans votre locataire Azure

Pour créer une application dans votre locataire Azure, procédez comme suit :

Portail Azure

  1. Dans le portail Azure, accédez à App registrations (Enregistrements d'applications), puis cliquez sur New registration (Nouvel enregistrement).

  2. Dans le champ Names (Noms), saisissez le nom de l'application.

  3. Dans le champ Supported account types (Types de comptes compatibles), sélectionnez Accounts in this organizational directory only (Comptes de ce répertoire organisationnel uniquement).

  4. Pour enregistrer la nouvelle application, cliquez sur Register (Enregistrer).

  5. Notez l'ID (client) de l'application. Vous devez fournir cet ID lorsque vous créez la connexion.

    Portail Azure pour la création d'applications

Terraform

Ajoutez le code suivant à votre fichier de configuration Terraform :

  resource "azuread_application" "example" {
    display_name = "bigquery-omni-connector"
  }

  resource "azuread_service_principal" "example" {
    application_id               = azuread_application.example.application_id
    app_role_assignment_required = false
  }

Pour plus d'informations, découvrez comment enregistrer une application dans Azure.

Créer une connexion

Console

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le menu  Ajouter des données, sélectionnez Source de données externe.

  3. Dans le volet Source de données externes, saisissez les informations suivantes :

    • Dans le champ Type de connexion, sélectionnez BigLake sur Azure (via BigQuery Omni).
    • Dans le champ Connection ID (ID de connexion), saisissez un identifiant pour la ressource de connexion. Vous pouvez utiliser des lettres, des chiffres et des traits de soulignement.
    • Sélectionnez l'emplacement où vous souhaitez créer la connexion.
    • Facultatif : Dans le champ Nom descriptif, saisissez un nom clair pour identifier la connexion, tel que My connection resource. Ce nom peut correspondre à n'importe quelle valeur permettant d'identifier la ressource de connexion si vous devez la modifier ultérieurement.
    • Facultatif : Dans le champ Description, saisissez une description de la ressource de connexion.
    • Dans le champ ID de locataire Azure, saisissez l'ID du locataire Azure, également appelé ID d'annuaire (locataire).
    • Cochez la case Utiliser l'identité fédérée, puis saisissez l'ID de l'application fédérée (client) Azure.

      Pour savoir comment obtenir des ID Azure, consultez la page Créer une application dans votre locataire Azure.

  4. Cliquez sur Créer une connexion.

  5. Cliquez sur Accéder à la connexion.

  6. Dans la section Informations de connexion, notez la valeur de l'identité Google BigQuery, qui correspond à l'ID du compte de service. Cet ID correspond au compte de service Google Cloud que vous autorisez à accéder à votre application.

Terraform

  resource "google_bigquery_connection" "connection" {
    connection_id = "omni-azure-connection"
    location      = "azure-eastus2"
    description   = "created by terraform"

    azure {
      customer_tenant_id              = "TENANT_ID"
      federated_application_client_id = azuread_application.example.application_id
    }
  }

Remplacez TENANT_ID par l'ID de locataire du répertoire Azure contenant le compte Blob Storage.

bq

Exécutez la commande bq mk. Pour obtenir le résultat au format JSON, utilisez le paramètre --format=json.

bq mk --connection --connection_type='Azure' \
  --tenant_id=TENANT_ID \
  --location=AZURE_LOCATION \
  --federated_azure=true \
  --federated_app_client_id=APP_ID \
  CONNECTION_ID

Remplacez les éléments suivants :

  • TENANT_ID : ID de locataire du répertoire Azure contenant le compte Azure Storage.
  • AZURE_LOCATION : région Azure où se trouvent vos données Azure Storage. BigQuery Omni est compatible avec la région azure-eastus2.
  • APP_ID : ID (client) de l'application Azure. Pour savoir comment obtenir cet ID, consultez la page Créer une application dans un locataire Azure.
  • CONNECTION_ID : nom de la connexion.

Le résultat ressemble à ce qui suit :

Connection CONNECTION_ID successfully created
Please add the following identity to your Azure application APP_ID
Identity: SUBJECT_ID

Ce résultat inclut les valeurs suivantes :

  • APP_ID : ID de l'application que vous avez créée.

  • SUBJECT_ID : ID du compte de service Google Cloud que l'utilisateur autorise à accéder à son application. Cette valeur est obligatoire lorsque vous créez un identifiant fédéré dans Azure.

Notez les valeurs APP_ID et SUBJECT_ID à utiliser dans les étapes suivantes.

Ajoutez ensuite un identifiant fédéré pour votre application.

Ajouter un identifiant fédéré

Pour créer un nouvel identifiant fédéré, procédez comme suit :

Portail Azure

  1. Sur le portail Azure, accédez à App registrations (Enregistrements d'applications), puis cliquez sur votre application.

  2. Sélectionnez Certificates & secrets > Federated credentials > Add credentials (Certificats et secrets > Identifiants fédérés > Ajouter des identifiants). Ensuite, procédez comme suit :

    1. Dans la liste Federated credential scenario (Scénario d'identifiants fédérés), sélectionnez Other issuer (Autre émetteur).

    2. Dans le champ Issuer (Émetteur), saisissez https://accounts.google.com.

    3. Dans le champ Identifiant de l'objet, saisissez l'identité Google BigQuery du compte de service Google Cloud que vous avez obtenu lors de la création de la connexion.

    4. Dans le champ Name (Nom), saisissez un nom pour les identifiants.

    5. Cliquez sur Ajouter.

Terraform

Ajoutez le code suivant à votre fichier de configuration Terraform :

  resource "azuread_application" "example" {
    display_name = "bigquery-omni-connector"
  }

  resource "azuread_service_principal" "example" {
    application_id               = azuread_application.example.application_id
    app_role_assignment_required = false
  }

  resource "azuread_application_federated_identity_credential" "example" {
    application_object_id = azuread_application.example.object_id
    display_name          = "omni-federated-credential"
    description           = "BigQuery Omni federated credential"
    audiences             = ["api://AzureADTokenExchange"]
    issuer                = "https://accounts.google.com"
    subject               = google_bigquery_connection.connection.azure[0].identity
  }

Pour en savoir plus, consultez la page Configurer une application pour approuver un fournisseur d'identité externe.

Attribuer un rôle aux applications Azure de BigQuery

Pour attribuer un rôle à une application Azure de BigQuery, utilisez le portail Azure, Azure PowerShell ou l'API REST Microsoft Management :

Portail Azure

Vous pouvez attribuer des rôles dans le portail Azure en vous connectant en tant qu'utilisateur disposant de l'autorisation Microsoft.Authorization/roleAssignments/write. L'attribution de rôle permet à la connexion BigQuery Azure d'accéder aux données Azure Storage comme spécifié dans la stratégie des rôles.

Pour ajouter des attributions de rôles à l'aide du portail Azure, procédez comme suit :

  1. Depuis votre compte Azure Storage, saisissez IAM dans la barre de recherche.

  2. Cliquez sur Access Control (IAM) (Contrôle des accès (IAM)).

  3. Cliquez sur Add (Ajouter), puis sélectionnez Add role assignments (Ajouter des attributions de rôles).

  4. Pour accorder un accès en lecture seule, sélectionnez le rôle Storage Blob Data Reader (Lecteur des données blob de stockage). Pour accorder un accès en lecture/écriture, sélectionnez le rôle Storage Blob Data Contributor (Contributeur des données blob de stockage).

  5. Définissez Assign access to (Attribuer l'accès à) à l'utilisateur, groupe ou compte principal de service.

  6. Cliquez sur Select members (Sélectionner des membres).

  7. Dans le champ Select (Sélectionner), saisissez le nom de l'application Azure que vous avez fourni lors de la création de l'application dans le locataire Azure.

  8. Cliquez sur Enregistrer.

Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide du portail Azure.

Terraform

Ajoutez le code suivant à votre fichier de configuration Terraform :

  resource "azurerm_role_assignment" "data-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    principal_id         = azuread_service_principal.example.id
  }

Azure PowerShell

Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser la commande New-AzRoleAssignment :

  New-AzRoleAssignment`
   -SignInName APP_NAME`
   -RoleDefinitionName ROLE_NAME`
   -ResourceName RESOURCE_NAME`
   -ResourceType RESOURCE_TYPE`
   -ParentResource PARENT_RESOURCE`
   -ResourceGroupName RESOURCE_GROUP_NAME

Remplacez les éléments suivants :

  • APP_NAME : nom de l'application
  • ROLE_NAME : nom du rôle que vous souhaitez attribuer.
  • RESOURCE_NAME : nom de la ressource.
  • RESOURCE_TYPE : type de ressource.
  • PARENT_RESOURCE : ressource parente.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.

Pour en savoir plus sur l'utilisation d'Azure PowerShell pour ajouter un nouveau compte principal de service, consultez la page Attribuer des rôles Azure à l'aide d'Azure PowerShell.

CLI Azure

Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser l'outil de ligne de commande Azure. Vous devez disposer de l'autorisation Microsoft.Authorization/roleAssignments/write pour que le compte de stockage puisse attribuer des rôles.

Pour attribuer un rôle tel que "Contributeur des données blob de stockage" au compte principal de service, exécutez la commande az role assignment create :

  az role assignment create --role "Storage Blob Data Contributor" \
    --assignee-object-id ${SP_ID} \
    --assignee-principal-type ServicePrincipal \
    --scope   subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME

Remplacez les éléments suivants :

  • SP_ID : ID du compte de service. Ce compte principal de service est destiné à l'application que vous avez créée. Pour obtenir le compte principal de service pour une connexion fédérée, consultez la page Objet de compte principal de service.
  • STORAGE_ACCOUNT_NAME : nom du compte de stockage.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.
  • SUBSCRIPTION_ID : ID de l'abonnement.

Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide de l'interface de ligne de commande Azure.

API REST Microsoft

Pour ajouter des attributions de rôles à un compte principal de service, vous pouvez envoyer une requête HTTP à Microsoft Management.

Pour appeler l'API REST Microsoft Graph, récupérez un jeton OAuth pour une application. Pour en savoir plus, consultez la page Obtenir l'accès sans utilisateur. L'application qui a appelé l'API REST Microsoft  Graph doit disposer de l'autorisation d'application Application.ReadWrite.All.

Pour générer un jeton OAuth, exécutez la commande suivante :

  export TOKEN=$(curl -X POST \
    https://login.microsoftonline.com/TENANT_ID/oauth2/token \
    -H 'cache-control: no-cache' \
    -H 'content-type: application/x-www-form-urlencoded' \
    --data-urlencode "grant_type=client_credentials" \
    --data-urlencode "resource=https://graph.microsoft.com/" \
    --data-urlencode "client_id=CLIENT_ID" \
    --data-urlencode "client_secret=CLIENT_SECRET" \
  | jq --raw-output '.access_token')

Remplacez les éléments suivants :

  • TENANT_ID : ID du locataire correspond à l'ID du répertoire Azure contenant le compte Azure Storage.
  • CLIENT_ID : ID client Azure.
  • CLIENT_SECRET : code secret du client Azure.

Obtenez l'ID des rôles intégrés Azure que vous souhaitez attribuer au compte principal de service.

Voici quelques rôles courants :

Pour attribuer un rôle au compte principal de service, appelez l'API REST Microsoft Graph sur l'API REST Azure Resource Management :

  export ROLE_ASSIGNMENT_ID=$(uuidgen)
  curl -X PUT \
'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \
    -H "authorization: Bearer ${TOKEN?}" \
    -H 'cache-control: no-cache' \
    -H 'content-type: application/json' \
    -d '{
        "properties": {
            "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID",
            "principalId": "SP_ID"
        }
    }'

Remplacez les éléments suivants :

  • ROLE_ASSIGNMENT_ID : ID du rôle.
  • SP_ID : ID du compte de service. Ce compte principal de service est destiné à l'application que vous avez créée. Pour obtenir le compte principal de service pour une connexion fédérée, consultez la page Objet de compte principal de service.
  • SUBSCRIPTION_ID : ID de l'abonnement.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.
  • STORAGE_ACCOUNT_NAME : nom du compte de stockage.
  • SUBSCRIPTION_ID : ID de l'abonnement.

La connexion est maintenant prête à être utilisée. Toutefois, un délai de propagation peut exister pour une attribution de rôle dans Azure. Si vous ne parvenez pas à utiliser la connexion en raison de problèmes d'autorisation, réessayez un peu plus tard.

Utiliser une identité non fédérée

Pour accéder aux données à l'aide d'une identité non fédérée, procédez comme suit :

  1. Créez la connexion BigQuery Azure.
  2. Créez un compte principal de service Azure AD.
  3. Attribuez un rôle aux applications Azure AD de BigQuery.

Pour en savoir plus sur l'utilisation d'une identité non fédérée pour accéder aux données dans Azure, consultez la page Application Azure AD.

Créer une connexion

Pour vous connecter à Blob Storage, utilisez la console Google Cloud ou l'outil de ligne de commande bq :

Console

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le menu  Ajouter des données, sélectionnez Source de données externe.

  3. Dans le volet Source de données externes, saisissez les informations suivantes :

    • Dans le champ Type de connexion, sélectionnez BigLake sur Azure (via BigQuery Omni).
    • Dans le champ Connection ID (ID de connexion), saisissez un identifiant pour la ressource de connexion. Vous pouvez utiliser des lettres, des chiffres et des traits de soulignement.
    • Sélectionnez l'emplacement où vous souhaitez créer la connexion.
    • Facultatif : Dans le champ Nom descriptif, saisissez un nom clair pour identifier la connexion, tel que My connection resource. Ce nom peut correspondre à n'importe quelle valeur permettant d'identifier la ressource de connexion si vous devez la modifier ultérieurement.
    • Facultatif : Dans le champ Description, saisissez une description de la ressource de connexion.
    • Dans le champ ID de locataire Azure, saisissez l'ID du locataire Azure, également appelé ID d'annuaire (locataire).

  4. Cliquez sur Créer une connexion.

  5. Cliquez sur Accéder à la connexion.

  6. Dans la section Informations de connexion, notez les valeurs des champs ID d'application Azure et Nom de l'application Azure. Ces valeurs sont obligatoires lorsque vous attribuez un rôle à l'application Azure de BigQuery.

Terraform

  resource "google_bigquery_connection" "connection" {
    connection_id = "omni-azure-connection"
    location      = "azure-eastus2"
    description   = "created by terraform"

    azure {
      customer_tenant_id              = "TENANT_ID"
      federated_application_client_id = azuread_application.example.application_id
    }
  }

Remplacez TENANT_ID par l'ID de locataire du répertoire Azure contenant le compte Blob Storage.

bq

Exécutez la commande bq mk. Pour obtenir le résultat au format JSON, utilisez le paramètre --format=json.

bq mk --connection --connection_type='Azure' \
  --tenant_id=TENANT_ID \
  --location=AZURE_LOCATION \
  CONNECTION_ID

Remplacez les éléments suivants :

  • TENANT_ID : ID de locataire du répertoire Azure contenant le compte Azure Storage.
  • AZURE_LOCATION : région Azure où se trouvent vos données Azure Storage. BigQuery Omni est compatible avec la région azure-eastus2.
  • CONNECTION_ID : ID de la connexion.

Le résultat ressemble à ce qui suit :

  Please create a Service Principal in your directory for
  appId: APP_ID,
  and perform role assignment to
  app: APP_NAME
  to allow BigQuery to access your Azure data.

Ce résultat inclut les valeurs suivantes :

  • APP_ID : ID de l'application que vous avez créée.
  • APP_NAME : nom de l'application à lequel vous devez attribuer des rôles afin que BigQuery puisse accéder à vos données Azure.

Notez les valeurs APP_ID et APP_NAME à utiliser dans les étapes suivantes.

Pour en savoir plus, consultez la section Créer une connexion.

Créer un compte principal de service Azure AD

Pour créer un compte principal de service Azure AD, utilisez la console Google Cloud, Azure PowerShell, l'outil de ligne de commande Azure ou l'API REST Microsoft Graph :

Console

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le panneau Explorateur, cliquez sur la connexion que vous avez créée.

  3. Dans le volet Informations de connexion, cliquez sur Se connecter au compte Azure.

  4. Connectez-vous à votre compte Azure.

  5. Sur la page Permissions Requested (Autorisations demandées), cliquez sur Accept (Accepter).

Terraform

Ajoutez le code suivant à votre fichier de configuration Terraform :

  resource "azuread_application" "example" {
    display_name = "bigquery-omni-connector"
  }

  resource "azuread_service_principal" "example" {
    application_id               = azuread_application.example.application_id
    app_role_assignment_required = false
  }

Azure PowerShell

Pour créer le compte principal de service pour l'ID d'application APP_ID précédemment renvoyé, l'utilisateur doit disposer de l'autorisation Microsoft.directory/servicePrincipals/create.

Pour créer le compte de service, exécutez la commande New-AzADServicePrincipal :

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Remplacez APP_ID par l'ID d'application renvoyé précédemment.

CLI Azure

Pour créer le compte principal de service de l'ID d'application APP_ID renvoyé précédemment, vous pouvez utiliser l'outil de ligne de commande Azure. Vous devez disposer de l'autorisation Microsoft.directory/servicePrincipals/create pour créer un compte principal de service.

Pour créer le compte principal de service, exécutez la commande az ad sp :

export SP_ID=$(az ad sp create --id APP_ID | jq --raw-output '.objectId')

Remplacez APP_ID par l'ID d'application renvoyé précédemment.

API REST Microsoft

Pour créer le compte de service principal de l'ID d'application APP_ID qui a été renvoyé précédemment, vous pouvez envoyer une requête HTTP à l'API REST Microsoft Graph.

Pour appeler l'API REST Microsoft Graph, récupérez un jeton OAuth pour une application. Pour en savoir plus, consultez la page Obtenir l'accès sans utilisateur. L'application utilisée pour appeler l'API REST Microsoft Graph doit disposer de l'autorisation d'application Application.ReadWrite.All.

Le champ TENANT_ID doit correspondre à l'ID du répertoire Azure contenant le compte Azure Storage.

Pour générer un jeton OAuth, exécutez la commande suivante :

export TOKEN=$(curl -X POST \
https://login.microsoftonline.com/TENANT_ID/oauth2/token \
-H 'cache-control: no-cache' \
-H 'content-type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "resource=https://graph.microsoft.com/" \
--data-urlencode "client_id=CLIENT_ID" \
--data-urlencode "client_secret=CLIENT_SECRET" \
| jq --raw-output '.access_token')

Remplacez l'élément suivant :

  • TENANT_ID : ID de locataire du répertoire Azure contenant le compte Azure Storage.
  • CLIENT_ID : ID client Azure.
  • CLIENT_SECRET : code secret du client Azure.

Exécutez la commande suivante :

export APP_ID=APP_ID

Remplacez APP_ID par l'ID d'application qui a été renvoyé.

Pour créer un compte de service principal en appelant l'API REST Microsoft Graph, exécutez la commande suivante :

export SP_ID=$(curl -X POST \
https://graph.microsoft.com/v1.0/serviceprincipals \
-H "authorization: Bearer ${TOKEN?}" \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d "{
  \"appId\": \"${APP_ID?}\"
}" | jq --raw-output '.id')

Remplacez les éléments suivants :

  • TOKEN : jeton OAuth de l'application.
  • APP_ID : ID de l'application renvoyé précédemment.

Attribuer un rôle aux applications Azure AD de BigQuery

Portail Azure

Vous pouvez attribuer des rôles dans le portail Azure en vous connectant en tant qu'utilisateur disposant de l'autorisation Microsoft.Authorization/roleAssignments/write. L'attribution de rôle permet à la connexion BigQuery Azure d'accéder aux données Azure Storage comme spécifié dans la stratégie des rôles.

Pour ajouter des attributions de rôles à l'aide du portail Azure, procédez comme suit :

  1. Depuis votre compte Azure Storage, saisissez IAM dans la barre de recherche.

  2. Cliquez sur Access Control (IAM) (Contrôle des accès (IAM)).

  3. Cliquez sur Add (Ajouter), puis sélectionnez Add role assignments (Ajouter des attributions de rôles).

  4. Pour accorder un accès en lecture seule, sélectionnez le rôle Storage Blob Data Reader (Lecteur des données blob de stockage). Pour accorder un accès en lecture/écriture, sélectionnez le rôle Storage Blob Data Contributor (Contributeur des données blob de stockage).

  5. Définissez Assign access to (Attribuer l'accès à) à l'utilisateur, groupe ou compte principal de service.

  6. Cliquez sur Select members (Sélectionner des membres).

  7. Dans le champ Select (Sélectionner), saisissez le nom de l'application Azure qui a été renvoyé lors de la création de la connexion BigQuery Azure.

  8. Cliquez sur Enregistrer.

Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide du portail Azure.

Terraform

Ajoutez le code suivant à votre fichier de configuration Terraform :

  resource "azurerm_role_assignment" "data-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    principal_id         = azuread_service_principal.example.id
  }

Azure PowerShell

Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser la commande New-AzRoleAssignment :

  New-AzRoleAssignment`
   -SignInName APP_NAME`
   -RoleDefinitionName ROLE_NAME`
   -ResourceName RESOURCE_NAME`
   -ResourceType RESOURCE_TYPE`
   -ParentResource PARENT_RESOURCE`
   -ResourceGroupName RESOURCE_GROUP_NAME

Remplacez les éléments suivants :

  • APP_NAME : nom de l'application
  • ROLE_NAME : nom du rôle que vous souhaitez attribuer.
  • RESOURCE_NAME : nom de la ressource.
  • RESOURCE_TYPE : type de ressource.
  • PARENT_RESOURCE : ressource parente.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.

Pour en savoir plus sur l'utilisation d'Azure PowerShell pour ajouter un nouveau compte principal de service, consultez la page Attribuer des rôles Azure à l'aide d'Azure PowerShell.

CLI Azure

Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser l'outil de ligne de commande Azure. Vous devez disposer de l'autorisation Microsoft.Authorization/roleAssignments/write pour que le compte de stockage puisse attribuer des rôles.

Pour attribuer un rôle tel que "Contributeur des données blob de stockage" au compte principal de service, exécutez la commande az role assignment create :

  az role assignment create --role "Storage Blob Data Contributor" \
    --assignee-object-id ${SP_ID} \
    --assignee-principal-type ServicePrincipal \
    --scope   subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME

Remplacez les éléments suivants :

  • SP_ID : ID du compte de service.
  • STORAGE_ACCOUNT_NAME : nom du compte de stockage.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.
  • SUBSCRIPTION_ID : ID de l'abonnement.

Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide de l'interface de ligne de commande Azure.

API REST Microsoft

Pour ajouter des attributions de rôles à un compte principal de service, vous pouvez envoyer une requête HTTP à Microsoft Management.

Pour appeler l'API REST Microsoft Graph, récupérez un jeton OAuth pour une application. Pour en savoir plus, consultez la page Obtenir l'accès sans utilisateur. L'application qui a appelé l'API REST Microsoft  Graph doit disposer de l'autorisation d'application Application.ReadWrite.All.

Pour générer un jeton OAuth, exécutez la commande suivante :

  export TOKEN=$(curl -X POST \
    https://login.microsoftonline.com/TENANT_ID/oauth2/token \
    -H 'cache-control: no-cache' \
    -H 'content-type: application/x-www-form-urlencoded' \
    --data-urlencode "grant_type=client_credentials" \
    --data-urlencode "resource=https://graph.microsoft.com/" \
    --data-urlencode "client_id=CLIENT_ID" \
    --data-urlencode "client_secret=CLIENT_SECRET" \
  | jq --raw-output '.access_token')

Remplacez les éléments suivants :

  • TENANT_ID : ID du locataire correspond à l'ID du répertoire Azure contenant le compte Azure Storage.
  • CLIENT_ID : ID client Azure.
  • CLIENT_SECRET : code secret du client Azure.

Obtenez l'ID des rôles intégrés Azure que vous souhaitez attribuer au compte principal de service.

Voici quelques rôles courants :

Pour attribuer un rôle au compte principal de service, appelez l'API REST Microsoft Graph sur l'API REST Azure Resource Management :

  export ROLE_ASSIGNMENT_ID=$(uuidgen)
  curl -X PUT \
'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \
    -H "authorization: Bearer ${TOKEN?}" \
    -H 'cache-control: no-cache' \
    -H 'content-type: application/json' \
    -d '{
        "properties": {
            "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID",
            "principalId": "SP_ID"
        }
    }'

Remplacez les éléments suivants :

  • ROLE_ASSIGNMENT_ID : ID du rôle.
  • SP_ID : ID du compte de service.
  • SUBSCRIPTION_ID : ID de l'abonnement.
  • RESOURCE_GROUP_NAME : nom du groupe de ressources.
  • STORAGE_ACCOUNT_NAME : nom du compte de stockage.
  • SUBSCRIPTION_ID : ID de l'abonnement.

La connexion est maintenant prête à être utilisée. Toutefois, un délai de propagation peut exister pour une attribution de rôle dans Azure. Si vous ne parvenez pas à utiliser la connexion en raison de problèmes d'autorisation, réessayez un peu plus tard.

Partager des connexions avec les utilisateurs

Vous pouvez attribuer les rôles suivants pour permettre aux utilisateurs d'interroger des données et de gérer les connexions :

  • roles/bigquery.connectionUser permet aux utilisateurs de se connecter à des sources de données externes et d'y exécuter des requêtes.

  • roles/bigquery.connectionAdmin permet aux utilisateurs de gérer les connexions.

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

    Les connexions sont répertoriées dans votre projet, dans un groupe appelé Connexions externes.

  2. Dans le volet Explorateur, cliquez sur votre nom de projet > Connexions externes > connexion.

  3. Dans le volet Détails, cliquez sur Partager pour partager une connexion. Ensuite, procédez comme suit :

    1. Dans la boîte de dialogue Autorisations de connexion, partagez la connexion avec d'autres comptes principaux en ajoutant ou en modifiant des comptes principaux.

    2. Cliquez sur Enregistrer.

bq

Vous ne pouvez pas partager de connexion avec l'outil de ligne de commande bq. Pour partager une connexion, utilisez la console Google Cloud ou la méthode de l'API BigQuery Connections permettant le partage de connexion.

API

Utilisez la méthode projects.locations.connections.setIAM dans la section de référence de l'API REST BigQuery Connections et fournissez une instance de la ressource policy.

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

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

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Étapes suivantes