작업 영역 아웃바운드 액세스 보호를 사용하면 Microsoft Fabric 작업 영역의 외부 통신을 정확하게 제어할 수 있습니다. 이 기능을 사용하도록 설정하면 승인된 관리형 프라이빗 엔드포인트를 통해 액세스 권한을 명시적으로 부여하지 않는 한 Notebook, Spark 작업 정의 및 레이크하우스와 같은 데이터 엔지니어링 작업 영역 항목은 퍼블릭 엔드포인트에 대한 아웃바운드 연결이 제한됩니다. 이 기능은 데이터 반출을 방지하고 조직 네트워크 경계를 적용하는 데 도움이 되므로 보안 또는 규제 환경에서 조직에 매우 중요합니다.
데이터 엔지니어링을 사용하여 아웃바운드 액세스 보호 이해
아웃바운드 액세스 보호를 사용하도록 설정하면 작업 영역의 모든 아웃바운드 연결이 기본적으로 차단됩니다. 그런 다음, 작업 영역 관리자는 관리형 프라이빗 엔드포인트를 구성하여 승인된 대상에만 액세스 권한을 부여하는 예외를 만들 수 있습니다.
데이터 엔지니어링에 대한 아웃바운드 액세스 보호 구성
데이터 엔지니어링에 대한 아웃바운드 액세스 보호를 구성하려면 다음을 수행합니다.
단계에 따라 아웃바운드 액세스 보호를 사용하도록 설정합니다.
아웃바운드 액세스 보호를 사용하도록 설정한 후 필요에 따라 다른 작업 영역 또는 외부 리소스에 대한 아웃바운드 액세스를 허용하도록 관리형 프라이빗 엔드포인트 를 설정할 수 있습니다.
구성되면 데이터 엔지니어링 항목은 승인된 관리형 프라이빗 엔드포인트에만 연결할 수 있지만 다른 모든 아웃바운드 연결은 차단된 상태로 유지됩니다.
지원되는 데이터 엔지니어링 항목 유형
아웃바운드 액세스 보호에서 지원되는 데이터 엔지니어링 항목 유형은 다음과 같습니다.
- 레이크하우스
- Notebooks
- Spark 작업 정의
- Environments
다음 섹션에서는 아웃바운드 액세스 보호가 작업 영역의 특정 데이터 엔지니어링 항목 유형에 미치는 영향을 설명합니다.
Notebooks
작업 영역에서 아웃바운드 액세스 보호를 사용하는 경우, 노트북은 관리형 프라이빗 엔드포인트가 작업 영역에서 목적지로 설정된 경우에만 목적지를 참조할 수 있게 됩니다.
| 출처 | 목적지 | 관리되는 프라이빗 엔드포인트가 설정되어 있나요? | Notebook 또는 Spark 작업이 대상에 연결할 수 있나요? |
|---|---|---|---|
| Notebook (작업 영역 A) | 레이크하우스(작업 영역 B) | 예, A에서 B로의 작업 영역 간 관리 프라이빗 엔드포인트가 A에 설정됩니다. | Yes |
| Notebook (작업 영역 A) | 레이크하우스(작업 영역 B) | 아니오 | 아니오 |
| Notebook (작업 영역 A) | 외부 ADLS(Azure Data Lake Storage) G2/기타 데이터 원본 | 예, 관리되는 프라이빗 엔드포인트가 A에서 외부 데이터 원본으로 설정됩니다. | Yes |
| Notebook (작업 영역 A) | 외부 ADLS G2/기타 데이터 원본 | 아니오 | 아니오 |
Fabric Notebook의 파일 경로 동작 이해
Fabric Notebook에서 Lakehouse의 데이터에 액세스할 때 상대 또는 정규화된(절대) 경로를 사용하여 파일을 참조할 수 있습니다. 특히 작업 영역에서 작업할 때 데이터 액세스에 성공하려면 차이점을 이해하는 것이 중요합니다.
상대 경로
상대 경로는 현재 Lakehouse 내에서 파일을 참조하는 가장 간단하고 일반적인 방법입니다. Lakehouse 탐색기에서 Notebook 셀로 파일을 끌어서 놓으면 상대 경로가 자동으로 사용됩니다.
Example:
Files/people.csv
Spark 코드:
df = spark.read.format("csv").option("header", "true").load("Files/people.csv")
상대 경로는 기본으로 작동하며 추가 구성이 필요하지 않습니다.
정규화된(절대) 경로
정규화된 경로는 작업 영역 및 Lakehouse 정보를 포함하여 파일의 전체 위치를 지정합니다. 그러나 이러한 경로에 표시 이름을 사용하면 Spark 세션에서 기본적으로 해결할 수 없으므로 소켓 시간 제한과 같은 오류가 발생할 수 있습니다.
잘못된 예제(실패):
abfss://your_workspace@onelake.dfs.fabric.microsoft.com/your_lakehouse.Lakehouse/Files/people.csv
작업 영역에서 데이터 액세스
다른 작업 영역에 있는 Lakehouse의 파일에 액세스하려면 작업 영역 ID 및 Lakehouse ID(표시 이름이 아님)를 포함하는 정규화된 경로를 사용합니다. 이렇게 하면 Spark가 경로를 확인하고 데이터에 액세스할 수 있습니다.
올바른 URI 형식:
abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<lakehouse_id>/Files/people.csv
Spark 코드 예제:
df = spark.read.format("csv").option("header", "true").load("abfss://4c8efb42-7d2a-4a87-b1b1-e7e98bea053d@onelake.dfs.fabric.microsoft.com/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/Files/people.csv")
작업 영역 및 Lakehouse ID를 찾는 방법
-
작업 영역 ID: 패브릭 작업 영역 URL의
/groups/뒤에 있는 GUID입니다. -
레이크하우스 ID: URL에서
/lakehouses/뒤에 오는 GUID입니다.
예제 URL:
https://app.fabric.microsoft.com/groups/4c8efb42-7d2a-4a87-b1b1-e7e98bea053d/lakehouses/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/...
비고
작업 영역에서 데이터에 액세스할 때는 항상 URI에서 작업 영역 ID 및 Lakehouse ID를 사용합니다.
Spark 작업
작업 영역 아웃바운드 액세스 보호를 사용하도록 설정하면 Spark 클러스터에서 공용 인터넷에 아웃바운드 연결을 만들 수 없습니다. 여기에는 다음이 포함됩니다.
- 를 사용하여 PyPI에서 직접 Python 패키지 설치
pip install - 다음과 같은 공용 도메인에 액세스
https://login.microsoftonline.com - 외부 API 또는 웹 사이트에 연결
Microsoft Fabric은 명시적 액세스 권한이 부여되지 않는 한 Spark 클러스터를 외부 네트워크에서 격리하는 관리형 VNET(Managed Virtual Network)을 통해 이러한 제한을 적용합니다.
관리되는 프라이빗 엔드포인트를 사용하여 보안 연결
보안을 유지하면서 Spark 클러스터가 외부 리소스에 연결할 수 있도록 하려면 관리형 프라이빗 엔드포인트를 사용해야 합니다. 이러한 엔드포인트는 다음과 같은 보안 및 승인된 연결을 허용합니다.
- 외부 서비스(예: Azure SQL Database, Azure Blob Storage)
- 동일한 테넌트 내의 다른 패브릭 작업 영역
승인된 관리형 프라이빗 엔드포인트를 통해 설정된 연결만 허용됩니다. 다른 모든 아웃바운드 액세스 시도는 기본적으로 차단됩니다.
아웃바운드 액세스로 보호된 작업 영역에 안전하게 라이브러리 설치
Fabric은 공용 인터넷 트래픽을 차단하기 때문에 Spark 클러스터는 다음을 사용하여 pip installPyPI에서 패키지를 직접 설치할 수 없습니다.
아웃바운드 액세스 보호를 사용하도록 설정된 작업 영역에 라이브러리를 설치하기 위한 두 가지 보안 옵션이 있습니다.
휠 파일 업로드 및 사용: 신뢰할 수 있는 컴퓨팅 리소스에서 필요한 Python 패키지 휠 파일을 수동으로 준비한 다음 패브릭 환경에 업로드합니다. 이 방법을 사용하면 승인된 패키지만 설치되고 공용 인터넷 액세스가 방지됩니다.
프라이빗 PyPI 미러 호스트: Azure Storage에서 프라이빗 PyPI 리포지토리를 설정하고 공용 PyPI 인덱스에서 선택한 패키지와 동기화합니다. 관리형 프라이빗 엔드포인트를 사용하여 이 프라이빗 미러에서 패키지를 설치하고 네트워크 보안 정책 준수를 유지하도록 패브릭 환경을 구성합니다.
패키지 관리 및 보안에 대한 조직의 요구 사항에 가장 적합한 방법을 선택합니다.
옵션 1: 휠 파일 업로드 및 사용
패브릭 Spark 런타임에 포함되지 않은 누락된 패키지를 식별합니다.
컴퓨팅 리소스에서 다음 스크립트를 실행하여 Microsoft Fabric Spark 런타임 1.3과 동일한 로컬 Python 환경을 설정합니다. 이 스크립트를 사용하려면 미리 구성된 환경에 포함된 모든 라이브러리 목록을 포함하는 YAML 파일이 필요합니다.
Microsoft 호스팅 프라이빗 라이브러리가 이 YAML에서 제거되었는지 확인합니다.
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh chmod 755 -R /usr/lib/miniforge3/ export PATH="/usr/lib/miniforge3/bin:$PATH" sudo apt-get update sudo apt-get -yq install gcc g++ conda env create -n <custom-env-name> -f Python<version>-CPU.yml source activate <custom-env-name>스크립트를 사용하여 spark 런타임에 설치하려는 모든 패키지와 버전이 있는 requirements.txt 파일을 전달할 수 있습니다. 입력 라이브러리 요구 사항에 대한 새 휠 파일/종속성의 이름을 출력합니다.
pip install -r <input-user-req.txt> > pip_output.txt cat pip_output.txt | grep "Using cached *"수동으로 파일을 다운로드
.whl합니다.환경 아티팩트에서 필요한 모든 휠을 업로드합니다.
환경을 Notebook 또는 작업에 연결합니다.
옵션 2: Azure Storage에서 프라이빗 PyPI 미러 호스트
필수 조건
- Linux 개발 머신, WSL(Linux용 Windows 하위 시스템) 또는 Azure VM(가상 머신)과 같은 컴퓨팅 리소스
- 미러된 패키지를 저장할 Azure Storage 계정입니다.
- 유틸리티:
- Bandersnatch: 리포지토리 동기화를 위한 PyPI 미러링 도구입니다. Bandersnatch 설명서를 참조하세요.
- Azure CLI, Blobfuse2 또는 AzCopy: Azure Storage와 파일을 업로드하고 동기화하기 위한 유틸리티입니다.
PyPI 리포지토리의 초기 동기화
초기 단계로 PyPI 리포지토리의 동기화를 수행해야 합니다. 전체 PyPI 리포지토리에는 많은 수의 패키지가 포함되어 있으며 지속적으로 확장되고 있으므로 초기 다운로드는 하드웨어 및 네트워크에 따라 8~48시간이 걸릴 수 있습니다. 현재 리포지토리 크기 및 패키지 수는 통계 · PyPI.
Maintenance
미러를 동기화 상태로 유지하려면 주기적인 모니터링 및 업데이트가 필요합니다. 다음 요소는 동기화 속도에 영향을 줍니다.
- 네트워크 속도.
- Bandersnatch를 실행하는 컴퓨팅 리소스의 CPU, 메모리 및 디스크 I/O와 같은 서버 리소스입니다.
- 디스크 속도(SSD 및 HDD)는 Bandersnatch가 데이터를 쓰는 속도에 영향을 줍니다.
- 초기 설정 및 유지 관리 동기화: 초기 동기화는 전체 리포지토리를 다운로드하고 8~48시간이 걸릴 수 있지만 후속 동기화는 새 패키지 또는 변경된 패키지만 업데이트하기 때문에 더 빠릅니다.
설정 단계
Linux VM 또는 WSL(Linux용 Windows 하위 시스템) 개발 머신을 설정합니다.
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh chmod 755 -R /usr/lib/miniforge3/ # Add Python executable to PATH export PATH="/usr/lib/miniforge3/bin:$PATH"PyPI를 미러링하도록 Bandersnatch를 설치합니다. Bandersnatch는 로컬 파일 시스템에 전체 PyPI 리포지토리 및 관련 인덱스 파일을 다운로드하는 PyPI 미러링 도구입니다.
# Install Bandersnatch pip install bandersnatchBandersnatch 구성: bandersnatch/src/bandersnatch/example.conf의 GitHub 예제에 지정된 구성을 사용하여 bandersnatch.conf 파일을 만듭니다.
미러 명령을 실행하여 PyPI 주 서버와 일회성 동기화를 수행합니다.
bandersnatch --config <path-to-bandersnatch.conf> mirror이 명령은 로컬 파일 시스템의 미러 디렉터리에 다음 하위 디렉터리를 만듭니다.
비고
초기 동기화를 실행하는 데 시간이 걸립니다(통계 참조 · PyPI). Bandersnatch는 허용 목록 및 차단 목록 플러그 인을 사용하여 선택적 미러링을 지원하므로 종속성을 보다 효율적으로 관리할 수 있습니다. 불필요한 패키지를 필터링하여 미러 크기를 줄여 비용과 유지 관리 작업을 모두 최소화할 수 있습니다. 예를 들어 미러가 패브릭 전용인 경우 스토리지를 최적화하기 위해 Windows 이진 파일을 제외할 수 있습니다. 사용 사례에 따라 이러한 필터링 옵션을 평가하는 것이 좋습니다.
미러 설정을 확인하려면 HTTP 서버를 사용하여 로컬 PyPI 미러를 제공할 수 있습니다. 이 명령은 미러 디렉터리의 콘텐츠를 제공하는 포트 8000에서 간단한 HTTP 서버를 시작합니다.
cd <directory-to-mirror> python -m http.server 8000로컬 PyPI 미러를 사용하도록 pip를 구성합니다.
pip install <package> -index-url http://localhost:8000/simple스토리지 계정에 미러를 업로드하고 Azure Storage 계정에서 정적 웹 사이트 사용을 선택합니다. 이 설정을 사용하면 PyPI 인덱스 페이지와 같은 정적 콘텐츠를 호스트할 수 있습니다. 이 설정을 사용하도록 설정하면 $web 컨테이너가 자동으로 생성됩니다.
Azure CLI 또는 blobfuse2의 AzCopy를 사용하여 개발 머신에서 Azure Storage 계정으로 로컬 미러를 업로드할 수 있습니다.
- 스토리지 계정 컨테이너에서 선택한 컨테이너에 패키지 폴더를 업로드합니다.
- 스토리지 계정의 $web 컨테이너에 단순, PyPI, 로컬 통계 및 JSON 폴더를 업로드합니다.
패브릭 환경 항목에서 이 미러를 사용하려면 Fabric에서 두 개의 관리형 프라이빗 엔드포인트를 만듭니다.
- Blob 컨테이너용(패키지)
- 정적 웹 사이트용(인덱스)
환경 아티팩트를 사용하여 yml 파일을 지정하여 패브릭 환경에 라이브러리 관리를 설치합니다.
dependencies: - pip - pip: - pytest==8.2.2 - --index-url https://<storage-account-name>.z5.web.core.windows.net/simple또는 다음 명령을 사용하여 Notebook 내에서 직접 패키지를 설치할 수 있습니다.
%pip install
%pip install pytest --index-url https://<storage-account-name>.z5.web.core.windows.net/simple
Lakehouse 스키마 및 아웃바운드 액세스 보호
스키마를 사용하는 Lakehouse는 아웃바운드 액세스 보호가 사용되는 경우를 포함하여 동일한 작업 영역 내의 항목에서 액세스할 때 완전히 지원됩니다.
작업 영역 간 액세스 시나리오에서는 사용 중인 작업 영역에서 아웃바운드 액세스 보호가 사용하도록 설정된 경우 Lakehouse에 액세스하는 방법에 따라 동작이 다릅니다.
지원되는 시나리오
- 생산자 및 소비자 항목은 동일한 작업 영역에 있습니다.
- 레이크하우스는 스키마를 사용합니다.
- 액세스는 Spark DataFrame 기반 API를 사용하여 수행됩니다.
이러한 시나리오에서 Lakehouse 스키마 작업은 예상대로 작동합니다.
아웃바운드 액세스 보호를 사용하도록 설정된 작업 영역 간 동작
작업 영역에서 아웃바운드 액세스 보호를 사용하도록 설정하고 다른 작업 영역에서 스키마 사용 Lakehouse에 액세스하는 경우 다음 동작이 적용됩니다.
- ✅ Spark DataFrame API를 사용한 액세스(예: DataFrames로 테이블 읽기)는 계속 작동합니다.
- ❌ Spark SQL 문을 사용한 액세스가 실패할 수 있습니다.
예를 들어
spark.read.table(), 아웃바운드 액세스 보호를 사용하도록 설정하면 작업 영역 간 시나리오에서 실패할 수 있지만SELECT * FROM table성공합니다.
파일 경로의 동작 이해
Fabric Notebook을 사용하여 Lakehouse에서 데이터를 사용하는 경우 다음 두 가지 기본 방법으로 파일을 참조할 수 있습니다.
작업 영역에 아웃바운드 액세스 보호가 사용하도록 설정된 경우 Spark에 대해 관리형 VNET(가상 네트워크)을 사용합니다. 이 경우 시작 풀은 사용하지 않도록 설정되며 Spark 세션을 시작하는 데 3~5분이 걸릴 것으로 예상해야 합니다.
아웃바운드 액세스 보호를 사용하면 Spark의 모든 공용 액세스가 차단됩니다. 이 제한으로 인해 사용자는 pip를 사용하는 PyPI와 같은 공용 채널에서 직접 라이브러리를 다운로드할 수 없습니다. 데이터 엔지니어링 작업에 대한 라이브러리를 설치하려면 사용자에게 두 가지 옵션이 있습니다(자세한 내용은 아웃바운드 액세스로 보호되는 작업 영역에 안전하게 라이브러리 설치 참조).
관리형 프라이빗 엔드포인트를 통해 패브릭 작업 영역에 연결된 데이터 원본의 라이브러리 패키지를 참조합니다.
필수 라이브러리 및 종속성에 대한 휠 파일을 업로드합니다(미리 작성된 런타임에 아직 포함되지 않음).
아웃바운드 액세스 보호를 사용하도록 설정하면 작업 영역에서 모든 공용 액세스가 차단됩니다. 따라서 다른 작업 영역에서 Lakehouse를 쿼리하려면 Spark 작업이 연결을 설정할 수 있도록 작업 영역 간 관리형 프라이빗 엔드포인트를 만들어야 합니다.
작업 영역 및 레이크하우스 이름과 함께 정규화된 경로를 사용하면 소켓 시간 제한 예외가 발생할 수 있습니다. 파일에 액세스하려면 현재 Lakehouse의 상대 경로를 사용하거나 작업 영역 ID와 레이크하우스 ID(표시 이름이 아님)가 포함된 정규화된 경로를 사용합니다. 이 방법을 사용하면 Spark 세션이 경로를 올바르게 해결할 수 있으며 소켓 시간 제한 오류를 방지할 수 있습니다. 자세히알아보세요.