이 문서에서는 Azure Databricks의 서버리스 워크로드에서 아웃바운드 네트워크 연결을 제어하도록 네트워크 정책을 구성하고 관리하는 방법을 설명합니다.
요구 사항
- Azure Databricks 작업 영역은 프리미엄 계층에 있어야 합니다.
- 네트워크 정책 관리 권한은 계정 관리자로 제한됩니다.
네트워크 정책 액세스
계정에서 네트워크 정책을 만들고, 보고, 업데이트하려면 다음을 수행합니다.
- 계정 콘솔에서 클라우드 리소스를 클릭합니다.
- 네트워크 탭을 클릭합니다.
새 네트워크 정책 만들기
새 네트워크 정책 만들기를 클릭합니다.
네트워크 액세스 모드를 선택합니다.
- 모든 대상에 대한 액세스 허용: 무제한 아웃바운드 인터넷 액세스. 전체 액세스를 선택하는 경우 아웃바운드 인터넷 액세스는 무제한으로 유지됩니다.
- 특정 대상에 대한 제한된 액세스: 아웃바운드 액세스는 지정된 대상으로 제한됩니다. 자세한 내용은 네트워크 정책 개요를 참조하세요.
네트워크 정책 구성
다음 단계에서는 제한된 액세스 모드에 대한 선택적 설정을 간략하게 설명합니다.
출구 규칙 설정
서버리스 컴퓨팅에 추가 도메인에 대한 액세스 권한을 부여하려면
허용 도메인 목록 추가를 클릭합니다.위에 있는 대상 FQDN 필터를 사용하면 동일한 IP 주소를 공유하는 모든 도메인에 액세스할 수 있습니다. 엔드포인트 전체에서 프로비전된 모델 제공은 네트워크 액세스가 제한되도록 설정된 경우 인터넷 액세스를 방지합니다. 그러나 FQDN 필터링을 사용한 세분화된 컨트롤은 지원되지 않습니다.
작업 영역에서 추가 Azure Storage 계정에 액세스할 수 있도록 하려면 허용된 스토리지 대상 목록 위에 있는 대상 추가 단추를 클릭합니다.
참고
사용자 코드 컨테이너(예: REPL 또는 UDF)에서 클라우드 스토리지 서비스에 대한 직접 액세스는 기본적으로 허용되지 않습니다. 이 액세스를 사용하도록 설정하려면 정책에 스토리지 리소스의 FQDN을 허용된 도메인 으로 추가합니다. 스토리지 리소스의 기본 도메인만 추가하면 실수로 해당 지역의 모든 스토리지 리소스에 대한 액세스 권한이 부여됩니다.
아웃바운드 규칙을 설정할 때 다음 사항에 유의하세요.
- 메타스토어에서 S3 버킷을 사용하는 경우 REST API 를 사용하여 액세스가 성공하려면 송신 허용 목록에 버킷을 명시적으로 추가해야 합니다.
- 지원되는 최대 대상 수는 2500개입니다.
- 부하 분산 장치에 대한 Private Link 항목으로 추가된 도메인은 네트워크 정책에서 암시적으로 허용 목록에 포함됩니다. 도메인이 제거되거나 프라이빗 엔드포인트가 삭제되면 네트워크 정책 컨트롤이 변경을 완전히 적용하는 데 최대 24시간이 걸릴 수 있습니다. VNet의 리소스에 대한 프라이빗 연결 구성을 참조하세요.
참고
Unity 카탈로그 연결에 대한 암시적 허용 목록은 더 이상 사용되지 않습니다. 사용 중단 전에 암시적 허용 목록을 사용하던 작업 영역이 포함된 계정의 경우 이 동작은 제한된 전환 기간 동안 계속 적용됩니다.
정책 적용
실행 모드를 사용하면 리소스에 대한 액세스를 방해하지 않고 정책 구성을 테스트하고 아웃바운드 연결을 모니터링할 수 있습니다. 시험 실행 모드를 사용하도록 설정하면 정책을 위반하는 요청이 기록되지만 차단되지는 않습니다. 다음 옵션 중에서 선택할 수 있습니다.
Databricks SQL: Databricks SQL 웨어하우스는 드라이런 모드에서 작동합니다.
AI 모델 서비스: 엔드포인트를 제공하는 모델은 시험 실행 모드에서 작동합니다.
모든 제품: 모든 Azure Databricks 서비스는 다른 모든 선택 항목을 무시하고 시뮬레이션 모드에서 작동합니다.
기본 정책 업데이트
각 Azure Databricks 계정에는 기본 정책이 포함됩니다. 기본 정책은 새로 만든 작업 영역을 포함하여 명시적 네트워크 정책 할당이 없는 모든 작업 영역과 연결됩니다. 이 정책은 수정할 수 있지만 삭제할 수는 없습니다.
기본 정책은 프리미엄 계층 이상이 있는 작업 영역에만 적용됩니다.
네트워크 정책을 작업 영역에 연결
추가 구성으로 기본 정책을 업데이트한 경우 기존 네트워크 정책이 없는 작업 영역에 자동으로 적용됩니다.
작업 영역은 프리미엄 계층에 있어야 합니다.
작업 영역을 다른 정책과 연결하려면 다음을 수행합니다.
- 작업 영역을 선택합니다.
- 네트워크 정책에서 네트워크 정책 업데이트를 클릭합니다.
- 목록에서 원하는 네트워크 정책을 선택합니다.
네트워크 정책 변경 적용
대부분의 네트워크 구성 업데이트는 10분 후에 자동으로 서버리스 컴퓨팅으로 전파됩니다. 다음 내용이 포함됩니다.
- 새 Unity 카탈로그 외부 위치 또는 연결을 추가합니다.
- 작업 영역을 다른 메타스토어에 연결합니다.
- 허용되는 스토리지 또는 인터넷 대상 변경
참고
인터넷 액세스 또는 실행 모드 설정을 수정하는 경우 컴퓨팅을 다시 시작해야 합니다.
서버리스 워크로드 다시 시작 또는 다시 배포
인터넷 액세스 모드를 전환하거나 드라이 런 모드를 업데이트할 때만 업데이트해야 합니다.
적절한 다시 시작 절차를 확인하려면 제품별 다음 목록을 참조하세요.
- Databricks ML Serving: ML 서빙 엔드포인트를 다시 배포합니다. 엔드포인트를 제공하는 사용자 지정 모델 만들기 참조
- 파이프라인: 실행 중인 Lakeflow 선언적 파이프라인을 중지한 다음 다시 시작합니다. Lakeflow 선언적 파이프라인에서 업데이트 실행을 참조하세요.
- 서버리스 SQL 웨어하우스: SQL 웨어하우스를 중지한 후 다시 시작하세요. SQL 웨어하우스 관리를 참조하세요.
- Lakeflow 작업: 새 작업 실행이 트리거되거나 기존 작업 실행을 다시 시작할 때 네트워크 정책 변경 내용이 자동으로 적용됩니다.
-
전자 필기장:
- Notebook이 Spark와 상호 작용하지 않는 경우 새 서버리스 클러스터를 종료하고 연결하여 Notebook에 적용된 네트워크 구성을 새로 고칠 수 있습니다.
- 노트북이 Spark와 상호 작용하면 서버리스 리소스가 새로 고쳐지고 변경 사항이 자동으로 감지됩니다. 대부분의 변경 내용은 10분 후에 새로 고쳐지지만 인터넷 액세스 모드 전환, 실행 모드 업데이트 또는 적용 유형이 다른 연결된 정책 간에 변경은 최대 24시간이 걸릴 수 있습니다. 이러한 특정 유형의 변경 내용을 신속하게 새로 고치려면 연결된 모든 Notebook 및 작업을 해제합니다.
네트워크 정책 적용 확인
다른 서버리스 워크로드에서 제한된 리소스에 액세스하려고 시도하여 네트워크 정책이 올바르게 적용되는지 확인할 수 있습니다. 유효성 검사 프로세스는 서버리스 제품에 따라 다릅니다.
Lakeflow 선언적 파이프라인을 사용하여 유효성 검사
- Python Notebook을 만듭니다. Lakeflow 선언적 파이프라인 위키피디아 파이썬 자습서에 제공된 예제 노트북을 사용할 수 있습니다.
- 파이프라인 만들기:
- 작업 영역에서
사이드바의 작업 및 파이프라인입니다.
- 만들기를 클릭한 다음 ETL 파이프라인을 클릭합니다.
- 다음 설정을 사용하여 파이프라인을 구성합니다.
- 파이프라인 모드: 서버리스
- 소스 코드: 만든 전자 필기장을 선택합니다.
- 스토리지 옵션: Unity 카탈로그. 원하는 카탈로그 및 스키마를 선택합니다.
- 만들기를 클릭합니다.
- 작업 영역에서
- 파이프라인을 실행합니다.
- 파이프라인 페이지에서 시작을 클릭합니다.
- 파이프라인이 완료되기를 기다립니다.
- 결과 확인
- 신뢰할 수 있는 대상: 파이프라인이 성공적으로 실행되고 대상에 데이터를 씁니다.
- 신뢰할 수 없는 대상: 네트워크 액세스가 차단되었음을 나타내는 오류와 함께 파이프라인이 실패해야 합니다.
Databricks SQL을 사용하여 유효성 검사
SQL Warehouse를 만듭니다.
SQL 편집기에서 네트워크 정책으로 제어되는 리소스에 액세스하려고 시도하는 테스트 쿼리를 실행합니다.
결과를 확인합니다.
- 신뢰할 수 있는 대상: 쿼리가 성공해야 합니다.
- 신뢰할 수 없는 대상: 네트워크 액세스 오류로 쿼리가 실패해야 합니다.
표준 Python 라이브러리를 사용하여 UDF에서 네트워크에 연결하려면 다음 UDF 정의를 실행합니다.
CREATE OR REPLACE TEMPORARY FUNCTION ping_google(value DOUBLE) RETURNS STRING LANGUAGE python AS $$ import requests url = "https://www.google.com" response = requests.get(url, timeout=5) if response.status_code == 200: return "UDF has network!" else: return "UDF has no network!" $$;
모델 서빙으로 유효성 검사
시작하기 전 주의 사항:
모델 서비스 엔드포인트가 생성되면, 모델을 제공하기 위한 컨테이너 이미지가 빌드됩니다. 네트워크 정책은 이 빌드 단계에서 적용됩니다. 네트워크 정책에서 모델 제공을 사용하는 경우 다음을 고려합니다.
종속성 액세스: PyPI 및 conda-forge의 Python 패키지, 기본 컨테이너 이미지 또는 모델 환경에 지정된 외부 URL 또는 모델 환경에 필요한 Docker 컨텍스트의 파일과 같은 외부 빌드 종속성은 네트워크 정책에서 허용되어야 합니다.
- 예를 들어 모델에 빌드 중에 다운로드해야 하는 특정 버전의 scikit-learn이 필요한 경우 네트워크 정책은 패키지를 호스팅하는 리포지토리에 대한 액세스를 허용해야 합니다.
빌드 실패: 네트워크 정책이 필요한 종속성에 대한 액세스를 차단하는 경우 컨테이너 빌드를 제공하는 모델이 실패합니다. 이렇게 하면 서비스 엔드포인트가 성공적으로 배포되지 않고 잠재적으로 제대로 저장되거나 작동하지 않습니다.
거부 문제 해결: 빌드 단계 중에 네트워크 액세스 거부가 기록됩니다. 이러한 로그에는 값
ML Build
이 있는network_source_type
필드가 있습니다. 이 정보는 빌드가 성공적으로 완료될 수 있도록 네트워크 정책에 추가해야 하는 특정 차단된 리소스를 식별하는 데 중요합니다.
런타임 네트워크 액세스 유효성 검사
다음 단계에서는 특히 유추 중에 외부 리소스에 액세스하려는 시도에 대해 런타임에 배포된 모델에 대한 네트워크 정책의 유효성을 검사하는 방법을 보여 줍니다. 이는 컨테이너를 제공하는 모델이 성공적으로 빌드되었다고 가정합니다. 즉, 네트워크 정책에서 빌드 시간 종속성이 허용되었습니다.
테스트 모델 만들기
Python Notebook에서 파일 다운로드 또는 API 요청과 같이 유추 시간에 공용 인터넷 리소스에 액세스하려는 모델을 만듭니다.
이 Notebook을 실행하여 테스트 작업 영역에서 모델을 생성합니다. 예시:
import mlflow import mlflow.pyfunc import mlflow.sklearn import requests class DummyModel(mlflow.pyfunc.PythonModel): def load_context(self, context): # This method is called when the model is loaded by the serving environment. # No network access here in this example, but could be a place for it. pass def predict(self, _, model_input): # This method is called at inference time. first_row = model_input.iloc[0] try: # Attempting network access during prediction response = requests.get(first_row['host']) except requests.exceptions.RequestException as e: # Return the error details as text return f"Error: An error occurred - {e}" return [response.status_code] with mlflow.start_run(run_name='internet-access-model'): wrappedModel = DummyModel() # When this model is deployed to a serving endpoint, # the environment will be built. If this environment # itself (e.g., specified conda_env or python_env) # requires packages from the internet, the build-time SEG policy applies. mlflow.pyfunc.log_model( artifact_path="internet_access_ml_model", python_model=wrappedModel, registered_model_name="internet-http-access" )
서비스 엔드포인트 만들기
작업 영역 탐색에서 AI/ML을 선택합니다.
서비스 탭을 클릭합니다.
서비스 엔드포인트 만들기를 클릭합니다.
다음 설정을 사용하여 엔드포인트를 구성합니다.
- 서비스 엔드포인트 이름: 설명이 포함된 이름을 제공합니다.
- 엔터티 세부 정보: 모델 레지스트리 모델을 선택합니다.
-
모델: 이전 단계(
internet-http-access
)에서 만든 모델을 선택합니다.
확인을 클릭합니다. 이 단계에서 컨테이너 빌드 프로세스를 제공하는 모델이 시작됩니다.
ML Build
에 대한 네트워크 정책이 강제됩니다. 종속성에 대한 네트워크 액세스 차단으로 인해 빌드가 실패하면 엔드포인트가 준비되지 않습니다.서비스 엔드포인트가 준비 상태에 도달할 때까지 기다립니다. 준비되지 않으면 거부 로그
network_source_type: ML Build
에서 항목을 확인합니다.
엔드포인트를 쿼리합니다.
서비스 엔드포인트 페이지의 쿼리 엔드포인트 옵션을 사용하여 테스트 요청을 보냅니다.
{ "dataframe_records": [{ "host": "[https://www.google.com](https://www.google.com)" }] }
런타임 액세스에 대한 결과를 확인합니다.
-
런타임에 인터넷 액세스를 사용하도록 설정: 쿼리가 성공하고 다음과 같은
200
상태 코드를 반환해야 합니다. -
런타임에 인터넷 액세스가 제한됨: 연결 시간 제한 또는 호스트 확인 실패를 나타내는 모델 코드 블록의
try-except
오류 메시지와 같은 네트워크 액세스 오류로 쿼리가 실패해야 합니다.
-
런타임에 인터넷 액세스를 사용하도록 설정: 쿼리가 성공하고 다음과 같은
네트워크 정책 업데이트
네트워크 정책을 만든 후 언제든지 업데이트할 수 있습니다. 네트워크 정책을 업데이트하려면 다음을 수행합니다.
- 계정 콘솔에서 네트워크 정책의 세부 정보 페이지에서 정책을 수정합니다.
- 네트워크 액세스 모드를 변경합니다.
- 특정 서비스에 대해 드라이 런 모드를 사용하거나 사용하지 않도록 설정합니다.
- FQDN 또는 스토리지 대상을 추가하거나 제거합니다.
- 업데이트를 클릭합니다.
- 기존 워크로드에 업데이트가 적용되는지 확인하려면 네트워크 정책 변경 내용 적용 을 참조하세요.
거부 로그 확인
거부 로그는 Unity 카탈로그의 system.access.outbound_network
테이블에 저장됩니다. 이러한 로그는 아웃바운드 네트워크 요청이 거부되는 시기를 추적합니다. 거부 로그에 액세스하려면 Unity 카탈로그 메타스토어에서 액세스 스키마가 사용하도록 설정되어 있는지 확인합니다.
Access 시스템 테이블을 참조하세요.
아래와 같은 SQL 쿼리를 사용하여 거부 이벤트를 봅니다. 시험 실행 로그를 사용하도록 설정하면 쿼리는 거부 로그와 실행 로그를 모두 반환하며, 이 로그는 access_type
열을 사용하여 구분할 수 있습니다. 거부 로그에는 DROP 값이 있는 반면, 실행 중인 건식 로그는 DRY_RUN_DENIAL 표시합니다.
다음 예제에서는 지난 2시간 동안의 로그를 검색합니다.
select * from system.access.outbound_network
where event_time >= current_timestamp() - interval 2 hour
sort by event_time desc
드라이 런 모드 및 외부 생성 AI 모델의 경우 다음이 true입니다.
- 네트워크 정책에서 필요한 종속성에 대한 액세스를 차단한 경우 먼저 거부 로그를
system.access.outbound_network
확인합니다. 또한 컨테이너를 제공하는 모델에 대한 빌드 로그는 차단된 도메인에 대한 유용한 정보를 제공할 수 있습니다. - 컨테이너 빌드를 제공하는 모델이 실패하는 경우 거부 로그를
system.access.outbound_network
확인하여 차단된 도메인을 확인합니다. - Mosaic AI Service를 통한 외부 모델 액세스에 대한 적용은 드라이 런 모드에서도 계속됩니다.
참고
액세스 시간과 거부 로그가 표시되는 시간 사이에 지각 대기 시간이 있을 수 있습니다.
제한
-
아티팩트 업로드 크기: MLflow의 내부 Databricks Filesystem에서
dbfs:/databricks/mlflow-tracking/<experiment_id>/<run_id>/artifacts/<artifactPath>
형식을 사용할 경우,log_artifact
,log_artifacts
, 및log_model
API에 대해 아티팩트 업로드는 5GB로 제한됩니다. - 모델 서비스: 모델 서비스를 위한 이미지를 빌드할 때 출구 제어가 적용되지 않습니다.
- 단기 GC(가비지 수집) 워크로드에 대한 거부 로그 배달: 120초 미만으로 지속되는 단기 GC 워크로드의 거부 로그는 로깅 지연으로 인해 노드가 종료되기 전에 배달되지 않을 수 있습니다. 액세스는 계속 적용되지만 해당 로그 항목이 누락되었을 수 있습니다.
- Databricks SQL UDF(사용자 정의 함수)에 대한 네트워크 연결: Databricks SQL에서 네트워크 accces를 사용하도록 설정하려면 Databricks 계정 팀에 문의하세요.
- DLT Eventhook 로깅: 다른 작업 영역을 대상으로 하는 Lakeflow 선언적 파이프라인 Eventhook는 기록되지 않습니다. 이는 지역 간 작업 영역과 동일한 지역의 작업 영역에 대해 구성된 Eventhook에 적용됩니다.
- 클라우드 간 네트워크 액세스: Unity 카탈로그 외부 위치에 사용되는 S3 버킷을 사용하는 Azure 작업 영역은 현재 서버리스 네트워크 정책에서 허용되지 않습니다.