Toegang tot Azure Data Lake Storage Gen2 met behulp van OAuth 2.0 met een Azure-service-principal

U kunt veilig toegang krijgen tot gegevens in een Azure Data Lake Storage Gen2-account (ADLS Gen2) met behulp van OAuth 2.0 met een Azure Active Directory(Azure AD)-toepassingsservice-principal voor verificatie. Het gebruik van een service-principal voor verificatie biedt twee opties voor toegang tot gegevens in uw opslagaccount:

  • Een bevestigingspunt naar een specifiek bestand of pad
  • Directe toegang tot gegevens

De optie die u selecteert, is afhankelijk van hoe u Databricks wilt gebruiken met ADLS Gen2 opslag:

  • Als u meerdere werkruimtegebruikers toegang wilt bieden tot een specifiek pad of een specifiek bestand, maakt u een bevestigingspunt voor de vereiste opslagresource en het vereiste pad.
  • Als u toegang wilt bieden aan meerdere werkruimtegebruikers met verschillende machtigingen, hebt u rechtstreeks toegang tot gegevens via Azure Blob File System (ABFS)-stuurprogramma.

Met behulp van standaardbestandssysteemsemantiek kunt u ook eenvoudig toegang krijgen tot een werkruimte met behulp van bevestigingspunten. Directe toegangspaden moeten daarentegen volledig worden opgegeven in uw notebooks. Deze functie van bevestigingspunten biedt mogelijk een betere gebruikerservaring voor meerdere gebruikers die toegang hebben tot algemene resources in een werkruimte.

In dit artikel wordt beschreven hoe u een Azure AD-toepassing en -service-principal maakt en die service-principal gebruikt om gegevens in een opslagaccount te ADLS Gen2 openen. Hier volgt een overzicht van de taken die in dit artikel worden beschreven:

  1. Maak een Azure AD-toepassing waarmee een gekoppelde service-principal wordt gemaakt die wordt gebruikt voor toegang tot het opslagaccount.
  2. Maak een Azure Key Vault geheim bereik met back-Azure Key Vault. In het geheime bereik wordt het clientgeheim dat is gekoppeld aan de Azure AD-toepassing veilig opgeslagen.
  3. Sla het clientgeheim dat is gekoppeld aan de Azure AD-toepassing op in de Azure-sleutelkluis. Het clientgeheim is vereist voor de authenticatie bij het opslagaccount. De sleutelkluis biedt beveiligde opslag van het geheim en maakt het mogelijk om het te gebruiken zonder rechtstreeks te verwijzen naar het geheim in de configuratie.
  4. Wijs rollen toe aan de toepassing om de service-principal de vereiste machtigingen te bieden voor toegang tot ADLS Gen2 opslagaccount.
  5. Maak een of meer containers in het opslagaccount. Net als directories in een bestandssysteem bieden containers een manier om objecten in een Azure-opslagaccount te organiseren. U moet een of meer containers maken voordat u toegang hebt tot een ADLS Gen2-opslagaccount.
  6. Verifieren en openen ADLS Gen2 opslagaccount via een bevestigingspunt of directe toegang.

In dit artikel wordt het gebruik van Azure Key Vault geheim bereik beschreven, maar u kunt ook een geheim bereik met Databricks-back-to-date gebruiken om het clientgeheim op te slaan.

Vereisten

Een Azure Active Directory registreren

Als u een Azure AD-toepassing registreert en de juiste machtigingen toewijst, maakt u een service-principal die toegang heeft tot ADLS Gen2 opslagbronnen.

  1. Ga in Azure Portal naar de Azure Active Directory service.

  2. Klik onder Beherenop App-registraties.

  3. Klik op + Nieuwe registratie. Voer een naam in voor de toepassing en klik op Registreren.

  4. Klik op Certificates Secrets.

  5. Klik op + Nieuw clientgeheim.

  6. Voeg een beschrijving voor het geheim toe en klik op Toevoegen.

  7. Kopieer de waarde voor het nieuwe geheim en sla deze op.

  8. Kopieer in het overzicht van de toepassingsregistratie de toepassings-id (client)-id en map-id (tenant-id)en sla deze op.

    Overzicht van app-registratie

Een Azure-sleutelkluis en geheim bereik maken

De Azure-sleutelkluis en een Azure Databricks geheime bereik maken die door die sleutelkluis worden back-by:

  1. Maak een Azure Key Vault-exemplaar in de Azure Portal.
  2. Maak het Azure Databricks geheime bereik dat wordt Azure Key Vault het Azure Key Vault maken.

Stap 1: een Azure Key Vault maken

  1. Selecteer in Azure Portal sleutelkluizen + Toevoegen en geef uw sleutelkluis een naam.

  2. Klik op Controleren + maken.

  3. Nadat de validatie is voltooid, klikt u op Maken.

  4. Nadat u de sleutelkluis heeft gemaakt, gaat u naar de pagina Eigenschappen voor de nieuwe sleutelkluis.

  5. Kopieer de Kluis-URI en resource-id en sla deze op.

    Azure Key Vault-eigenschappen

Stap 2: een geheim bereik Azure Key Vault back-Azure Key Vault maken

Azure Databricks-resources kunnen verwijzen naar geheimen die zijn opgeslagen in een Azure-sleutelkluis door een geheim bereik met Key Vault back-Key Vault te maken. U kunt de Azure Databricks UI, de Databricks Secrets CLIof de Databricks Secrets API 2.0 gebruiken om het geheime bereik met Azure Key Vault back-Azure Key Vault maken. In dit artikel wordt beschreven hoe u de gebruikersinterface en CLI gebruikt.

Het geheime bereik Azure Databricks de Azure Databricks maken

  1. Ga naar de Azure Databricks Pagina Geheim bereik maken op . Vervang per-workspace-url door de unieke URL per per-workspace-url voor uw Azure Databricks werkruimte.

  2. Voer een bereiknaam in.

  3. Voer de waarden voor kluis-URI en resource-id in voor de Azure-sleutelkluis die u hebt gemaakt in Stap 1: een Azure Key Vault maken.

  4. Klik op Create.

    Geheim bereik maken

Het geheime bereik Azure Databricks maken in de CLI

Als u een geheim bereik wilt maken dat wordt gebacked door de Azure-sleutelkluis met behulp van de Databricks CLI, opent u een terminal en voer u de volgende opdracht uit:

databricks secrets create-scope \
--scope <scope-name> \
--scope-backend-type AZURE_KEYVAULT \
--resource-id <azure-keyvault-resource-id> \
--dns-name <azure-keyvault-dns-name>

Vervangen

  • <scope-name> met een naam voor het nieuwe bereik.
  • <azure-keyvault-resource-id>met de resource-id <azure-keyvault-resource-id>
  • <azure-keyvault-dns-name> met de <azure-keyvault-dns-name>.

Een voorbeeld van het gebruik van de waarden uit stap 1: een Azure Key Vault maken:

databricks secrets create-scope \
--scope example-akv-scope \
--scope-backend-type AZURE_KEYVAULT \
--resource-id /subscriptions/… \
--dns-name https://example-akv.vault.azure.net/

Het clientgeheim opslaan in de Azure-sleutelkluis

  1. Ga in Azure Portal naar de service Sleutelkluizen.

  2. Selecteer de sleutelkluis die u hebt gemaakt in Stap 1: een Azure Key Vault maken.

  3. Klik Instellingen geheimenop Genereren/importeren.

  4. Selecteer de optie Handmatig uploaden en voer het clientgeheim in het veld Waarde in.

    Een geheim maken

Gebruik de Geheimen CLI om te controleren of het geheim is gemaakt:

databricks secrets list --scope example-akv-scope
Key name               Last updated
--------------------   --------------
example-adls2-secret   1605122724000

Rollen toewijzen

U kunt de toegang tot opslagbronnen beheren door rollen toe te wijzen aan een Azure AD-toepassingsregistratie die is gekoppeld aan het opslagaccount. In dit voorbeeld wordt de inzender Storage blobgegevens toegewezen aan ADLS Gen2 opslagaccount. Mogelijk moet u andere rollen toewijzen, afhankelijk van specifieke vereisten.

  1. Ga in Azure Portal naar de service Storage accounts.

  2. Selecteer het ADLS Gen2 dat u wilt gebruiken met deze toepassingsregistratie.

  3. Klik Access Control (IAM).

  4. Klik op + Toevoegen en selecteer Roltoewijzing toevoegen in de vervolgkeuzelijst.

  5. Stel het veld Selecteren in op de naam van de Azure AD-toepassing en stel Rol in op Storage Inzender voor blobgegevens.

  6. Klik op Opslaan.

    Toepassingsrollen toewijzen

Een container maken

Net als directories in een bestandssysteem bieden containers een manier om objecten in een Azure-opslagaccount te organiseren. U moet een of meer containers maken voordat u toegang hebt tot een ADLS Gen2-opslagaccount. U kunt een container rechtstreeks in een Azure Databricks maken of via de Azure-opdrachtregelinterface, de Azure-API of de Azure Portal. Een container maken via de portal:

  1. Ga in Azure Portal naar Storage accounts.

  2. Selecteer uw ADLS Gen2 account en klik op Containers.

  3. Klik op + Container.

  4. Voer een naam in voor de container en klik op Maken.

    Een container maken

Opslag ADLS Gen2 maken

U kunt als ADLS Gen2 opslag:

  1. Configureer OAuth 2.0-verificatie voor het ADLS Gen2 opslagaccount, met behulp van de service-principal als de referenties.
  2. Maak het bevestigingspunt via de Databricks-API.

Belangrijk

  • Alle gebruikers in de Azure Databricks hebben toegang tot het ADLS Gen2 account. De service-principal die u gebruikt voor toegang tot ADLS Gen2-account mag alleen toegang krijgen tot dat ADLS Gen2 account; deze mag geen toegang krijgen tot andere Azure-resources.
  • Wanneer u een bevestigingspunt via een cluster maakt, hebben clustergebruikers direct toegang tot het bevestigingspunt. Als u het bevestigingspunt in een ander actief cluster wilt gebruiken, moet u uitvoeren op het cluster dat wordt uitgevoerd om het zojuist gemaakte bevestigingspunt dbutils.fs.refreshMounts() beschikbaar te maken voor gebruik.
  • Het ontkoppelen van een bevestigingspunt terwijl taken worden uitgevoerd, kan leiden tot fouten. Zorg ervoor dat bij productietaken geen opslag wordt ontkoppeld als onderdeel van de verwerking.

Voer het volgende uit in uw notebook om een bevestigingspunt te verifiëren en te maken.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

Vervangen

  • <application-id>met de <application-id> voor Azure Active Directory toepassing.
  • <scope-name> door de naam van het geheime bereik van Databricks.
  • <service-credential-key-name> door de naam van de sleutel die het clientgeheim bevat.
  • <directory-id>met de <directory-id> de Azure Active Directory toepassing.
  • <container-name> door de naam van een container in het ADLS Gen2 opslagaccount.
  • <storage-account-name> door de ADLS Gen2 naam van het opslagaccount.
  • <mount-name> door de naam van het beoogde bevestigingspunt in DBFS.

Toegang tot bestanden in ADLS Gen2 bestandssysteem alsof het bestanden in DBFS zijn:

df = spark.read.text("/mnt/%s/...." % <mount-name>)
df = spark.read.text("dbfs:/mnt/<mount-name>/....")
val df = spark.read.text("/mnt/<mount-name>/....")
val df = spark.read.text("dbfs:/mnt/<mount-name>/....")

Als u een bevestigingspunt wilt ontkoppelen, gebruikt u de volgende opdracht:

dbutils.fs.unmount("/mnt/<mount-name>")

Toegang ADLS Gen2 rechtstreeks

De manier waarop u referenties door geeft om rechtstreeks toegang te krijgen tot opslagbronnen, is afhankelijk van of u de DataFrame- of Gegevensset-API of de RDD-API wilt gebruiken.

DataFrame- of DataSet-API

Als u Spark DataFrame of Gegevensset-API's gebruikt, raadt Databricks aan om uw accountreferenties in te stellen in de sessie-configuraties van uw notebook:

spark.conf.set("fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account-name>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account-name>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account-name>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"))
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account-name>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Vervangen

  • <storage-account-name> door de naam van het ADLS Gen2 opslagaccount.
  • <application-id>met de <application-id> voor Azure Active Directory toepassing.
  • <scope-name> door de naam van het geheime bereik van Databricks.
  • <service-credential-key-name> door de naam van de sleutel die het clientgeheim bevat.
  • <directory-id>met de <directory-id> de Azure Active Directory toepassing.

RDD-API

Als u de RDD-API gebruikt voor toegang tot ADLS Gen2, hebt u geen toegang tot hadoop-configuratieopties die zijn ingesteld met spark.conf.set(...) . Geef in plaats daarvan de Hadoop-configuratieopties op als Spark-configuraties wanneer u het cluster maakt. U moet het voorvoegsel toevoegen aan de Hadoop-configuratiesleutels om ze door te geven aan de Hadoop-configuraties die worden gebruikt spark.hadoop. door uw RDD-taken.

Waarschuwing

Deze referenties zijn beschikbaar voor alle gebruikers die toegang hebben tot het cluster.

spark.hadoop.fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account-name>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account-name>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account-name>.dfs.core.windows.net <service-credential>
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account-name>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Vervangen

  • <storage-account-name> door de naam van het ADLS Gen2 opslagaccount.
  • <application-id>met de <application-id> voor Azure Active Directory toepassing.
  • <service-credential> door de waarde van het clientgeheim.
  • <service-credential-key-name> door de naam van de sleutel die het clientgeheim bevat.
  • <directory-id>met de <directory-id> de Azure Active Directory toepassing.

Gebruik standaard Spark- en Databricks-API's om gegevens uit het opslagaccount te lezen:

val df = spark.read.parquet("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<directory-name>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<directory-name>")

Vervangen

  • <container-name> door de naam van een container in het ADLS Gen2 opslagaccount.
  • <storage-account-name> door de ADLS Gen2 naam van het opslagaccount.
  • <directory-name> met een optioneel pad in het opslagaccount.

Voorbeeld van notebook

In dit notebook wordt het gebruik van een service-principal gedemonstreerd voor het volgende:

  1. Verifiëren bij een ADLS Gen2 opslagaccount.
  2. Een bestandssysteem aan het opslagaccount toevoegen.
  3. Schrijf een JSON-bestand met IoT-gegevens (Internet of Things) naar de nieuwe container.
  4. Bestanden met directe toegang en via het bevestigingspunt.
  5. Lees en geef het IoT-bestand weer met behulp van directe toegang en via het bevestigingspunt.

ADLS Gen2 OAuth 2.0 met notebook voor Azure-service-principals

Notebook downloaden