다음을 통해 공유


클라우드 스토리지를 Azure Databricks에 연결하는 외부 위치 만들기

이 문서에서는 Azure Databricks에서 클라우드 스토리지에 대한 액세스를 제어하도록 Unity 카탈로그에서 외부 위치 개체를 구성하는 방법을 설명합니다.

외부 위치 개요

외부 위치는 스토리지 자격 증명 을 클라우드 개체 스토리지 컨테이너와 연결합니다. 외부 위치는 다음을 정의하는 데 사용됩니다.

  • 관리되는 테이블 및 볼륨에 대한 관리되는 스토리지 위치입니다. 관리되는 스토리지 위치는 메타스토어, 카탈로그 또는 스키마 수준에서 사용할 수 있습니다. Unity 카탈로그에서 관리되는 스토리지 위치 지정을 참조하세요.

  • 외부 테이블 및 외부 볼륨의 위치입니다.

외부 위치는 Azure Data Lake Storage 스토리지 컨테이너, AWS S3 버킷 또는 Cloudflare R2 버킷의 스토리지를 참조할 수 있습니다.

아래 다이어그램은 외부 위치가 스토리지 자격 증명 및 클라우드 스토리지 위치를 참조하는 방법을 보여 줍니다.

스토리지 자격 증명, 외부 위치 및 클라우드 스토리지 간의 관계

이 다이어그램에서는 다음을 수행합니다.

  • 각 외부 위치는 하나의 스토리지 자격 증명과 하나의 클라우드 스토리지 위치를 참조합니다.
  • 하나의 스토리지 자격 증명은 여러 외부 위치에서 참조할 수 있습니다. 스토리지 자격 증명 1은 경로 bucket/tables/*아래의 모든 항목에 대한 액세스 권한을 부여하므로 외부 위치 A외부 위치 B 가 모두 참조합니다.

외부 위치 만들기 개요

다음 인터페이스를 사용하여 외부 위치를 만들 수 있습니다.

  1. 카탈로그 탐색기

    이 옵션은 그래픽 UI를 제공합니다. 카탈로그 탐색기를 사용하여 Azure Data Lake Storage 컨테이너, S3 버킷(읽기 전용), Cloudflare R2 버킷 및 DBFS 루트(레거시)를 참조하는 외부 위치를 만들 수 있습니다.

  2. Notebook 또는 Databricks SQL 쿼리의 SQL 명령

  3. The Databricks CLI

  4. Terraform

이 문서에서는 옵션 1과 2를 다룹니다.

Note

DBFS 루트 스토리지 위치에 데이터를 저장하는 것은 레거시 사례이며 Databricks는 이를 권장합니다. 그러나 작업 영역이 DBFS 루트에 데이터를 저장하는 경우 Unity 카탈로그를 사용하여 해당 데이터에 대한 액세스를 제어하는 외부 위치를 만들 수 있습니다. 자세한 내용은 DBFS 루트 외부 위치(레거시)에 연결을 참조하세요.

외부 위치의 사용 및 스토리지 자격 증명과 외부 위치 간의 관계에 대한 자세한 내용은 Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 연결을 참조하세요.

시작하기 전에

Prerequisites:

  • Azure Databricks에서 외부 위치 개체를 만들기 전에 외부 위치로 사용하려는 Azure Data Lake Storage 스토리지 컨테이너, AWS S3 버킷 또는 Cloudflare R2 버킷을 만들어야 합니다.

    • 외부 위치로 사용하는 Azure Data Lake Storage 스토리지 계정에는 계층 구조 네임스페이스가 있어야 합니다.

    • 스토리지 계정에서 공용 네트워크 액세스를 사용하지 않도록 설정한 경우 Azure Databricks가 스토리지 계정에 연결할 수 있도록 Azure 신뢰할 수 있는 서비스 허용 옵션을 사용하도록 설정해야 합니다. Azure CLI를 사용하여 이 설정을 구성할 수 있습니다.

      # Check current network rule set
      az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query "networkRuleSet"
      
      # Set bypass for Azure Services
      az storage account update \
        --name <storage_account_name> \
        --resource-group <resource_group_name> \
        --bypass AzureServices
      
  • S3 버킷 이름에는 점 표기법(예: incorrect.bucket.name.notation)을 사용하지 마세요. AWS는 버킷 이름에 점을 허용하지만 Databricks는 점 표기법이 있는 S3 버킷을 지원하지 않습니다. 점이 포함된 버킷은 SSL 인증서 유효성 검사 실패로 인해 델타 공유와 같은 기능과의 호환성 문제를 일으킬 수 있습니다. 자세한 내용은 AWS 버킷 명명 모범 사례를 참조하세요.

  • 외부 위치 경로는 표준 ASCII 문자(문자A–Z, a–z숫자 0–9및 공통 기호(예: /, _-)만 포함해야 합니다.

사용 권한 요구 사항:

  • 메타스토어와 외부 위치에서 참조되는 스토리지 자격 증명 모두에 대한 권한이 있어야 합니다 CREATE EXTERNAL LOCATION . Metastore 관리자는 기본적으로 메타스토어에 대한 CREATE EXTERNAL LOCATION 권한을 가지고 있습니다.
  • DBFS 루트 스토리지 위치에 대한 외부 위치를 만드는 경우 시스템에서 스토리지 자격 증명을 만들 수 있지만 작업 영역 관리자여야 합니다. 자세한 내용은 DBFS 루트 외부 위치(레거시)에 연결을 참조하세요.

옵션 1: 카탈로그 탐색기를 사용하여 외부 위치 만들기

카탈로그 탐색기를 사용하여 수동으로 외부 위치를 만들 수 있습니다.

사용 권한 및 필수 구성 요소: 시작하기 전에 참조하세요.

외부 위치를 만들려면 다음을 수행합니다.

  1. 메타스토어에 연결된 작업 영역에 로그인합니다.

  2. 사이드바에서 데이터 아이콘을 클릭합니다.카탈로그.

  3. 빠른 액세스 페이지에서 외부 데이터 버튼을 클릭하고, 외부 위치 탭으로 이동한 다음, 위치 생성을 클릭합니다.

  4. 외부 위치 이름을 입력합니다.

  5. 스토리지 유형( Azure Data Lake Storage, S3(읽기 전용), R2 또는 DBFS 루트를 선택합니다.

    DBFS 루트에 데이터를 저장하는 것은 권장되지 않는 레거시 관행입니다. 자세한 내용은 DBFS 루트 외부 위치(레거시)에 연결을 참조하세요.

  6. URL에서 외부 위치에 대한 경로를 입력하거나 선택합니다.

    Azure Data Lake Storage, S3 및 R2의 경우 다음과 같은 옵션이 있습니다.

    • 기존 DBFS 탑재 지점의 컨테이너 경로를 복사하려면 DBFS 에서 복사를 클릭합니다.

    • 기존 탑재 지점에서 복사하지 않는 경우 URL 필드를 사용하여 외부 위치로 사용할 컨테이너 또는 버킷 경로를 입력합니다.

      예를 들어 abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> 또는 r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>입니다.

    DBFS 루트의 경우:

    • 시스템은 DBFS 루트 스토리지 위치에 대한 하위 경로를 채웁니다. 작업 영역 관리자인 경우 시스템에서 스토리지 자격 증명도 만듭니다.

    DBFS 루트 외부 위치(레거시)에 대한 연결을 참조하세요.

  7. 외부 위치에 대한 액세스 권한을 부여하는 스토리지 자격 증명을 선택합니다.

    Note

    외부 위치가 DBFS 루트용이고 작업 영역 관리자인 경우 시스템에서 스토리지 자격 증명을 만들어 선택할 필요가 없습니다.

    스토리지 자격 증명이 없는 경우, 하나 만들 수 있습니다.

    1. 저장 자격 증명 드롭다운 목록에서 + 새 저장 자격 증명선택합니다.

    2. 입력하는 자격 증명 정보는 스토리지 유형에 따라 달라집니다.

      Azure Data Lake Storage의 경우 액세스 커넥터 ID와 스토리지 위치에 대한 액세스를 제공하는 사용자 할당 관리 ID(선택 사항)를 입력합니다. Azure Data Lake Storage에 액세스하는 스토리지 자격 증명 만들기를 참조하세요.

      Cloudflare API 토큰의 경우 Cloudflare 계정, 액세스 키 ID 및 비밀 액세스 키를 입력합니다. Cloudflare R2에 연결하기 위한 스토리지 자격 증명 만들기를 참조하세요.

      AWS S3의 경우 스토리지 위치에 대한 액세스를 제공하는 IAM 역할 ARN을 입력합니다. AWS S3에 연결하기 위한 스토리지 자격 증명 만들기(읽기 전용)를 참조하세요.

  8. (선택 사항) 사용자가 외부 위치에 대한 읽기 전용 액세스 권한을 갖도록 하려면 고급 옵션을 클릭하고 읽기 전용을 선택합니다. 자세한 내용은 외부 위치를 읽기 전용으로 표시를 참조하세요.

    AWS S3 경로를 참조하는 외부 위치는 기본적으로 읽기 전용입니다.

  9. (선택 사항) 외부 위치가 Hive 메타스토어 페더레이션 카탈로그용인 경우 고급 옵션을 클릭하고 폴백 모드를 사용하도록 설정합니다.

    외부 위치에서 대체 모드 사용을참조하세요.

  10. (선택 사항, AWS S3 위치에만 해당) S3 버킷에 SSE 암호화가 필요한 경우 Unity 카탈로그의 외부 테이블 및 볼륨이 S3 버킷의 데이터에 액세스할 수 있도록 암호화 알고리즘을 구성할 수 있습니다.

    지침은 외부 위치에서 암호화 알고리즘 구성을 참조하세요(AWS S3에만 해당).

  11. (선택 사항) 외부 위치에서 변경 알림을 구독하는 기능을 사용하도록 설정하려면 고급 옵션을 클릭하고 파일 이벤트 사용을 선택합니다.

    자세한 내용은 외부 위치에 대한 파일 이벤트 사용(권장)을 참조하세요.

  12. 만들기를 클릭합니다.

  13. (선택 사항) 외부 위치를 특정 작업 영역에 바인딩합니다.

    기본적으로 권한 있는 사용자는 메타스토어에 연결된 모든 작업 영역에서 외부 위치를 사용할 수 있습니다. 특정 작업 영역에서만 액세스를 허용하려면 작업 영역 탭으로 이동하여 작업 영역을 할당합니다. (선택 사항) 특정 작업 영역에 외부 위치 할당을 참조 하세요.

  14. 사용 권한 탭으로 이동하여 외부 위치 사용 권한을 부여하십시오.

    외부 위치를 사용하려면 다음 권한을 부여해야 합니다.

    • 외부 위치를 사용하여 메타스토어, 카탈로그 또는 스키마에 관리되는 스토리지 위치를 추가하려면 권한을 부여합니다 CREATE MANAGED LOCATION .
    • 외부 테이블 또는 볼륨을 만들려면 CREATE EXTERNAL TABLE 권한을 부여하거나 CREATE EXTERNAL VOLUME 권한을 부여하십시오.
    1. Grant를 클릭합니다.
    2. 권한 부여 <external ___location> 대화 상자에서, 보안 주체 필드에 있는 사용자, 그룹 또는 서비스 주체를 선택하고, 부여할 권한을 선택합니다.
    3. Grant를 클릭합니다.

옵션 2: SQL을 사용하여 외부 위치 만들기

SQL을 사용하여 외부 위치를 만들려면 Notebook 또는 SQL 쿼리 편집기에서 다음 명령을 실행합니다. 자리 표시자 값을 바꿉니다. 필요한 권한 및 필수 구성 요소는 시작하기 전에 참조하세요.

  • <___location-name>: 외부 위치의 이름입니다. location_name에 특수 문자가 포함되어 있는 경우, 하이픈(-)과 같은 각 특수 문자는 백틱(` `)로 감싸야 합니다. 이름을 참조하세요.
  • <bucket-path>: 이 외부 위치가 액세스 권한을 부여하는 클라우드 테넌트의 경로입니다. 예를 들어 abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> 또는 r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>입니다.
  • <storage-credential-name>: 스토리지 컨테이너 또는 버킷 경로의 읽기 및 쓰기 권한을 부여하는 스토리지 자격 증명의 이름입니다. 스토리지 자격 증명 이름에 하이픈(-)과 같은 특수 문자가 포함된 경우 백틱(` `)으로 묶어야 합니다.
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<___location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

작업 영역 바인딩 또는 외부 위치 격리라고도 하는 계정의 특정 작업 영역에 대한 외부 위치 액세스를 제한하려면 (선택 사항) 특정 작업 영역에 외부 위치 할당을 참조 하세요.

(선택 사항) 특정 작업 영역에 외부 위치 할당

기본적으로 메타스토어의 모든 작업 영역에서 외부 위치에 액세스할 수 있습니다. 즉, 사용자에게 해당 외부 위치에 대한 권한(예: READ FILES)이 부여된 경우 메타스토어에 연결된 모든 작업 영역에서 해당 권한을 행사할 수 있습니다. 작업 영역을 사용하여 사용자 데이터 액세스를 격리하는 경우 특정 작업 영역에서만 외부 위치에 대한 액세스를 허용할 수 있습니다. 이 기능을 작업 영역 바인딩 또는 외부 위치 격리라고 합니다.

외부 위치를 특정 작업 영역에 바인딩하는 일반적인 사용 사례는 다음과 같습니다.

  • 프로덕션 데이터가 포함된 외부 위치에 대한 권한이 있는 CREATE EXTERNAL TABLE 데이터 엔지니어가 프로덕션 작업 영역에서만 해당 위치에 외부 테이블을 만들 수 있도록 합니다.
  • 중요한 데이터가 포함된 외부 위치에 대한 권한이 있는 READ FILES 데이터 엔지니어가 특정 작업 영역만 사용하여 해당 데이터에 액세스할 수 있도록 합니다.

작업 영역별로 다른 유형의 데이터 액세스를 제한하는 방법에 대한 자세한 내용은 특정 작업 영역에 대한 카탈로그 액세스 제한을 참조 하세요.

Important

작업 영역 바인딩은 외부 위치에 대한 권한이 행사되는 시점에 참조됩니다. 예를 들어 사용자가 작업 영역에서 문을 CREATE TABLE myCat.mySch.myTable LOCATION 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance'myWorkspace 실행하여 외부 테이블을 만드는 경우 일반 사용자 권한 검사 외에도 다음 작업 영역 바인딩 검사가 수행됩니다.

  • 외부 위치가 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance'myWorkspace에 바인딩되어 있나요?
  • 카탈로그 myCatmyWorkspaceRead & Write 수준의 접근 권한으로 바인딩되어 있나요?

외부 위치가 이후 myWorkspace와의 바인딩이 해제되면 외부 테이블은 계속 작동합니다.

또한 이 기능을 사용하면 다른 작업 영역에서 외부 위치를 사용할 수 있도록 하지 않고도 중앙 작업 영역에서 카탈로그를 채우고 카탈로그 바인딩을 사용하여 다른 작업 영역에서 카탈로그를 사용할 수 있도록 할 수 있습니다.

서버리스 송신 컨트롤이 구성되지 않은 경우, 외부 위치는 외부 위치가 직접 참조될 때만 확인됩니다. 예를 들어 CREATE TABLE 또는 CREATE EXTERNAL TABLE 문장에서 참조됩니다.

서버리스 송신 컨트롤이 구성된 경우 바인딩도 간접적으로 확인됩니다(예: 사용자가 해당 외부 위치에 종속된 카탈로그 또는 외부 테이블의 데이터에 액세스하는 경우). 이 경우 외부 위치 바인딩은 카탈로그 바인딩과 일치시켜야 하며, 그렇지 않을 경우 모든 작업 영역에 대한 액세스를 허용으로 설정하거나 isolation-mode을(를) OPEN로 변경하여 사용하지 않도록 설정해야 합니다.

하나 이상의 작업 영역에 외부 위치 바인딩

특정 작업 영역에 외부 위치를 할당하려면 카탈로그 탐색기 또는 Databricks CLI를 사용할 수 있습니다.

필요한 권한: Metastore 관리자, 외부 위치 소유자 또는 외부 위치에 대한 MANAGE.

Note

Metastore 관리자는 카탈로그 탐색기를 사용하여 메타스토어의 모든 외부 위치를 볼 수 있으며 외부 위치 소유자는 외부 위치가 현재 작업 영역에 할당되었는지 여부에 관계없이 메타스토어에서 소유한 모든 외부 위치를 볼 수 있습니다. 작업 영역에 할당되지 않은 외부 위치는 회색으로 표시됩니다.

카탈로그 탐색기

  1. 메타스토어에 연결된 작업 영역에 로그인합니다.

  2. 사이드바에서 데이터 아이콘을 클릭합니다.카탈로그.

  3. 빠른 액세스 페이지에서 외부 데이터>단추를 클릭하여 외부 위치 탭으로 이동합니다.

  4. 외부 위치를 선택하고 작업 영역 탭으로 이동합니다.

  5. 작업 영역 탭에서 모든 작업 영역에 액세스 권한이 있는지 확인란의 선택을 취소 합니다.

    외부 위치가 이미 하나 이상의 작업 영역에 바인딩된 경우 이 확인란은 이미 선택 취소되어 있습니다.

  6. 작업 영역에 할당을 클릭하고 할당할 작업 영역을 입력하거나 찾습니다.

액세스 권한을 취소하려면 작업 영역 탭으로 이동하여 작업 영역을 선택하고 해지(Revoke)를 클릭합니다. 모든 작업 영역에서 액세스를 허용하려면 모든 작업 영역에 액세스 권한이 있는지 확인란을 선택합니다.

CLI

개의 Databricks CLI 명령 그룹과 작업 영역에 외부 위치를 할당하는 데 필요한 두 단계가 있습니다.

다음 예제에서는 <profile-name>를 Azure Databricks 인증 구성 프로필의 이름으로 바꿉니다. 개인 액세스 토큰을 생성한 작업 영역의 작업 영역 인스턴스 이름 및 작업 영역 ID 외에도 개인 액세스 토큰의 값을 포함해야 합니다. 개인 액세스 토큰 인증(사용되지 않음)을 참조하세요.

  1. external-locations 명령 그룹의 update 명령을 사용하여 외부 위치를 isolation mode 다음으로 ISOLATED설정합니다.

    databricks external-locations update <my-___location> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    기본값 isolation-modeOPEN 메타스토어에 연결된 모든 작업 영역에 적용됩니다.

  2. workspace-bindings 명령 그룹의 update-bindings 명령을 사용하여 작업 영역을 외부 위치에 할당합니다.

    databricks workspace-bindings update-bindings external-___location <my-___location> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    "add""remove" 속성을 사용하여 작업 영역 바인딩을 추가하거나 제거합니다.

    Note

    외부 위치에는 읽기 전용 바인딩(BINDING_TYPE_READ_ONLY)을 사용할 수 없습니다. 따라서 외부 위치 바인딩에 대해 설정할 binding_type 이유가 없습니다.

외부 위치에 대한 모든 작업 영역 할당을 나열하려면 명령 그룹의 workspace-bindings 명령을 사용합니다get-bindings.

databricks workspace-bindings get-bindings external-___location <my-___location> \
--profile <profile-name>

REST API 참조의 작업 영역 바인딩참조하세요.

작업 영역에서 외부 위치 바인딩 해제

카탈로그 탐색기 또는 workspace-bindings CLI 명령 그룹을 사용하여 외부 위치에 대한 작업 영역 액세스를 취소하는 지침은 하나 이상의 작업 영역에 외부 위치 바인딩에 포함되어 있습니다.

다음 단계

  • 외부 위치를 사용할 수 있는 권한을 다른 사용자에게 부여합니다. 외부 위치 관리를 참조하세요.
  • 외부 위치를 사용하여 관리되는 스토리지 위치를 정의합니다. Unity 카탈로그에서 관리되는 스토리지 위치 지정을 참조하세요.
  • 외부 위치를 사용하여 외부 테이블을 정의합니다. 외부 테이블 작업을 참조하세요.
  • 외부 위치를 사용하여 외부 볼륨을 정의합니다. Unity 카탈로그 볼륨이란?을 참조하세요.