Microsoft Entra ID (旧称 Azure Active Directory) の資格情報パススルーを使って Azure Data Lake Storage にアクセスする (レガシ)

重要

このドキュメントは廃止され、更新されない可能性があります。

資格情報のパススルーは、レガシ データ ガバナンス モデルです。 Databricks では、Unity Catalog にアップグレードすることをお勧めします。 Unity Catalog では、アカウントの複数のワークスペースにまたがってデータ アクセスを管理および監査するための一元的な場所を提供することで、データのセキュリティとガバナンスが簡素化されます。 「Unity Catalog とは」を参照してください。

セキュリティとガバナンス体制の強化については、Azure Databricks アカウント チームに連絡して、Azure Databricks アカウントの資格情報パススルーを無効にしてください。

Note

この記事には、Azure Databricks では使用されない "ホワイトリスト登録" という用語への言及があります。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。

Azure Databricks へのログインに使用したものと同じ Microsoft Entra ID (旧称 Azure Active Directory) の ID を使用して、Azure Databricks から Azure Data Lake Storage Gen1 (ADLS Gen1)、および Azure Databricks クラスターから Azure Data Lake Storage Gen2 (ADLS Gen2) に自動で認証することができます。 クラスターで Azure Data Lake Storage 資格情報パススルーを有効にすると、そのクラスターで実行するコマンドは、ストレージにアクセスするためのサービス プリンシパル資格情報を構成しなくても、Azure Data Lake Storage のデータの読み取りと書き込みができるようになります。

Azure Data Lake Storage資格情報パススルーは、Azure Data Lake Storage Gen1 と Gen2 でのみサポートされています。 Azure Blob ストレージでは、資格情報のパススルーはサポートされていません。

この記事には、次の内容が含まれます。

  • 標準クラスターと高コンカレンシー クラスターに対して資格情報パススルーを有効にする。
  • ADLS アカウントで資格情報パススルーを構成し、ストレージ リソースを初期化する。
  • 資格情報パススルーが有効になっている場合に ADLS リソースに直接アクセスする。
  • 資格情報パススルーが有効になっている場合に、マウント ポイントを介して ADLS リソースにアクセスする。
  • 資格情報パススルーを使用する場合にサポートされる機能と制限事項。

ADLS Gen1 ストレージ アカウントと ADLS Gen2 ストレージ アカウントとの間で資格情報パススルーを使用する例を提供するために、ノートブックが含まれています。

要件

  • Premium プラン。 Standard プランを Premium プランにアップグレードする方法の詳細については、「Azure Databricks ワークスペースをアップグレードまたはダウングレードする」を参照してください。
  • Azure Data Lake Storage Gen1 または Gen2 ストレージ アカウント。 Azure Data Lake Storage Gen2 ストレージ アカウントは、Azure Data Lake Storage の資格情報パススルーを操作するために、階層型名前空間を使用する必要があります。 階層型名前空間を有効にする方法など、新しい ADLS Gen2 アカウントを作成する手順については、「ストレージ アカウントを作成する」を参照してください。
  • Azure Data Lake Storage に対するユーザー アクセス許可が正しく構成されています。 Azure Databricks の管理者は、Azure Data Lake Storage に保存されているデータの読み取りと書き込みを行うための適切なロール (Storage BLOB データ共同作成者など) をユーザーが持っていることを確認する必要があります。 「Azure portal を使用して BLOB とキュー データへのアクセスのための Azure ロールを割り当てる」を参照してください。
  • パススルーが有効になっているワークスペースのワークスペース管理者の権限を確認し、既存のワークスペース管理者の割り当てを再検討します。 ワークスペース管理者は、ユーザーとサービス プリンシパルの追加、クラスターの作成、他のユーザーのワークスペース管理者への委任など、ワークスペースの操作を管理できます。 ジョブの所有権の管理やノートブックの表示などのワークスペース管理タスクは、Azure Data Lake Storage に登録されているデータへの間接的なアクセスを与える場合があります。 ワークスペース管理者は、慎重に配布する必要がある特権ロールです。
  • ADLS 資格情報 (サービス プリンシパルの資格情報など) で構成されたクラスターを資格情報パススルーと一緒に使用することはできません。

重要

Microsoft Entra ID へのトラフィックを許可するように構成されていないファイアウォールの背後にいる場合は、Microsoft Entra ID 資格情報を使用して Azure Data Lake Storage に対して認証できません。 Azure Firewall は、既定では Active Directory のアクセスをブロックします。 アクセスを許可するには、AzureActiveDirectory サービスタグを構成します。 ネットワーク仮想アプライアンスの同等の情報は、Azure IP 範囲とサービス タグ JSON ファイルの AzureActiveDirectory タグにあります。 詳細については、「Azure Firewall サービス タグ」とパブリック クラウド向けの Azure IP アドレスに関するページを参照してください。

ログの推奨事項

ADLS ストレージに渡された ID は、Azure ストレージ診断ログに記録できます。 ID を記録すると、ADLS 要求を Azure Databricks クラスター内の個々のユーザーに関連付けられます。 ストレージ アカウントで診断ログを有効にし、次のログの受信を開始します。

  • Azure Data Lake Storage Gen1: 「Data Lake Storage Gen1 アカウントの診断ログを有効にする」の手順に従います。
  • Azure Data Lake Storage Gen2: Set-AzStorageServiceLoggingProperty コマンドで PowerShell を使用して構成します。 ログ エントリ形式 2.0 には要求にユーザー プリンシパル名が含まれるため、バージョンとして 2.0 を指定します。

高コンカレンシー クラスターに対して Azure Data Lake Storage の資格情報パススルーを有効にする

高コンカレンシー クラスターは複数のユーザーで共有できます。 Azure Data Lake Storage の資格情報パススルーを使用した Python と SQL のみをサポートします。

重要

高コンカレンシー クラスター向けの Azure Data Lake Storage 資格情報パススルーを有効にすると、ポート 44、53、80 を除く、クラスター上のすべてのポートがブロックされます。

  1. クラスターを作成するときに、[クラスター モード][高コンカレンシー] に設定します。
  2. [詳細オプション] で、[Enable credential passthrough for user-level data access and only allow Python and SQL commands](ユーザー レベルのデータ アクセスに対して資格情報パススルーを有効にし、Python コマンドと SQL コマンドのみを許可する) を選択します。

Enable credential passthrough for High Concurrency clusters

Standard クラスターに対して Azure Data Lake Storage 資格情報のパススルーを有効にする

資格情報パススルーが有効な Standard クラスターは、1 人のユーザーに制限されます。 Standard クラスターでは、Python、SQL、Scala、R がサポートされます。Databricks Runtime 10.4 LTS 以上では、sparklyr がサポートされます。

クラスターの作成時にユーザーを割り当てる必要がありますが、管理可能アクセス許可を持つユーザーはいつでもクラスターを編集して、元のユーザーを置き換えることができます。

重要

クラスターでコマンドを実行するには、クラスターに割り当てられたユーザーが、そのクラスターに対して少なくともアタッチ可能アクセス許可を持っている必要があります。 ワークスペース管理者とクラスター作成者は、管理可能アクセス許可を持っていますが、指定されたクラスター ユーザーでない限り、そのクラスターでコマンドを実行することはできません。

  1. クラスターを作成するときに、クラスター モード標準に設定します。
  2. [詳細オプション] で、[Enable credential passthrough for user-level data access](ユーザー レベルのデータ アクセスに対して資格情報パススルーを有効にする) を選択し、[Single User Access](シングル ユーザー アクセス) ドロップダウンからユーザー名を選択します。

Enable credential passthrough for Standard clusters

コンテナーを作成する

コンテナーを使用すると、Azure ストレージ アカウント内のオブジェクトを整理するのに役立ちます。

資格情報パススルーを使用して Azure Data Lake Storage に直接アクセスする

Azure Data Lake Storage 資格情報パススルーを構成し、ストレージ コンテナーを作成した後は、adl:// パスを使用して Azure Data Lake Storage Gen1 内のデータに、また abfss:// パスを使用して Azure Data Lake Storage Gen2 内のデータにアクセスできます。

Azure Data Lake Storage Gen1

Python

spark.read.format("csv").load("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv").collect()

R

# SparkR
library(SparkR)
sparkR.session()
collect(read.df("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv", source = "csv"))

# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv") %>% sdf_collect()
  • <storage-account-name> は、ADLS Gen1 ストレージ アカウント名に置き換えます。

Azure Data Lake Storage Gen2

Python

spark.read.format("csv").load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv").collect()

R

# SparkR
library(SparkR)
sparkR.session()
collect(read.df("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv", source = "csv"))

# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv") %>% sdf_collect()
  • <container-name> は、ADLS Gen2 ストレージ アカウント内のコンテナーの名前に置き換えます。
  • <storage-account-name> は、ADLS Gen2 ストレージ アカウント名に置き換えます。

資格情報パススルーを使用して Azure Data Lake Storage を DBFS にマウントする

Azure Data Lake Storage アカウントまたはその内部のフォルダーを「Databricks ファイル システム (DBFS) とは」にマウントできます。 マウントはデータ レイク ストアへのポインターであるため、データがローカルで同期されることはありません。

Azure Data Lake Storage 資格情報のパススルーが有効になっているクラスターを使用してデータをマウントする場合、マウント ポイントに対する読み取りまたは書き込みでは、Microsoft Entra ID 資格情報を使用します。 このマウント ポイントは他のユーザーに表示されますが、読み取りと書き込みアクセス権を持つユーザーは次のユーザーのみです。

  • 基になる Azure Data Lake Storage ストレージ アカウントに対するアクセス権を持っている
  • Azure Data Lake Storage 資格情報のパススルーが有効になっているクラスターを使用している

Azure Data Lake Storage Gen1

Azure Data Lake Storage Gen1 リソースまたはその中のフォルダーをマウントするには、次のコマンドを使用します。

Python

configs = {
   "fs.adl.oauth2.access.token.provider.type": "CustomAccessTokenProvider",
   "fs.adl.oauth2.access.token.custom.provider": spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
 }

 # Optionally, you can add <directory-name> to the source URI of your mount point.
 dbutils.fs.mount(
   source = "adl://<storage-account-name>.azuredatalakestore.net/<directory-name>",
   mount_point = "/mnt/<mount-name>",
   extra_configs = configs)

Scala

 val configs = Map(
   "fs.adl.oauth2.access.token.provider.type" -> "CustomAccessTokenProvider",
   "fs.adl.oauth2.access.token.custom.provider" -> spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
 )

 // Optionally, you can add <directory-name> to the source URI of your mount point.
 dbutils.fs.mount(
   source = "adl://<storage-account-name>.azuredatalakestore.net/<directory-name>",
   mountPoint = "/mnt/<mount-name>",
   extraConfigs = configs)
  • <storage-account-name> は、ADLS Gen2 ストレージ アカウント名に置き換えます。
  • <mount-name> は、DBFS の目的のマウント ポイントの名前に置き換えます。

Azure Data Lake Storage Gen2

Azure Data Lake Storage Gen2 ファイルシステムまたはその中のフォルダーをマウントするには、次のコマンドを使用します。

Python

configs = {
  "fs.azure.account.auth.type": "CustomAccessToken",
  "fs.azure.account.custom.token.provider.class": spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}

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

Scala

val configs = Map(
  "fs.azure.account.auth.type" -> "CustomAccessToken",
  "fs.azure.account.custom.token.provider.class" -> spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
)

// 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/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)
  • <container-name> は、ADLS Gen2 ストレージ アカウント内のコンテナーの名前に置き換えます。
  • <storage-account-name> は、ADLS Gen2 ストレージ アカウント名に置き換えます。
  • <mount-name> は、DBFS の目的のマウント ポイントの名前に置き換えます。

警告

マウント ポイントを認証するために、ストレージ アカウントのアクセス キーまたはサービス プリンシパルの資格情報を指定しないでください。 これにより、他のユーザーはこれらの資格情報を使用してファイルシステムにアクセスできるようになります。 Azure Data Lake Storage 資格情報パススルーの目的は、これらの資格情報を使用しなくて済むようにし、ファイルシステムへのアクセスが、基になる Azure Data Lake Storage アカウントへのアクセス権を持つユーザーに制限されるようにすることです。

セキュリティ

Azure Data Lake Storage 資格情報のパススルー クラスターを他のユーザーと共有するのは安全です。 相互に分離されるため、互いの資格情報を読むまたは使用することはできません。

サポートされている機能

機能 Databricks の最低ランタイム バージョン メモ
Python と SQL 5.5
Azure Data Lake Storage Gen1 5.5
%run 5.5
DBFS 5.5 資格情報は、DBFS パスが Azure Data Lake Storage Gen1 または Gen2 内の場所に解決される場合にのみ渡されます。 他のストレージ システムに解決される DBFS パスの場合は、別の方法を使用して資格情報を指定します。
Azure Data Lake Storage Gen2 5.5
Delta キャッシュ 5.5
PySpark ML API 5.5 次の ML クラスはサポートされていません。

* org/apache/spark/ml/classification/RandomForestClassifier
* org/apache/spark/ml/clustering/BisectingKMeans
* org/apache/spark/ml/clustering/GaussianMixture
* org/spark/ml/clustering/KMeans
* org/spark/ml/clustering/LDA
* org/spark/ml/evaluation/ClusteringEvaluator
* org/spark/ml/feature/HashingTF
* org/spark/ml/feature/OneHotEncoder
* org/spark/ml/feature/StopWordsRemover
* org/spark/ml/feature/VectorIndexer
* org/spark/ml/feature/VectorSizeHint
* org/spark/ml/regression/IsotonicRegression
* org/spark/ml/regression/RandomForestRegressor
* org/spark/ml/util/DatasetUtils
ブロードキャスト変数 5.5 PySpark 内では、大きな UDF がブロードキャスト変数として送信されるため、作成できる Python UDF のサイズに制限があります。
ノートブック スコープのライブラリ 5.5
Scala 5.5
SparkR 6.0
sparklyr 10.1
Databricks ノートブックを別のノートブックから実行する 6.1
PySpark ML API 6.1 すべての PySpark ML クラスがサポートされています。
クラスターのメトリック 6.1
Databricks Connect 7.3 パススルーは標準クラスターでサポートされています。

制限事項

Azure Data Lake Storage 資格情報パススルーでは、次の機能はサポートされていません。

  • %fs (代わりに、同等の dbutils.fs コマンドを使用してください)。
  • Databricks ワークフロー
  • Databricks REST API リファレンス
  • Unity Catalog
  • テーブルのアクセス制御。 Azure Data Lake Storage 資格情報パススルーによって付与されるアクセス許可は、テーブル ACL の詳細なアクセス許可を回避するために使用できます。一方、テーブル ACL の追加の制限によって、資格情報パススルーによって得られるいくつかのベネフィットが制限されます。 特に次の点に違いがあります。
    • 特定のテーブルの基になるデータ ファイルにアクセスするための Microsoft Entra ID アクセス許可がある場合は、テーブル ACL を介して適用される制限に関係なく、RDD API を使用してそのテーブルに対する完全なアクセス許可を持つことになります。
    • DataFrame API を使用する場合にのみ、テーブル ACL アクセス許可によって制限されます。 DataFrame API を使用して直接ファイルを読み取る場合でも、RDD API を使用して直接ファイルを読み取ることはできますが、ファイルに対してアクセス許可 SELECT がないという警告が表示されます。
    • テーブルを読み取るためのテーブル ACL アクセス許可がある場合でも、Azure Data Lake Storage 以外のファイルシステムでサポートされているテーブルから読み取ることはできません。
  • SparkContext (sc) オブジェクトと SparkSession (spark) オブジェクトでは、次のメソッドがあります。
    • 非推奨とされるメソッド。
    • 管理者以外のユーザーが Scala コードを呼び出すことができる、addFile()addJar() などのメソッド。
    • Azure Data Lake Storage Gen1 または Gen2 以外のファイルシステムにアクセスするメソッド (Azure Data Lake Storage 資格情報パススルーが有効になっているクラスター上の他のファイルシステムにアクセスする場合は、別の方法を使用して資格情報を指定し、「トラブルシューティング」の信頼されたファイルシステムに関するセクションを参照してください)。
    • 以前の Hadoop API (hadoopFile()hadoopRDD())。
    • ストリーミング API。ストリームがまだ実行されている間は、パススルーされた資格情報が期限切れになります。
  • DBFS マウント (/dbfs) は、Databricks Runtime 7.3 LTS 以降でのみ使用できます。 資格情報のパススルーが構成されているマウント ポイントは、このパスではサポートされていません。
  • Azure Data Factory。
  • 高コンカレンシー クラスターでの MLflow
  • 高コンカレンシー クラスター上の azureml-sdk Python パッケージ。
  • Microsoft Entra ID トークンの有効期間ポリシーを使用して、Microsoft Entra ID パススルー トークンの有効期間を延長することはできません。 その結果、1 時間以上かかるコマンドをクラスターに送信した場合、1 時間経過後に Azure Data Lake Storage リソースにアクセスすると失敗します。
  • Hive 2.3 以降を使用している場合、資格情報パススルーが有効になっているクラスターにパーティションを追加することはできません。 詳細については、関連するトラブルシューティングのセクションを参照してください。

ノートブックの例

次のノートブックは、Azure Data Lake Storage Gen1 と Gen2 に対する Azure Data Lake Storage 資格情報パススルーを示しています。

Azure Data Lake Storage Gen1 のパススルー ノートブック

ノートブックを入手

Azure Data Lake Storage Gen2 のパススルー ノートブック

ノートブックを入手

トラブルシューティング

py4j.security.Py4JSecurityException: … がホワイトリストに登録されていない

この例外は、Azure Data Lake Storage 資格情報パススルー クラスターに対して安全であると Azure Databricks で明示的にマークされていないメソッドにアクセスしたときにスローされます。 ほとんどの場合、これは、メソッドを使用すると Azure Data Lake Storage 資格情報パススルー クラスター上のユーザーが別のユーザーの資格情報にアクセスできることを意味します。

org.apache.spark.api.python.PythonSecurityException: Path … で信頼されていないファイルシステムが使用される

この例外は、Azure Data Lake Storage 資格情報のパススルー クラスターによって安全と認識されないファイルシステムにアクセスしようとした場合にスローされます。 信頼されていないファイルシステムを使用すると、Azure Data Lake Storage 資格情報パススルー クラスターのユーザーが別のユーザーの資格情報にアクセスできるようになる可能性があります。したがって、信頼されていないすべてのファイルシステムを安全に使用することを許可していません。

Azure Data Lake Storage 資格情報パススルー クラスターで信頼できるファイルシステムのセットを構成するには、そのクラスターの Spark conf キー spark.databricks.pyspark.trustedFilesystems を、org.apache.hadoop.fs.FileSystem の信頼された実装であるクラス名のコンマ区切りリストとして設定します。

資格情報のパススルーが有効になっていると、パーティションの追加が AzureCredentialNotFoundException で失敗する

Hive 2.3-3.1 を使用する場合、資格情報のパススルーが有効になっているクラスターにパーティションを追加しようとすると、次の例外が発生します。

org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:com.databricks.backend.daemon.data.client.adl.AzureCredentialNotFoundException: Could not find ADLS Gen2 Token

この問題を回避するには、資格情報パススルーが有効になっていないクラスターにパーティションを追加します。