Azure Active Directory 자격 증명 통과를 사용하여 액세스 Azure Data Lake Storage(레거시)

참고

이 문서에는 Azure Databricks에서 사용하지 않는 용어인 허용 목록에 포함된 용어에 대한 참조가 포함되어 있습니다. 소프트웨어에서 용어가 제거되면 이 문서에서 해당 용어를 제거합니다.

참고

자격 증명 통과는 레거시 데이터 거버넌스 모델입니다. Databricks는 Unity 카탈로그로 업그레이드하는 것이 좋습니다. Unity 카탈로그는 계정의 여러 작업 영역에서 데이터 액세스를 관리하고 감사하는 중앙 위치를 제공하여 데이터의 보안 및 거버넌스를 간소화합니다. Unity 카탈로그란?을 참조하세요.

Azure Databricks에 로그인하는 데 사용하는 것과 동일한 Azure AD(Azure Active Directory) ID를 사용하여 Azure Databricks(ADLS Gen1)에서 Azure Data Lake Storage Gen1에 액세스하고 Azure Databricks 클러스터에서 ADLS Gen2에 자동으로 인증할 수 있습니다. 클러스터에 Azure Data Lake Storage 자격 증명 통과를 사용하도록 설정하면 해당 클러스터에서 실행하는 명령은 스토리지에 액세스하기 위해 서비스 주체 자격 증명을 구성할 필요 없이 Azure Data Lake Storage 데이터를 읽고 쓸 수 있습니다.

Azure Data Lake Storage 자격 증명 통과는 Azure Data Lake Storage Gen1 및 Gen2에서만 지원됩니다. Azure Blob Storage는 자격 증명 통과를 지원하지 않습니다.

이 문서에서는 다음을 다룹니다.

  • 표준 및 높은 동시성 클러스터에 대한 자격 증명 통과를 사용하도록 설정합니다.
  • ADLS 계정에서 자격 증명 통과 구성 및 스토리지 리소스 초기화
  • 자격 증명 통과가 사용하도록 설정된 경우 ADLS 리소스에 직접 액세스합니다.
  • 자격 증명 통과가 사용하도록 설정된 경우 탑재 지점을 통해 ADLS 리소스에 액세스합니다.
  • 자격 증명 통과를 사용할 때 지원되는 기능 및 제한 사항입니다.

Notebook은 ADLS Gen1 및 ADLS Gen2 스토리지 계정에서 자격 증명 통과를 사용하는 예제를 제공하기 위해 포함됩니다.

요구 사항

중요

Azure Active Directory에 대한 트래픽을 허용하도록 구성되지 않은 방화벽 뒤에 있는 경우 Azure Active Directory 자격 증명으로 Azure Data Lake Storage 인증할 수 없습니다. Azure Firewall 기본적으로 Active Directory 액세스를 차단합니다. 액세스를 허용하려면 AzureActiveDirectory 서비스 태그를 구성합니다. Azure IP 범위 및 서비스 태그 JSON 파일의 AzureActiveDirectory 태그에서 네트워크 가상 어플라이언스에 대한 동등한 정보를 찾을 수 있습니다. 자세한 내용은 Azure Firewall 서비스 태그 및퍼블릭 클라우드용 Azure IP 주소를 참조하세요.

로깅 권장 사항

Azure Storage 진단 로그에서 ADLS 스토리지로 전달된 ID를 기록할 수 있습니다. 로깅 ID를 사용하면 ADLS 요청을 Azure Databricks 클러스터의 개별 사용자에 연결할 수 있습니다. 스토리지 계정에서 진단 로깅을 켜서 다음 로그 수신을 시작합니다.

  • Azure Data Lake Storage Gen1: Data Lake Storage Gen1 계정에 대한 진단 로깅 사용의 지침을 따릅니다.
  • Azure Data Lake Storage Gen2: 명령과 함께 PowerShell을 사용하여 구성합니다Set-AzStorageServiceLoggingProperty. 로그 항목 형식 2.0은 요청에 사용자 계정 이름을 포함하므로 버전으로 2.0을 지정합니다.

높은 동시성 클러스터에 Azure Data Lake Storage 자격 증명 통과 사용

여러 사용자가 높은 동시성 클러스터를 공유할 수 있습니다. Azure Data Lake Storage 자격 증명 통과를 통해 Python 및 SQL만 지원합니다.

중요

높은 동시성 클러스터에 Azure Data Lake Storage 자격 증명 통과를 사용하도록 설정하면 포트 44, 53 및 80을 제외한 클러스터의 모든 포트가 차단됩니다.

  1. 클러스터를 만들클러스터 모드높은 동시성으로 설정합니다.
  2. 고급 옵션에서 사용자 수준 데이터 액세스에 자격 증명 통과 사용을 선택하고 Python 및 SQL 명령만 허용합니다.

높은 동시성 클러스터에 대한 자격 증명 통과 사용

표준 클러스터에 Azure Data Lake Storage 자격 증명 통과 사용

자격 증명 통과가 있는 표준 클러스터는 단일 사용자로 제한됩니다. 표준 클러스터는 Python, SQL, Scala 및 R을 지원합니다. Databricks Runtime 10.4 LTS 이상에서는 sparklyr가 지원됩니다.

클러스터를 만들 때 사용자를 할당해야 하지만 언제든지 관리 가능 권한이 있는 사용자가 클러스터를 편집하여 원래 사용자를 바꿀 수 있습니다 .

중요

클러스터에서 명령을 실행하려면 클러스터에 할당된 사용자에게 클러스터에 연결할 있는 권한이 있어야 합니다. 관리자와 클러스터 작성자에는 관리 가능 권한이 있지만 지정된 클러스터 사용자가 아니면 클러스터에서 명령을 실행할 수 없습니다.

  1. 클러스터를 만들클러스터 모드표준으로 설정합니다.
  2. 고급 옵션에서 사용자 수준 데이터 액세스에 자격 증명 통과 사용을 선택하고 단일 사용자 액세스 드롭다운에서 사용자 이름을 선택합니다.

표준 클러스터에 대한 자격 증명 통과 사용

컨테이너 만들기

컨테이너는 Azure Storage 계정에서 개체를 구성하는 방법을 제공합니다.

자격 증명 통과를 사용하여 직접 Azure Data Lake Storage 액세스

Azure Data Lake Storage 자격 증명 통과를 구성하고 스토리지 컨테이너를 만든 후 경로를 사용하여 Azure Data Lake Storage Gen1에서 직접 데이터에 액세스하고 경로를 사용하여 adl://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()
  • 을 ADLS Gen1 스토리지 계정 이름으로 바꿉니다 <storage-account-name> .

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()
  • 을 ADLS Gen2 스토리지 계정의 컨테이너 이름으로 바꿉니다 <container-name> .
  • 을 ADLS Gen2 스토리지 계정 이름으로 바꿉니다 <storage-account-name> .

자격 증명 통과를 사용하여 DBFS에 Azure Data Lake Storage 탑재

Azure Data Lake Storage 계정 또는 폴더를 DBFS(Databricks 파일 시스템)란?에 탑재할 수 있습니다. 탑재는 데이터 레이크 저장소에 대한 포인터이므로 데이터가 로컬로 동기화되지 않습니다.

Azure Data Lake Storage 자격 증명 통과로 사용하도록 설정된 클러스터를 사용하여 데이터를 탑재하는 경우 탑재 지점에 대한 모든 읽기 또는 쓰기는 Azure AD 자격 증명을 사용합니다. 이 탑재 지점은 다른 사용자에게 표시되지만 읽기 및 쓰기 액세스 권한이 있는 사용자는 다음과 같은 사용자만 볼 수 있습니다.

  • 기본 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)

스칼라

 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)
  • 을 ADLS Gen2 스토리지 계정 이름으로 바꿉니다 <storage-account-name> .
  • 을 DBFS에서 의도한 탑재 지점의 이름으로 바꿉 <mount-name> 니다.

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)

스칼라

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)
  • 을 ADLS Gen2 스토리지 계정의 컨테이너 이름으로 바꿉니다 <container-name> .
  • 을 ADLS Gen2 스토리지 계정 이름으로 바꿉니다 <storage-account-name> .
  • 을 DBFS에서 의도한 탑재 지점의 이름으로 바꿉 <mount-name> 니다.

Warning

탑재 지점에 인증하기 위해 스토리지 계정 액세스 키 또는 서비스 주체 자격 증명을 제공하지 마세요. 그러면 다른 사용자가 해당 자격 증명을 사용하여 파일 시스템에 액세스할 수 있습니다. 자격 증명 통과를 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의 위치로 확인되는 경우에만 자격 증명이 전달됩니다. 다른 스토리지 시스템에 resolve DBFS 경로의 경우 다른 방법을 사용하여 자격 증명을 지정합니다.
Azure Data Lake Storage Gen2 5.5
델타 캐싱 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의 크기에 제한이 있습니다.
Notebook 범위 라이브러리 5.5
스칼라 5.5
SparkR 6.0
sparklyr 10.1
다른 Notebook에서 Databricks Notebook 실행 6.1
PySpark ML API 6.1 모든 PySpark ML 클래스가 지원됩니다.
클러스터 메트릭 6.1
Databricks Connect 7.3 통과는 표준 클러스터에서 지원됩니다.

제한

다음 기능은 Azure Data Lake Storage 자격 증명 통과에서 지원되지 않습니다.

  • %fs (대신 동일한 dbutils.fs 명령을 사용합니다.)
  • Databricks REST API 참조입니다.
  • 테이블 액세스 제어. Azure Data Lake Storage 자격 증명 통과에서 부여한 권한은 테이블 ACL의 세분화된 권한을 우회하는 데 사용할 수 있지만 테이블 ACL의 추가 제한은 자격 증명 통과에서 얻을 수 있는 몇 가지 이점을 제한합니다. 특히 다음을 수행합니다.
    • 특정 테이블의 기반이 되는 데이터 파일에 액세스할 수 있는 Azure AD 권한이 있는 경우 테이블 ACL을 통해 적용되는 제한 사항에 관계없이 RDD API를 통해 해당 테이블에 대한 모든 권한을 갖게 됩니다.
    • DataFrame API를 사용하는 경우에만 테이블 ACL 권한으로 제한됩니다. RDD API를 통해 직접 해당 파일을 읽을 수 있더라도 DataFrame API를 사용하여 파일을 직접 읽으려고 하면 파일에 대한 권한이 SELECT 없다는 경고가 표시됩니다.
    • 테이블을 읽을 수 있는 테이블 ACL 권한이 있더라도 Azure Data Lake Storage 이외의 파일 시스템에 의해 지원되는 테이블에서 읽을 수 없습니다.
  • SparkContext() 및 SparkSession(scspark) 개체에 대한 다음 메서드는 다음과 같습니다.
    • 사용되지 않는 메서드입니다.
    • 관리자가 아닌 사용자가 Scala 코드를 호출할 수 있도록 하는 및 addJar() 와 같은 addFile() 메서드
    • 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 패키지입니다.
  • Azure Active Directory 토큰 수명 정책을 사용하여 Azure Active Directory 통과 토큰의 수명을 연장할 수 없습니다. 따라서 1시간보다 오래 걸리는 명령을 클러스터에 보내면 1시간 표시 후에 Azure Data Lake Storage 리소스에 액세스하면 실패합니다.
  • Hive 2.3 이상을 사용하는 경우 자격 증명 통과가 사용하도록 설정된 클러스터에 파티션을 추가할 수 없습니다. 자세한 내용은 관련 문제 해결 섹션을 참조하세요.

Notebook 예제

다음 Notebook에서는 Azure Data Lake Storage Gen1 및 Gen2에 대한 Azure Data Lake Storage 자격 증명 통과를 보여 줍니다.

Azure Data Lake Storage Gen1 통과 Notebook

Notebook 가져오기

Azure Data Lake Storage Gen2 통과 Notebook

Notebook 가져오기

문제 해결

py4j.security.Py4JSecurityException: ... 가 허용 목록에 없습니다.

이 예외는 Azure Databricks가 Azure Data Lake Storage 자격 증명 통과 클러스터에 대해 안전한 것으로 명시적으로 표시되지 않은 메서드에 액세스한 경우 throw됩니다. 대부분의 경우 이는 메서드가 Azure Data Lake Storage 자격 증명 통과 클러스터의 사용자가 다른 사용자의 자격 증명에 액세스하도록 허용할 수 있음을 의미합니다.

org.apache.spark.api.python.PythonSecurityException: 경로 ... 신뢰할 수 없는 파일 시스템을 사용합니다.

이 예외는 Azure Data Lake Storage 자격 증명 통과 클러스터에서 안전하지 않은 파일 시스템에 액세스하려고 하면 throw됩니다. 신뢰할 수 없는 파일 시스템을 사용하면 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

이 문제를 해결하려면 자격 증명 통과를 사용하지 않고 클러스터에 파티션을 추가합니다.