Conéctate a Blob Storage

Como administrador de BigQuery, puedes crear una conexión para permitir que los analistas de datos accedan a los datos almacenados en Azure Blob Storage.

BigQuery Omni accede a los datos de Blob Storage mediante conexiones. Existen dos métodos para acceder de forma segura a los datos desde Blob Storage. Puedes usar la federación de identidades si otorgas a una cuenta de servicio de Google Cloud acceso a la aplicación de Azure o puedes otorgar acceso directo a la aplicación de Azure Active Directory (AD) en el usuario:

  • Usa una identidad federada de Azure. Este es el método recomendado. BigQuery Omni admite la federación de identidades para cargas de trabajo de Azure. Con BigQuery Omni que admite la federación de identidades para cargas de trabajo de Azure, puedes otorgar a una cuenta de servicio de Google acceso a la aplicación de Azure que se encuentra dentro de tu instancia. El acceso de identidad federada es más seguro que el acceso no federado, ya que el cliente de la aplicación existe en el usuario de Azure. Ni tú ni Google administran los secretos del cliente de la aplicación.

    Con la federación de identidades, tienes más control sobre la aplicación porque la aplicación a la que le otorgaste acceso a tus datos existe dentro de tu usuario.

  • Usa una identidad no federada. El anuncio de servicio obligatorio (MSA) que notifica a los clientes sobre la baja del uso de una identidad no federada para acceder a tu aplicación de Azure se envió a los socios y clientes afectados el 20 de junio de 2023, notificándolos antes de que se apliquen los cambios el 8 de enero de 2024. Considera usar una identidad federada de Azure en su lugar. Cada conexión no federada tiene su propia aplicación única de Azure Active Directory (Azure AD). Los permisos se otorgan a las aplicaciones a través de los roles de Azure Identity and Access Management (IAM). Los roles de IAM de Azure otorgadas determinan a qué datos puede acceder BigQuery en cada conexión.

Después de crear una conexión de BigQuery Azure, puedes consultar los datos de Blob Storage o exportar los resultados de las consultas a Blob Storage.

Antes de comenzar

Roles obligatorios

  • Si quieres obtener los permisos que necesitas para crear una conexión para acceder a los datos de Azure Blob Storage, pídele a tu administrador que te otorgue el rol de IAM Administrador de conexión de BigQuery (roles/bigquery.connectionAdmin) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  • Asegúrate de que tengas los siguientes permisos de IAM de Azure en tu usuario:
    • Application.ReadWrite.All
    • AppRoleAssignment.ReadWrite.All

Cuotas

Tu proyecto puede crear hasta 50 conexiones de Azure para cada proyecto. En la cuota, se incluyen conexiones de Azure federadas y no federadas. Para obtener más información sobre las cuotas, consulta API de conexión de BigQuery.

Usa una identidad federada de Azure

Para acceder a los datos que usan una identidad federada, sigue estos pasos:

  1. Crea una aplicación en tu instancia de Azure.
  2. Crea la conexión de BigQuery de Azure.
  3. Agrega una credencial federada.
  4. Asigna un rol a las aplicaciones de BigQuery Azure AD.

Si deseas obtener más información sobre el uso de credenciales de identidad federada para acceder a los datos en Azure, consulta Federación de Workload Identity.

Crea una aplicación en tu instancia de Azure

Para crear una aplicación en tu instancia de Azure, sigue estos pasos:

Portal de Azure

  1. En el portal de Azure, ve a Registros de apps y, luego, haz clic en Nuevo registro.

  2. En Nombres, ingresa un nombre para tu aplicación.

  3. En Tipos de cuentas compatibles, selecciona Cuentas en este directorio de la organización solo.

  4. Para registrar la aplicación nueva, haz clic en Registrar.

  5. Toma nota del ID de aplicación (cliente). Debes proporcionar este ID cuando crees la conexión.

    Portal de Azure para crear aplicaciones

Terraform

Agrega lo siguiente al archivo de configuración de 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
  }

Si deseas obtener más información, consulta cómo registrar una aplicación en Azure.

Crear una conexión

Consola

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el menú Agregar datos, selecciona Fuentes de datos externa.

  3. En el panel Fuente de datos externa, ingresa la siguiente información:

    • En Tipo de conexión, selecciona BigLake on Azure (mediante BigQuery Omni).
    • En ID de conexión, ingresa un identificador para el recurso de conexión. Puedes usar letras, números, guiones y guiones bajos.
    • Selecciona la ubicación en la que deseas crear la conexión.
    • En Nombre descriptivo, ingresa un nombre fácil de usar para la conexión, como My connection resource (opcional). El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante.
    • En Descripción, ingresa una descripción para este recurso de conexión (opcional).
    • En ID de usuario de Azure, ingresa el ID del usuario de Azure, que también se conoce como ID del directorio (usuario).
    • Habilita la casilla de verificación Usar identidad federada y, luego, ingresa el ID de la aplicación federada de Azure (cliente).

      Para obtener información sobre cómo obtener IDs de Azure, consulta Crea una aplicación en tu instancia de Azure.

  4. Haz clic en Crear conexión (Create connection).

  5. Haz clic en Ir a la conexión.

  6. En la sección Información de conexión, anota el valor de Identidad de Google de BigQuery, que es el ID de la cuenta de servicio. Este ID es para la cuenta de servicio de Google Cloud que autorizas a acceder a tu aplicación.

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
    }
  }

Reemplaza TENANT_ID por el ID de usuario del directorio de Azure que contiene la cuenta de Blob Storage.

bq

Usa el comando bq mk. Para obtener el resultado en formato JSON, usa el parámetro --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

Reemplaza lo siguiente:

  • TENANT_ID: El ID de usuario del directorio de Azure que contiene la cuenta de Azure Storage.
  • AZURE_LOCATION: La región de Azure en la que se encuentran los datos de Azure Storage BigQuery Omni admite la región azure-eastus2.
  • APP_ID: El ID de la aplicación de Azure (cliente). Para aprender a obtener este ID, consulta Crear aplicación en un usuario de Azure.
  • CONNECTION_ID: Es el nombre de la conexión.

El resultado es similar a este:

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

En esta salida, se incluyen los siguientes valores:

  • APP_ID: el ID de la aplicación que creaste.

  • SUBJECT_ID: el ID de la cuenta de servicio de Google Cloud que el usuario autoriza para acceder a su aplicación. Este valor es obligatorio cuando creas una credencial federada en Azure.

Toma nota de los valores APP_ID y SUBJECT_ID para usarlos en los siguientes pasos.

A continuación, agrega una credencial federada para la aplicación.

Agrega una credencial federada

Para crear una credencial nueva, sigue estos pasos:

Portal de Azure

  1. En el portal de Azure, ve a Registros de apps y, luego, haz clic en tu aplicación.

  2. Selecciona Certificados y secretos > Credenciales federadas > Agregar credenciales. A continuación, sigue estos pasos:

    1. En la lista Situación de credencial federada, selecciona Otro emisor.

    2. En Emisor, ingresa https://accounts.google.com.

    3. En Identificador de asunto, ingresa la identidad de Google de BigQuery de la cuenta de servicio de Google Cloud que obtuviste cuando creaste la conexión.

    4. En Nombre, ingresa un nombre para la credencial.

    5. Haga clic en Agregar.

Terraform

Agrega lo siguiente al archivo de configuración de 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
  }

Para obtener más información, consulta Configura una app para que confíe en un proveedor de identidad externo.

Asigna un rol a las aplicaciones de Azure de BigQuery

Para asignar un rol a la aplicación de Azure de BigQuery, usa el Portal de Azure, Azure PowerShell o la API de REST de Management de Microsoft:

Portal de Azure

Para realizar asignaciones de funciones en el Portal de Azure, accede como un usuario con el permiso Microsoft.Authorization/roleAssignments/write. La asignación de funciones permite que la conexión de BigQuery Azure acceda a los datos de Azure Storage como se especifica en la política de funciones.

Para agregar asignaciones de roles con el Portal de Azure, sigue estos pasos:

  1. Desde tu cuenta de Azure Storage, ingresa IAM en la barra de búsqueda.

  2. Haz clic en Control de acceso (IAM).

  3. Haz clic en Add y selecciona Add role assignments.

  4. Para proporcionar acceso de solo lectura, selecciona el rol Lector de datos de almacenamiento de BLOB. Para proporcionar acceso de lectura y escritura, selecciona el rol Colaborador de datos de BLOB de almacenamiento.

  5. Configura Assign access to como User, group, or service principal.

  6. Haz clic en Seleccionar miembros.

  7. En el campo Seleccionar, ingresa el nombre de la aplicación de Azure que le asignaste cuando creaste la aplicación en el usuario de Azure. .

  8. Haz clic en Guardar.

Para obtener más información, consulta Asigna roles de Azure mediante el portal de Azure.

Terraform

Agrega lo siguiente al archivo de configuración de 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

Para agregar una asignación de rol para una principal de servicio en el alcance de un recurso, puedes usar el comando New-AzRoleAssignment:

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

Reemplaza lo siguiente:

  • APP_NAME: Es el nombre de la aplicación.
  • ROLE_NAME: Es el nombre del rol que deseas asignar.
  • RESOURCE_NAME: Es el nombre del recurso.
  • RESOURCE_TYPE: Es el tipo de recurso.
  • PARENT_RESOURCE: El recurso superior.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.

Si deseas obtener más información sobre el uso de Azure PowerShell para agregar un principal de servicio nuevo, consulta Asigna roles de Azure PowerShell.

CLI de Azure

Para agregar una asignación de rol a una principal de servicio en un permiso de recursos, puedes usar la herramienta de línea de comandos de Azure. Debes tener el permiso Microsoft.Authorization/roleAssignments/write para que la cuenta de almacenamiento otorgue roles.

Para asignar un rol, como el rol de colaborador de datos de BLOB de almacenamiento, al principal de servicio, ejecuta el comando 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

Reemplaza lo siguiente:

  • SP_ID: El ID del principal del servicio. Este principal del servicio es para la aplicación que creaste. Para obtener el principal del servicio para una conexión federada, consulta Objeto del principal del servicio.
  • STORAGE_ACCOUNT_NAME: Es el nombre de la cuenta de almacenamiento.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.
  • SUBSCRIPTION_ID: El ID de suscripción.

Para obtener más información, consulta Asigna funciones de Azure con la CLI de Azure.

API de REST de Microsoft

Para agregar asignaciones de roles a un principal de servicio, puedes enviar una solicitud HTTP a Microsoft Management.

A fin de llamar a la API de REST de Microsoft Graph, recupera un token de OAuth para una aplicación. Para obtener más información, consulta Obtén acceso sin un usuario. La aplicación que llamó a la API de REST del Microsoft Graph debe tener el permiso de la aplicación Application.ReadWrite.All.

Para generar un token de OAuth, ejecuta el siguiente comando:

  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')

Reemplaza lo siguiente:

  • TENANT_ID: el ID de usuario que coincide con el ID del directorio de Azure que contiene la cuenta de Azure Storage.
  • CLIENT_ID: el ID de cliente de Azure.
  • CLIENT_SECRET: el secreto del cliente de Azure.

Obtén el ID de los roles integrados de Azure que deseas asignar al principal del servicio.

Estos son algunos roles comunes:

Para asignar un rol al principio de servicio, llama a la API de REST del gráfico de Microsoft a la API de REST de 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"
        }
    }'

Reemplaza lo siguiente:

  • ROLE_ASSIGNMENT_ID: El ID del rol.
  • SP_ID: El ID del principal del servicio. Este principal del servicio es para la aplicación que creaste. A fin de obtener el principal de servicio para una conexión federada, consulta Objeto principal del servicio.
  • SUBSCRIPTION_ID: El ID de suscripción.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.
  • STORAGE_ACCOUNT_NAME: Es el nombre de la cuenta de almacenamiento.
  • SUBSCRIPTION_ID: El ID de suscripción.

La conexión ya está lista para usar. Sin embargo, puede haber una demora de propagación en las asignaciones de roles en Azure. Si no puedes usar la conexión debido a problemas de permisos, vuelve a intentarlo después de un tiempo.

Usa una identidad no federada

Para acceder a los datos que usan una identidad no federada, sigue estos pasos:

  1. Crea la conexión de BigQuery de Azure.
  2. Crea un principal del servicio de Azure AD.
  3. Asigna un rol a las aplicaciones de Azure AD de BigQuery.

Si deseas obtener más información sobre el uso de la identidad no federada para acceder a los datos en Azure, consulta Aplicación de Azure AD.

Crear una conexión

Para conectarte a Blob Storage, usa la consola de Google Cloud o la herramienta de línea de comandos de bq:

Consola

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el menú Agregar datos, selecciona Fuentes de datos externa.

  3. En el panel Fuente de datos externa, ingresa la siguiente información:

    • En Tipo de conexión, selecciona BigLake on Azure (mediante BigQuery Omni).
    • En ID de conexión, ingresa un identificador para el recurso de conexión. Puedes usar letras, números, guiones y guiones bajos.
    • Selecciona la ubicación en la que deseas crear la conexión.
    • En Nombre descriptivo, ingresa un nombre fácil de usar para la conexión, como My connection resource (opcional). El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante.
    • En Descripción, ingresa una descripción para este recurso de conexión (opcional).
    • En ID de usuario de Azure, ingresa el ID del usuario de Azure, que también se conoce como ID del directorio (usuario).

  4. Haga clic en Crear conexión.

  5. Haz clic en Ir a la conexión.

  6. En la sección Información de conexión, anota los valores del ID de la aplicación de Azure y del nombre de la aplicación de Azure. Estos valores son obligatorios cuando asignas un rol a la aplicación de 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
    }
  }

Reemplaza TENANT_ID por el ID de usuario del directorio de Azure que contiene la cuenta de Blob Storage.

bq

Usa el comando bq mk. Para obtener el resultado en formato JSON, usa el parámetro --format=json.

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

Reemplaza lo siguiente:

  • TENANT_ID: El ID de usuario del directorio de Azure que contiene la cuenta de Azure Storage.
  • AZURE_LOCATION: La región de Azure en la que se encuentran los datos de Azure Storage BigQuery Omni admite la región azure-eastus2.
  • CONNECTION_ID: el ID de la conexión.

El resultado es similar a este:

  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.

En esta salida, se incluyen los siguientes valores:

  • APP_ID: el ID de la aplicación que creaste.
  • APP_NAME: Es el nombre de la app al que necesitas asignar roles para que BigQuery pueda acceder a tus datos de Azure.

Toma nota de los valores APP_ID y APP_NAME para usarlos en los siguientes pasos.

Para obtener más información, consulta Crea una conexión.

Crea una principal del servicio de Azure AD

Para crear un principal del servicio de Azure AD, usa la consola de Google Cloud, Azure PowerShell, la herramienta de línea de comandos de Azure o la API de REST de Microsoft Graph:

Consola

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, haz clic en la conexión que creaste.

  3. En el panel Información de conexión, haz clic en Acceder a la cuenta de Azure.

  4. Accede a tu cuenta de Azure.

  5. En la página Permisos solicitados, haz clic en Aceptar.

Terraform

Agrega lo siguiente al archivo de configuración de 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

A fin de crear el principal del servicio para el ID de aplicación APP_ID que se mostró antes, el usuario debe tener el permiso Microsoft.directory/servicePrincipals/create.

Para crear la cuenta de servicio, ejecuta el comando New-AzADServicePrincipal:

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Reemplaza APP_ID por el ID de la app que se mostró antes.

CLI de Azure

Para crear el principal del servicio del ID de app APP_ID que se mostró antes, puedes usar la herramienta de línea de comandos de Azure. Debes tener el permiso Microsoft.directory/servicePrincipals/create para crear un principal de servicio.

Para crear la cuenta de servicio, ejecuta el comando az ad sp:

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

Reemplaza APP_ID por el ID de la app que se mostró antes.

API de REST de Microsoft

A fin de crear el principal del servicio para el ID de la aplicación APP_ID que se mostró antes, puedes enviar una solicitud HTTP a la API de REST de Microsoft Graph.

A fin de llamar a la API de REST de Microsoft Graph, recupera un token de OAuth para una aplicación. Para obtener más información, consulta Obtén acceso sin un usuario. La aplicación que se usa para llamar a la API de REST del Microsoft Graph debe tener el permiso de la aplicación Application.ReadWrite.All.

El TENANT_ID debe coincidir con el ID del directorio de Azure que contiene la cuenta de Azure Storage.

Para generar un token de OAuth, ejecuta el siguiente comando:

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')

Reemplaza lo siguiente:

  • TENANT_ID: El ID de usuario del directorio de Azure que contiene la cuenta de Azure Storage.
  • CLIENT_ID: el ID de cliente de Azure.
  • CLIENT_SECRET: el secreto del cliente de Azure.

Ejecute el siguiente comando:

export APP_ID=APP_ID

Reemplaza APP_ID por el ID de la app que se mostró.

Para crear un principal de servicio mediante una llamada a la API de REST del Microsoft Graph, ejecuta el siguiente comando:

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')

Reemplaza lo siguiente:

  • TOKEN: Es el token de OAuth de la aplicación.
  • APP_ID: El ID de la app que se mostró antes.

Asigna un rol a las aplicaciones de Azure AD de BigQuery

Portal de Azure

Para realizar asignaciones de funciones en el Portal de Azure, accede como un usuario con el permiso Microsoft.Authorization/roleAssignments/write. La asignación de funciones permite que la conexión de BigQuery Azure acceda a los datos de Azure Storage como se especifica en la política de funciones.

Para agregar asignaciones de roles con el Portal de Azure, sigue estos pasos:

  1. Desde tu cuenta de Azure Storage, ingresa IAM en la barra de búsqueda.

  2. Haz clic en Control de acceso (IAM).

  3. Haz clic en Add y selecciona Add role assignments.

  4. Para proporcionar acceso de solo lectura, selecciona el rol Lector de datos de almacenamiento de BLOB. Para proporcionar acceso de lectura y escritura, selecciona el rol Colaborador de datos de BLOB de almacenamiento.

  5. Configura Assign access to como User, group, or service principal.

  6. Haz clic en Seleccionar miembros.

  7. En el campo Seleccionar, ingresa el nombre de la app de Azure que se mostró cuando creaste la conexión de Azure BigQuery.

  8. Haz clic en Guardar.

Para obtener más información, consulta Asigna roles de Azure mediante el portal de Azure.

Terraform

Agrega lo siguiente al archivo de configuración de 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

Para agregar una asignación de rol para una principal de servicio en el alcance de un recurso, puedes usar el comando New-AzRoleAssignment:

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

Reemplaza lo siguiente:

  • APP_NAME: Es el nombre de la aplicación.
  • ROLE_NAME: Es el nombre del rol que deseas asignar.
  • RESOURCE_NAME: Es el nombre del recurso.
  • RESOURCE_TYPE: Es el tipo de recurso.
  • PARENT_RESOURCE: El recurso superior.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.

Si deseas obtener más información sobre el uso de Azure PowerShell para agregar un principal de servicio nuevo, consulta Asigna roles de Azure PowerShell.

CLI de Azure

Para agregar una asignación de rol a una principal de servicio en un permiso de recursos, puedes usar la herramienta de línea de comandos de Azure. Debes tener el permiso Microsoft.Authorization/roleAssignments/write para que la cuenta de almacenamiento otorgue roles.

Para asignar un rol, como el rol de colaborador de datos de BLOB de almacenamiento, al principal de servicio, ejecuta el comando 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

Reemplaza lo siguiente:

  • SP_ID: El ID del principal del servicio.
  • STORAGE_ACCOUNT_NAME: Es el nombre de la cuenta de almacenamiento.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.
  • SUBSCRIPTION_ID: El ID de suscripción.

Para obtener más información, consulta Asigna funciones de Azure con la CLI de Azure.

API de REST de Microsoft

Para agregar asignaciones de roles a un principal de servicio, puedes enviar una solicitud HTTP a Microsoft Management.

A fin de llamar a la API de REST de Microsoft Graph, recupera un token de OAuth para una aplicación. Para obtener más información, consulta Obtén acceso sin un usuario. La aplicación que llamó a la API de REST del Microsoft Graph debe tener el permiso de la aplicación Application.ReadWrite.All.

Para generar un token de OAuth, ejecuta el siguiente comando:

  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')

Reemplaza lo siguiente:

  • TENANT_ID: el ID de usuario que coincide con el ID del directorio de Azure que contiene la cuenta de Azure Storage.
  • CLIENT_ID: el ID de cliente de Azure.
  • CLIENT_SECRET: el secreto del cliente de Azure.

Obtén el ID de los roles integrados de Azure que deseas asignar al principal del servicio.

Estos son algunos roles comunes:

Para asignar un rol al principio de servicio, llama a la API de REST del gráfico de Microsoft a la API de REST de 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"
        }
    }'

Reemplaza lo siguiente:

  • ROLE_ASSIGNMENT_ID: El ID del rol.
  • SP_ID: El ID del principal del servicio.
  • SUBSCRIPTION_ID: El ID de suscripción.
  • RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos.
  • STORAGE_ACCOUNT_NAME: Es el nombre de la cuenta de almacenamiento.
  • SUBSCRIPTION_ID: El ID de suscripción.

La conexión ya está lista para usar. Sin embargo, puede haber una demora de propagación en las asignaciones de roles en Azure. Si no puedes usar la conexión debido a problemas de permisos, vuelve a intentarlo después de un tiempo.

Comparte conexiones con usuarios

Puedes otorgar los siguientes roles para permitir que los usuarios consulten datos y administren conexiones:

  • roles/bigquery.connectionUser: Permite que los usuarios usen conexiones para conectarse con fuentes de datos externas y ejecutar consultas en ellas.

  • roles/bigquery.connectionAdmin: Permite que los usuarios administren conexiones.

Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Roles y permisos predefinidos.

Selecciona una de las opciones siguientes:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

    Las conexiones se enumeran en tu proyecto, en un grupo llamado Conexiones externas.

  2. En el panel Explorador, haz clic en el nombre de tu proyecto > Conexiones externas > conexión.

  3. En el panel Detalles, haz clic en Compartir para compartir una conexión. A continuación, sigue estos pasos:

    1. En el cuadro de diálogo Permisos de conexión, agrega o edita las principales para compartir la conexión con otros principales.

    2. Haz clic en Guardar.

bq

No puedes compartir una conexión con la herramienta de línea de comandos de bq. Para compartir una conexión, usa la consola de Google Cloud o el método de la API de conexiones de BigQuery.

API

Consulta el método projects.locations.connections.setIAM en la sección de referencia de la API de REST de las conexiones de BigQuery y proporciona una instancia del recurso policy.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

¿Qué sigue?