자습서: Azure Data Lake Storage Gen2에 연결

참고 항목

이 문서에서는 Azure Data Lake Storage Gen2에 대한 액세스를 구성하기 위한 레거시 패턴을 설명합니다. Databricks는 Unity 카탈로그를 사용하는 것이 좋습니다. Unity 카탈로그를 사용하여 Unity 카탈로그 메타스토어 만들기 및 클라우드 개체 스토리지 커넥트 참조하세요.

이 자습서에서는 Microsoft Entra ID 서비스 주체와 함께 OAuth 2.0을 사용하여 Azure Databricks에서 Azure Data Lake Storage Gen2로 연결하는 데 필요한 모든 단계를 안내합니다.

요구 사항

이 자습서를 시작하기 전에 다음 작업을 완료합니다.

1단계: Microsoft Entra ID 서비스 주체 만들기

서비스 주체를 사용하여 Azure Data Lake Storage Gen2에 연결하려면 관리자가 새 Microsoft Entra ID(이전의 Azure Active Directory) 애플리케이션을 만들어야 합니다. Microsoft Entra ID 서비스 주체를 이미 사용할 수 있는 경우 2단계: 서비스 주체에 대한 클라이언트 암호 만들기로 건너뜁니다.

Microsoft Entra ID 서비스 주체를 만들려면 다음 지침을 따릅니다.

  1. Azure Portal에 로그인합니다.

    참고 항목

    사용할 포털은 Microsoft Entra ID 애플리케이션이 Azure 퍼블릭 클라우드에서 실행되는지 또는 국가 또는 소버린 클라우드에서 실행되는지에 따라 다릅니다. 자세한 내용은 국가별 클라우드를 참조하세요.

  2. 여러 테넌트, 구독 또는 디렉터리에 액세스할 수 있는 경우 상단 메뉴에서 디렉터리 + 구독(필터가 있는 디렉터리) 아이콘을 클릭하여 서비스 주체를 프로비저닝할 디렉터리로 전환합니다.

  3. <Microsoft Entra ID를 검색하고 선택합니다.

  4. 관리에서 앱 등록 > 새 등록을 클릭합니다.

  5. 이름에 애플리케이션의 이름을 입력합니다.

  6. 지원되는 계정 유형 섹션에서 이 조직 디렉터리의 계정만(단일 테넌트)을 선택합니다.

  7. 등록을 클릭합니다.

2단계: 서비스 주체에 대한 클라이언트 암호 만들기

  1. 관리에서 인증서 및 비밀을 클릭합니다.

  2. 클라이언트 암호 탭에서 새 클라이언트 암호를 클릭합니다.

    새 클라이언트 암호

  3. 클라이언트 암호 추가 창의 설명에 클라이언트 암호에 대한 설명을 입력합니다.

  4. 만료에 클라이언트 암호의 만료 기간을 선택한 다음, 추가를 클릭합니다.

  5. 이 클라이언트 암호는 애플리케이션의 비밀이므로 클라이언트 암호의 을 복사하여 안전한 위치에 저장합니다.

  6. 애플리케이션 페이지의 개요 페이지에서 Essentials 섹션의 다음 값을 복사합니다.

    • 애플리케이션(클라이언트) ID
    • 디렉터리(테넌트) ID

    Azure 등록된 앱 개요

3단계: 서비스 주체에게 Azure Data Lake Storage Gen2에 대한 액세스 권한 부여

서비스 주체에 역할을 할당하여 스토리지 리소스에 대한 액세스 권한을 부여합니다. 이 자습서에서는 Azure Data Lake Storage Gen2 계정의 서비스 주체에 Storage Blob 데이터 기여자를 할당합니다. 특정 요구 사항에 따라 다른 역할을 할당해야 할 수도 있습니다.

  1. Azure Portal에서 스토리지 계정 서비스로 이동합니다.
  2. 사용할 Azure Storage 계정을 선택합니다.
  3. 액세스 제어(IAM)를 클릭합니다.
  4. + 추가를 클릭하고, 드롭다운 메뉴에서 역할 할당 추가를 선택합니다.
  5. 선택 필드를 1단계에서 만든 Microsoft Entra ID 애플리케이션 이름으로 설정하고 Storage Blob 데이터 기여자로 역할을설정합니다.
  6. 저장을 클릭합니다.

4단계: Azure Key Vault에 클라이언트 암호 추가

Azure Key Vault에서 1단계의 클라이언트 암호를 저장할 수 있습니다.

  1. Azure Portal에서 키 자격 증명 모음 서비스로 이동합니다.
  2. 사용할 Azure Key Vault를 선택합니다.
  3. Key Vault 설정 페이지에서 비밀을 선택합니다.
  4. + 생성/가져오기를 클릭합니다.
  5. 업로드 옵션에서 수동을 선택합니다.
  6. 이름에 비밀 이름을 입력합니다. 비밀 이름은 키 자격 증명 모음 내에서 고유해야 합니다.
  7. 에 1단계에서 저장한 클라이언트 암호를 붙여넣습니다.
  8. 만들기를 클릭합니다.

5단계: Azure Databricks 작업 영역에서 Azure Key Vault 지원 비밀 범위 만들기

Azure Key Vault에 저장된 클라이언트 비밀을 참조하려면 Azure Databricks에서 Azure Key Vault에서 지원되는 비밀 범위를 만들 수 있습니다.

  1. https://<databricks-instance>#secrets/createScope(으)로 이동합니다. 이 URL은 대/소문자를 구분합니다. createScope의 범위는 대문자여야 합니다.

    범위 만들기

  2. 비밀 범위의 이름을 입력합니다. 비밀 범위 이름은 대/소문자를 구분하지 않습니다.

  3. 보안 주체 관리 드롭다운 메뉴를 사용하여 모든 사용자가 이 비밀 범위에 대한 MANAGE 권한을 갖는지 아니면 비밀 범위의 작성자(즉, 사용자)만 갖는지 여부를 지정합니다.

  4. DNS 이름(예: https://databrickskv.vault.azure.net/) 및 리소스 ID를 입력합니다. 예를 들면 다음과 같습니다.

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    이러한 속성은 Azure Portal에 있는 Azure Key Vault의 속성 탭에서 사용할 수 있습니다.

    Azure Key Vault 속성 탭

  5. 만들기 단추를 클릭합니다.

6단계: Python을 사용하여 Azure Data Lake Storage Gen2에 연결

이제 Azure Databricks Notebook에서 인증을 위해 Microsoft Entra ID 애플리케이션 서비스 주체와 함께 OAuth 2.0을 사용하여 Azure Storage 계정의 데이터에 안전하게 액세스할 수 있습니다.

  1. Azure Databricks 작업 영역으로 이동하여 새 Python Notebook을 만듭니다.

  2. 아래 바꾸기 항목과 함께 다음 Python 코드를 실행하여 Azure Data Lake Storage Gen2에 연결합니다.

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

    바꾸기

    • <scope> 5단계의 비밀 범위 이름을 사용합니다.
    • <service-credential-key>을 클라이언트 암호가 포함된 키 이름으로 바꿉니다.
    • <storage-account>를 Azure 스토리지 계정의 이름으로 바꿉니다.
    • <application-id> Microsoft Entra ID 애플리케이션에 대한 애플리케이션(클라이언트) ID 를 사용합니다.
    • <directory-id> Microsoft Entra ID 애플리케이션에 대한 디렉터리(테넌트) ID 를 사용합니다.

    이제 Azure Databricks 작업 영역을 Azure Data Lake Storage Gen2 계정에 성공적으로 연결했습니다.

Azure Data Lake Storage Gen2에 대한 Azure Databricks 작업 영역 액세스 권한 부여

Azure Data Lake Storage Gen2에서 방화벽을 구성하는 경우 Azure Databricks 작업 영역이 Azure Data Lake Storage Gen2에 연결할 수 있도록 네트워크 설정을 구성해야 합니다. 먼저 Azure Virtual Network에 Azure Databricks 배포(VNet 삽입)에 따라 Azure Databricks 작업 영역이 자체 가상 네트워크에 배포되었는지 확인합니다. 그런 다음, 서브넷에서 Azure Data Lake Storage Gen2 계정으로의 연결을 허용하도록 프라이빗 엔드포인트 또는 가상 네트워크의 액세스를 구성할 수 있습니다.

서버리스 SQL 웨어하우스와 같은 서버리스 컴퓨팅을 사용하는 경우 서버리스 컴퓨팅 평면에서 Azure Data Lake Storage Gen2로의 액세스 권한을 부여해야 합니다. 서버리스 컴퓨팅 평면 네트워킹을 참조 하세요.

프라이빗 엔드포인트를 사용하여 액세스 권한 부여

Azure Data Lake Storage Gen2 계정에 프라이빗 엔드포인트를 사용하여 Azure Databricks 작업 영역이 프라이빗 링크를 통해 데이터에 안전하게 액세스할 수 있도록 할 수 있습니다.

Azure Portal을 사용하여 프라이빗 엔드포인트를 만들려면 자습서: Azure 프라이빗 엔드포인트를 사용하여 스토리지 계정에 커넥트 참조하세요. Azure Databricks 작업 영역이 배포된 것과 동일한 가상 네트워크에 프라이빗 엔드포인트를 만들어야 합니다.

가상 네트워크에서 액세스 권한 부여

Virtual Network 서비스 엔드포인트를 사용하면 중요한 Azure 서비스 리소스를 가상 네트워크로만 보호할 수 있습니다. Azure Databricks 작업 영역에 사용한 VNet 내에서 Azure Storage에 대한 서비스 엔드포인트를 사용하도록 설정할 수 있습니다.

Azure CLI 및 PowerShell 지침을 비롯한 자세한 내용은 가상 네트워크에서 액세스 권한 부여를 참조하세요.

  1. Azure Data Lake Storage Gen2 계정에서 Storage 계정 기여자 역할을 가진 사용자로 Azure Portal에 로그인합니다.
  2. Azure Storage 계정으로 이동하고 네트워킹 탭으로 이동합니다.
  3. 선택한 가상 네트워크 및 IP 주소에서 액세스를 허용하도록 선택했는지 확인합니다.
  4. 가상 네트워크에서 기존 가상 네트워크 추가를 선택합니다.
  5. 사이드 패널의 구독 아래에서 가상 네트워크가 있는 구독을 선택합니다.
  6. 가상 네트워크에서 Azure Databricks 작업 영역이 배포된 가상 네트워크를 선택합니다.
  7. 서브넷에서 모두 선택을 선택합니다.
  8. 활성화를 클릭합니다.
  9. 저장을 선택하여 변경 내용을 적용합니다.

문제 해결

오류: IllegalArgumentException: 범위가 있는 비밀이 존재하지 않음: KeyVaultScope 및 키

이 오류는 다음을 의미합니다.

  • 코드에서 참조되는 Databricks 지원 범위가 유효하지 않습니다.

이 문서의 4단계에서 비밀 이름을 검토합니다.

오류: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks에서 키 자격 증명 모음에 액세스할 수 없음

이 오류는 다음을 의미합니다.

  • 코드에서 참조되는 Databricks 지원 범위가 유효하지 않습니다. 또는 Key Vault에 저장된 비밀이 만료되었습니다.

3단계를 검토하여 Azure Key Vault 비밀이 유효한지 확인합니다. 이 문서의 4단계에서 비밀 이름을 검토합니다.

오류: ADAuthenticator$HttpException: HTTP 오류 401: AzureAD 응답에서 토큰을 가져오지 못함

이 오류는 다음을 의미합니다.

  • 서비스 주체의 클라이언트 암호 키가 만료되었습니다.

이 문서의 2단계에 따라 새 클라이언트 비밀을 만들고 Azure Key Vault에서 비밀을 업데이트합니다.

리소스