Microsoft 검색은 Azure Blob Storage 조사 입력 및 출력 데이터의 백업 저장소로 사용합니다. 이 문서에서는 스토리지 계정이 플랫폼에서 수행하는 역할과 검색 리소스를 만들기 전에 필요한 네트워킹, CORS 및 ID 액세스 구성에 대해 설명합니다.
Microsoft 검색의 스토리지 역할
Microsoft Discovery Studio에서 조사를 실행할 때 플랫폼은 입력 데이터를 읽고 Azure 구독에서 소유하고 관리하는 Azure Blob Storage 계정에 출력 데이터를 씁니다. 이 디자인은 자체 Azure 환경 내에서 연구 데이터를 유지합니다.
Discovery Studio에서 스토리지 계정은 계정 내의 Azure Blob Storage 컨테이너에 매핑되는 논리 그룹인 Storage Containers를 통해 표시됩니다. 입력 자산(데이터 세트, 매개 변수 파일) 및 출력 자산(결과, 로그)은 모두 이러한 컨테이너 내에서 Blob으로 저장됩니다.
사전 요구 사항
Microsoft 검색에 대한 스토리지 계정을 만들기 전에 다음이 있는지 확인합니다.
- 대상 리소스 그룹에서 Contributor 또는 Owner 역할을 사용하는 활성 Azure 구독입니다.
- 귀하의 구독에 등록된
Microsoft.Storage리소스 공급자입니다. - 이미 프로비전된 가상 네트워크 및 서브넷 스토리지 계정은 슈퍼컴퓨터 및 작업 영역에서 사용하는 동일한 가상 네트워크에서 네트워크 액세스를 허용해야 합니다. Microsoft Discovery에서 Virtual 네트워크 및 서브넷을 참조하세요.
- 스토리지 계정에 대한 액세스 권한이 부여되는 UAMI(사용자 할당 관리 ID)입니다. Microsoft 검색의 역할 할당 참조하세요.
스토리지 계정 요구 사항
Microsoft 검색과 함께 사용되는 스토리지 계정은 다음 요구 사항을 충족해야 합니다.
서비스 종류
계정을 만들 때 기본 서비스 유형으로 Azure Blob Storage을 선택합니다. 계층 구조 네임스페이스(Azure Data Lake Storage Gen2)는 필요하지 않습니다.
네트워킹
스토리지 계정은 다음 두 소스에서 연결할 수 있어야 합니다.
| 출처 | Purpose |
|---|---|
| 가상 네트워크 서브넷(슈퍼컴퓨터, AKS, 작업 영역) | 검색 플랫폼에서 조사 데이터를 읽고 쓸 수 있도록 허용 |
| 클라이언트 IP 주소 또는 온-프레미스 네트워크 | 연구원이 Discovery Studio 포털 또는 로컬 도구에서 출력 데이터에 액세스할 수 있습니다. |
다음과 같이 네트워킹 설정을 구성합니다.
- 공용 네트워크 액세스를선택한 가상 네트워크 및 IP 주소에서 사용으로 설정합니다.
- 가상 네트워크 및 검색 배포용으로 만든 모든 서브넷 (슈퍼컴퓨터, AKS, 작업 영역, 프라이빗 엔드포인트 및 에이전트 서브넷)을 추가합니다.
- 출력 파일이 가상 네트워크 외부에서 액세스할 수 있도록 클라이언트의 공용 IP 주소(또는 Azure VPN 또는 ExpressRoute를 통해 프라이빗 액세스 구성)를 추가합니다.
메모
Microsoft Discovery Studio에서 출력 파일을 보고 다운로드하려면 브라우저에서 Blob Storage 엔드포인트에 대한 직접 네트워크 액세스 권한이 필요합니다. 공용 액세스를 완전히 제한하는 경우 Azure Private Link, 사이트간 VPN 또는 ExpressRoute를 통해 프라이빗 액세스를 구성합니다.
Blob 컨테이너
출력 컨테이너를 미리 작성할 필요가 없습니다. 에이전트가 출력 내용을 작성하면, 플랫폼은 해당 Blob 컨테이너가 없을 경우 자동으로 생성 작업을 수행합니다. 여러 조사를 통해 동일한 스토리지 컨테이너, 각 대화 또는 조사를 안전하게 공유할 수 있으므로 출력이 대화당 격리된 상태로 유지되도록 컨테이너 내에 논리적 섹션이 만들어집니다.
메모
자동 컨테이너를 만들려면 두 가지 필수 구성 요소가 필요합니다. 즉, 작업 영역 에이전트 서브넷을 스토리지 계정 네트워크 허용 목록에 추가해야 하며, 작업 영역 관리 ID에는 스토리지 계정에 대한 Storage Blob 데이터 기여자 역할이 있어야 합니다.
CORS 구성
Microsoft Discovery Studio(https://studio.discovery.microsoft.com) 및 통합 VSCode 환경(https://vscode.dev, https://*.vscode-cdn.net)은 Blob Storage에 대한 직접 브라우저 요청을 수행합니다. 이러한 원본을 허용하려면 스토리지 계정의 Blob 서비스에서 CORS(원본 간 리소스 공유)를 구성해야 합니다.
CORS(설정>리소스 공유)>Blob 서비스 아래에 다음 CORS 규칙을 적용합니다.
| 설정 | 가치 |
|---|---|
| 허용된 출처 |
https://studio.discovery.microsoft.com
https://vscode.dev
https://*.vscode-cdn.net
|
| 허용되는 메서드 |
GET, HEAD, , DELETE, PUT |
| 허용되는 헤더 | * |
| 노출된 헤더 | * |
| 최대 연령(초) | 200 |
중요합니다
연구원이 Microsoft Discovery Studio에서 조사 출력을 보거나 다운로드하려면 CORS를 구성해야 합니다.
ID 액세스
스토리지 계정의 Storage Blob 데이터 기여자 역할을 검색 작업 영역 및 슈퍼 컴퓨터에서 사용하는 UAMI(사용자 할당 관리 ID)에 할당합니다. 이렇게 하면 플랫폼에서 입력 데이터를 읽고 조사를 대신하여 출력 데이터를 쓰는 데 필요한 권한을 부여합니다.
UAMI_PRINCIPAL_ID="<uami-principal-id>"
STORAGE_RESOURCE_ID=$(az storage account show \
--name <storage-account-name> \
--resource-group <resource-group> \
--query id --output tsv)
az role assignment create \
--assignee $UAMI_PRINCIPAL_ID \
--role "Storage Blob Data Contributor" \
--scope $STORAGE_RESOURCE_ID
스토리지 계정 만들기
Azure 포털
- Azure 포털 로그인합니다.
- Storage 계정을 검색하고 선택합니다.
- 선택하고생성합니다.
- 기본 사항 탭에서 구독, 리소스 그룹, 이름 및 지역을 입력합니다. 검색 작업 영역과 동일한 지역을 선택합니다.
- Primary service 아래에서 Azure Blob Storage 선택합니다.
- 네트워킹 탭을 선택합니다.
- 공용 네트워크 액세스에서 선택한 가상 네트워크 및 IP 주소에서 액세스 사용 설정을 선택합니다.
- 가상 네트워크에서기존 가상 네트워크 추가를 선택한 다음, 검색 가상 네트워크 및 모든 서브넷을 선택합니다.
- 공용 인터넷을 통해 데이터를 출력하기 위해 브라우저 액세스가 필요한 경우 방화벽에서 클라이언트 IP 주소 추가 를 선택합니다.
- 검토 + 만들기를 선택한 다음, 만들기를 선택합니다.
계정을 만든 후 다음 생성 후 단계를 완료합니다.
CORS 구성:
- 설정에서 CORS(리소스 공유)를 선택합니다.
- Blob 서비스 탭에서 위의 CORS 구성 테이블 값을 사용하여 새 CORS 규칙을 추가합니다.
- 저장을 선택합니다.
ID 액세스 할당:
- 스토리지 계정에서 액세스 제어(IAM) 를 선택합니다.
- 추가>역할 할당 추가를 선택합니다.
- 디스커버리 작업 영역에서 사용하는 UAMI에 Storage Blob 데이터 기여자 역할을 할당합니다.
Azure CLI
변수 설정
SUBSCRIPTION_ID="<your-subscription-id>"
RESOURCE_GROUP="<your-resource-group>"
STORAGE_NAME="<globally-unique-storage-account-name>"
LOCATION="eastus" # Use the same region as your Discovery workspace
VNET_NAME="<your-vnet-name>"
VNET_RESOURCE_GROUP="<vnet-resource-group>"
스토리지 계정 만들기
az storage account create \
--name $STORAGE_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2 \
--default-action Deny \
--allow-blob-public-access false
가상 네트워크 규칙 추가
# Add each subnet that needs access to the storage account
for SUBNET in supercomputerNodepoolSubnet aksSubnet workspaceSubnet privateEndpointSubnet agentSubnet; do
az storage account network-rule add \
--account-name $STORAGE_NAME \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--subnet $SUBNET
done
CORS 구성
az storage cors add \
--account-name $STORAGE_NAME \
--services b \
--methods GET HEAD DELETE PUT \
--origins "https://studio.discovery.microsoft.com" "https://vscode.dev" "https://*.vscode-cdn.net" \
--allowed-headers "*" \
--exposed-headers "*" \
--max-age 200
ID 액세스 할당
UAMI_PRINCIPAL_ID="<uami-principal-id>"
STORAGE_RESOURCE_ID=$(az storage account show \
--name $STORAGE_NAME \
--resource-group $RESOURCE_GROUP \
--query id --output tsv)
az role assignment create \
--assignee $UAMI_PRINCIPAL_ID \
--role "Storage Blob Data Contributor" \
--scope $STORAGE_RESOURCE_ID