Microsoft 검색 작업 영역에 대한 네트워크 보안 구성

이 문서에서는 네트워크 강화를 위한 필수 구성 요소와 Microsoft 검색 작업 영역 및 책장에 대한 프라이빗 엔드포인트를 만드는 방법을 안내합니다. 네트워크 강화는 기본적으로 사용하도록 설정됩니다. 검색 컨트롤 플레인은 관리되는 리소스에 대한 네트워크 보안 경계, 프라이빗 엔드포인트 및 가상 네트워크 주입을 자동으로 배포합니다. 이러한 기능의 정의 및 중요한 이유에 대한 개요는 Microsoft 검색에 대한 네트워크 보안 참조하세요.

사전 요구 사항

  • Azure 구독이 Microsoft.Discovery 리소스 공급자로 등록되었습니다.
  • Azure CLI 2.50 이상 또는 Azure PowerShell 10.0 이상입니다.
  • 구독의 소유자 또는 기여자 역할(사용자 지정 역할 및 역할 할당 생성에 필요).
  • 전용 서브넷이 있는 가상 네트워크:
    • 에이전트 워크로드
    • 프라이빗 엔드포인트
    • 작업 영역 서비스

중요합니다

각 검색 리소스(작업 영역, 책장, 슈퍼 컴퓨터)에는 겹치지 않는 고유한 서브넷이 필요합니다. 서브넷은 다른 검색 리소스 인스턴스에서 공유할 수 없습니다. 여러 리소스를 배포할 때 그에 따라 가상 네트워크 주소 공간을 계획합니다.

NSP 경계 연결자 역할 할당

검색 컨트롤 플레인이 NSP 인바운드 액세스 규칙을 만들기 위해서는 귀하의 구독에 대한 권한이 필요합니다. 사용자 지정 역할을 만들고 Discovery 컨트롤 플레인 서비스 App 서비스 주체에 할당하십시오.

서비스 주체 확인

Discovery 퍼스트파티 앱(Discovery 컨트롤 플레인 서비스 App)은 다음과 같은 ID를 가집니다.

재산 가치
애플리케이션(클라이언트) ID 92c174ac-8e41-4815-a1b7-d81b19ab03ce
표시 이름 디스커버리 컨트롤 플레인 서비스 앱

테넌트에 서비스 주체가 있는지 검증합니다.

az ad sp show --id 92c174ac-8e41-4815-a1b7-d81b19ab03ce \
  --query "{displayName:displayName, objectId:id, appId:appId}"

팁 (조언)

해당 테넌트에 서비스 주체가 존재하지 않는다면, 이를 새로 생성합니다.

az ad sp create --id 92c174ac-8e41-4815-a1b7-d81b19ab03ce

사용자 지정 역할 정의 만들기

이름이 nsp-perimeter-joiner-role.json인 파일을 만듭니다. <your-subscription-id> Azure 구독 ID로 대체합니다.

{
  "Name": "Discovery NSP Perimeter Joiner",
  "Description": "Allows the Microsoft Discovery control plane to create NSP inbound access rules for network-hardened workspaces.",
  "Actions": [
    "Microsoft.Network/networkSecurityPerimeters/joinPerimeterRule/action",
    "Microsoft.Network/locations/networkSecurityPerimeterOperationStatuses/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/<your-subscription-id>"
  ]
}

팁 (조언)

Azure 구독에는 사용자 지정 역할 수가 제한됩니다. 제한에 도달한 경우 Discovery NSP 경계 조인자 역할을 만들기 전에 사용되지 않는 사용자 지정 역할을 삭제합니다. 기존 사용자 지정 역할을 az role definition list --custom-role-only을(를) 사용하여 확인합니다.

az role definition create --role-definition nsp-perimeter-joiner-role.json

메모

"동일한 이름의 사용자 지정 역할이 이 디렉터리에 이미 있음"이라는 오류와 함께 역할 정의 만들기가 실패하는 경우 테넌트에 있는 누군가가 이미 이 역할을 만들었다는 의미입니다. 해당 담당자와 협력하여 기존 사용자 정의 역할의 /subscriptions/<your-subscription-id> 항목 뒤에 AssignableScopes(귀하의 구독 ID로 대체)을(를) 추가함으로써, 귀하의 구독을 해당 역할의 할당 가능 범위에 포함시키세요.

검색 컨트롤 플레인에 역할 할당

SUBSCRIPTION_ID=$(az account show --query id -o tsv)

az role assignment create \
  --assignee "92c174ac-8e41-4815-a1b7-d81b19ab03ce" \
  --role "Discovery NSP Perimeter Joiner" \
  --scope "/subscriptions/$SUBSCRIPTION_ID"

역할 할당 확인

az role assignment list \
  --assignee "92c174ac-8e41-4815-a1b7-d81b19ab03ce" \
  --scope "/subscriptions/$SUBSCRIPTION_ID" \
  --query "[].{role:roleDefinitionName, scope:scope}" \
  -o table

예상 출력:

Role                               Scope
---------------------------------  ------------------------------------------
Discovery NSP Perimeter Joiner     /subscriptions/<your-subscription-id>

읽기 권한자 역할을 Discovery 서비스 주체에 할당

또한 Discovery 데이터 평면 서비스 앱에는 리소스를 열거하고 네트워크 구성의 유효성을 검사하기 위해 구독 수준에서 읽기 권한자 액세스 권한이 필요합니다.

az role assignment create \
  --assignee "92c174ac-8e41-4815-a1b7-d81b19ab03ce" \
  --role "Reader" \
  --scope "/subscriptions/$SUBSCRIPTION_ID"

작업 영역 및 책장에 대한 서브넷 요구 사항

작업 영역 및 책장에는 관리되는 리소스에 대한 전용 서브넷이 필요합니다. 모든 리소스를 포함하는 전체 엔드 투 엔드 배포는 엔드 투 엔드 네트워크 강화 배포를 참조하세요.

Resource 필수 서브넷 서브넷 위임
Workspace workspaceSubnet agentSubnet privateEndpointSubnet 작업 영역 및 에이전트 서브넷의 Microsoft.App/environments
책장 searchSubnet, privateEndpointSubnet Microsoft.App/environments 서브넷 검색에서

중요합니다

서브넷은 작업 영역이나 책장에서 다시 사용할 수 없습니다. 각 작업 영역과 각 책장에는 겹치지 않는 고유한 서브넷이 필요합니다. 이는 ACA(Azure Container Apps) 제한입니다. 위임된 각 서브넷은 단일 Container Apps 환경과만 연결할 수 있습니다. 여러 리소스를 배포할 때 그에 따라 가상 네트워크 주소 공간을 계획합니다.

데이터 평면 액세스를 위한 프라이빗 엔드포인트 만들기

프라이빗 엔드포인트는 공용 인터넷 대신 Azure 백본을 통해 데이터 평면 API 트래픽을 라우팅합니다. 지원되는 리소스 종류 및 프라이빗 엔드포인트의 작동 방식은 Microsoft 검색에 대한 네트워크 보안 참조하세요.

사전 요구 사항

  • 프로비전된 Microsoft Discovery 작업 영역 또는 책장 리소스.
  • 프라이빗 엔드포인트용 전용 서브넷이 있는 가상 네트워크입니다.
  • 리소스에 대한 기여자 또는 Microsoft Discovery Platform Administrator (미리 보기) 역할입니다.

프라이빗 엔드포인트 만들기

작업 영역 프라이빗 엔드포인트

az network private-endpoint create \
  --name pe-my-workspace \
  --resource-group myResourceGroup \
  --vnet-name myVNet \
  --subnet pe-subnet \
  --private-connection-resource-id "/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Discovery/workspaces/{workspaceName}" \
  --group-id workspace \
  --connection-name my-workspace-connection
매개 변수 필수 설명
--name 프라이빗 엔드포인트 리소스의 이름입니다.
--resource-group 프라이빗 엔드포인트가 만들어지는 리소스 그룹의 이름입니다.
--vnet-name 서브넷과 연결된 가상 네트워크입니다. 서브넷 ID를 제공하는 경우 생략합니다.
--subnet 서브넷의 이름 또는 ID입니다. 서브넷이 다른 리소스 그룹 또는 구독에 있는 경우 이름 대신 전체 서브넷 리소스 ID를 제공합니다.
--private-connection-resource-id 연결할 Discovery 리소스의 전체 Azure Resource Manager 리소스 ID(작업 공간 또는 서가)입니다.
--group-id 하위 리소스 그룹 ID입니다. workspace 작업 공간에 사용하거나 bookshelf 책장에 사용하세요. 지원되는 그룹 ID를 가져오는 데 사용할 az network private-link-resource list 수 있습니다.
--connection-name 프라이빗 링크 서비스 연결에 대한 설명이 포함된 이름입니다.
--location No Azure 지역입니다. 기본값은 리소스 그룹 위치입니다.

프라이빗 DNS 구성

프라이빗 DNS 영역을 만들고 DNS 쿼리가 프라이빗 엔드포인트 IP 주소로 확인되도록 가상 네트워크에 연결합니다.

# Create the private DNS zone
az network private-dns zone create \
  --resource-group myResourceGroup \
  --name "privatelink.workspace.discovery.azure.com"

# Link the DNS zone to your virtual network
az network private-dns link vnet create \
  --resource-group myResourceGroup \
  --zone-name "privatelink.workspace.discovery.azure.com" \
  --name link-my-vnet \
  --virtual-network myVNet \
  --registration-enabled false

# Create DNS zone group on the private endpoint (auto-creates A records)
az network private-endpoint dns-zone-group create \
  --resource-group myResourceGroup \
  --endpoint-name pe-my-workspace \
  --name default \
  --private-dns-zone "privatelink.workspace.discovery.azure.com" \
  --zone-name workspace

중요합니다

프라이빗 DNS 영역을 만들고 가상 네트워크에 연결하지 않으면 프라이빗 엔드포인트가 있는 경우에도 클라이언트는 계속해서 공용 경로를 사용합니다. DNS 확인은 트래픽 경로를 결정합니다.

Bookshelf 비공개 엔드포인트

bookshelf에 대한 프라이빗 엔드포인트를 만들려면 bookshelf 리소스 ID, 그룹 ID bookshelf및 DNS 영역 privatelink.bookshelf.discovery.azure.com과 동일한 단계를 사용합니다.

# Create the private endpoint
az network private-endpoint create \
  --name pe-my-bookshelf \
  --resource-group myResourceGroup \
  --vnet-name myVNet \
  --subnet pe-subnet \
  --private-connection-resource-id "/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Discovery/bookshelves/{bookshelfName}" \
  --group-id bookshelf \
  --connection-name my-bookshelf-connection

# Create private DNS zone
az network private-dns zone create \
  --resource-group myResourceGroup \
  --name "privatelink.bookshelf.discovery.azure.com"

# Link DNS zone to virtual network
az network private-dns link vnet create \
  --resource-group myResourceGroup \
  --zone-name "privatelink.bookshelf.discovery.azure.com" \
  --name link-my-vnet \
  --virtual-network myVNet \
  --registration-enabled false

# Create DNS zone group on the private endpoint
az network private-endpoint dns-zone-group create \
  --resource-group myResourceGroup \
  --endpoint-name pe-my-bookshelf \
  --name default \
  --private-dns-zone "privatelink.bookshelf.discovery.azure.com" \
  --zone-name bookshelf

지원되는 리소스 종류 요약

리소스 유형 그룹 아이디 프라이빗 DNS 영역
Microsoft.Discovery/workspaces workspace privatelink.workspace.discovery.azure.com
Microsoft.Discovery/bookshelves bookshelf privatelink.bookshelf.discovery.azure.com

연결 확인

프라이빗 엔드포인트 연결 상태를 확인합니다.

az rest --method GET \
  --url "https://management.azure.com/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Discovery/workspaces/{workspaceName}/privateEndpointConnections?api-version=2026-02-01-preview"

연결에서 status: Approved이/가 표시되어야 합니다.

동일한 가상 네트워크 내의 VM 또는 컴퓨팅 자원에서 DNS가 해결되고 API가 연결되는지 확인합니다.

# Verify DNS resolves to a private IP (10.x.x.x)
nslookup {workspaceName}.workspace.discovery.azure.com

# Test API connectivity
TOKEN=$(az account get-access-token --resource "https://discovery.azure.com/" --query accessToken -o tsv)

curl -sS -H "Authorization: Bearer $TOKEN" \
  "https://{workspaceName}.workspace.discovery.azure.com/projects/{projectName}/investigations?api-version=2026-02-01-preview"

아웃바운드 인터넷 액세스 구성

Discovery에 위임된 서브넷에는 인터넷에 대한 기본 아웃바운드 경로가 없습니다. Azure Firewall, NAT 게이트웨이 또는 자체 NVA를 사용하여 탈출 경로를 제공합니다. Microsoft Discovery 슈퍼컴퓨터에서 설정 outboundType = UserDefinedRouting 할 때는 AKS API 서버 내부 부하 분산기를 위한 전용 관리 서브넷도 제공해야 합니다.

관리 서브넷 ID 요구사항

managementSubnetId 는 가상 네트워크 내 전용 서브넷의 ID입니다. 이 서브넷은 슈퍼컴퓨터의 AKS API 서버를 전면에 배치하는 내부 부하 분산기(ILB)를 호스팅합니다. 이 ID를 제공하면 AKS API 서버 VNet 통합이 활성화되어 모든 노드 간 API 호출이 가상 네트워크 내에 유지됩니다.

필요할 때

슈퍼컴퓨터 구성 managementSubnetId
outboundType = LoadBalancer(기본값) 선택 사항입니다. 심층 방어에 추천됩니다.
outboundType = UserDefinedRouting 필수입니다. 이 기능이 없으면 프로비저닝이 거부됩니다.

요구 사항

요구 사항 가치
서브넷 위임 Microsoft.ContainerService/managedClusters(필수)
최소 크기 /28 (16개 주소)
Location 슈퍼컴퓨터 aksSubnet 의 가상 네트워크(제어 평면)와 supercomputerNodepoolSubnet 노드 풀과 같은 가상 네트워크입니다.
주소 공간 AKS 오버레이 포드 CIDR(기본값 10.244.0.0/16)와 겹치면 안 됩니다
재사용 슈퍼컴퓨터별로 전용입니다. 다른 슈퍼컴퓨터, 작업 공간, 책장과 공유하지 마세요.
Mutability 슈퍼컴퓨터 생성 후 불변

중요합니다

위임 서비스 이름은 완전 정식 값 Microsoft.ContainerService/managedClusters이어야 합니다.

Portal

Azure 포털에서 슈퍼컴퓨터 네트워킹 탭의 Management Virtual Network 드롭다운에서 관리 서브넷을 선택하세요. 포털이 서브넷을 만들어주지 않습니다. 먼저 가상 네트워크에서 서브넷을 프로비저링한 후 선택하세요.

REST, Bicep 및 ARM

properties.managementSubnetId를 슈퍼컴퓨터 리소스에서 전체 서브넷 리소스 ID로 설정합니다:

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' existing = {
  name: '<vnet-name>'
}

resource sc 'Microsoft.Discovery/supercomputers@2026-06-01' = {
  name: '<sc-name>'
  location: '<region>'
  properties: {
    outboundType: 'UserDefinedRouting'
    managementSubnetId: '${virtualNetwork.id}/subnets/managementSubnet'
    // Add other properties as needed.
  }
}

공용 네트워크 액세스 사용 안 함(선택 사항)

프라이빗 엔드포인트 전용 액세스를 적용하고 작업 영역 데이터 평면에 대한 모든 공용 트래픽을 차단하려면 다음을 수행합니다.

az rest --method PATCH \
  --url "https://management.azure.com/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Discovery/workspaces/{workspaceName}?api-version=2026-02-01-preview" \
  --body '{"properties":{"publicNetworkAccess":"Disabled"}}'

메모

publicNetworkAccessDisabled로 설정되면, 프라이빗 엔드포인트를 통한 트래픽만 허용됩니다. 공용 인터넷 요청은 403 금지된 응답을 받습니다. 전체 액세스 매트릭스 에 대한 네트워크 보안 개념을 참조하세요.

프라이빗 엔드포인트 연결 승인 또는 거부

검색 리소스는 동일한 테넌트 내에서 만든 프라이빗 엔드포인트에 대한 자동 승인이 지원됩니다. 테넌트 간 연결의 경우 리소스 소유자는 다음을 수동으로 승인해야 합니다.

# Approve a connection
az rest --method PATCH \
  --url "https://management.azure.com/{privateEndpointConnectionId}?api-version=2026-02-01-preview" \
  --body '{"properties":{"privateLinkServiceConnectionState":{"status":"Approved","description":"Approved by admin"}}}'

# Reject a connection
az rest --method PATCH \
  --url "https://management.azure.com/{privateEndpointConnectionId}?api-version=2026-02-01-preview" \
  --body '{"properties":{"privateLinkServiceConnectionState":{"status":"Rejected","description":"Not authorized"}}}'

Troubleshooting

"'joinPerimeterRule/action' 작업을 수행할 수 있는 권한이 없습니다."

사용자 지정 역할 할당이 누락되었거나 전파되지 않았습니다.

  1. NSP 경계 조인자 역할 할당의 명령을 사용하여 역할 할당이 있는지 확인합니다.
  2. AZURE RBAC 전파를 위해 최대 5분 동안 기다립니다.
  3. 역할이 리소스 그룹 범위가 아닌 구독 범위에서 할당되었는지 확인합니다.
  4. 작업 공간 생성은 다시 시도해도 됩니다. 이 작업은 멱등적이므로 여러 번 실행해도 안전합니다.

"서비스 주체를 찾을 수 없음"

테넌트에 아직 Discovery Control Plane 서비스 주체가 존재하지 않습니다:

az ad sp create --id 92c174ac-8e41-4815-a1b7-d81b19ab03ce

그런 다음 역할 할당을 다시 시도합니다.

프라이빗 엔드포인트가 승인되었지만 API가 오류를 반환합니다.

오류 가능한 원인 해결 방법
504 게이트웨이 시간 초과 일시적으로 백 엔드를 사용할 수 없음 공용 경로도 실패하는지 확인합니다. 둘 다 실패하면 서비스를 일시적으로 사용할 수 없게 될 수 있습니다.
401 권한 없음 토큰 대상 그룹 불일치 또는 누락된 RBAC 토큰이 https://discovery.azure.com/에 적합한지 확인하고 리소스에 필요한 역할이 있는지 확인합니다.
DNS가 공용 IP로 확인 가상 네트워크에 연결되지 않은 프라이빗 DNS 영역 프라이빗 DNS 구성에 설명된 대로 DNS 영역 및 가상 네트워크 링크를 만듭니다.

네트워크 강화 확인

작업 영역 프로비전이 완료되면 네트워크 강화가 활성 상태인지 확인합니다.

# List NSP resources in the managed resource group
az rest --method GET \
  --url "https://management.azure.com/subscriptions/{subId}/resourceGroups/{mrg}/providers/Microsoft.Network/networkSecurityPerimeters?api-version=2023-08-01-preview" \
  | jq '.value[] | {name, location, properties}'

# List private endpoints in the managed resource group
az network private-endpoint list \
  --resource-group {mrg} \
  --query "[].{name:name, status:privateLinkServiceConnections[0].privateLinkServiceConnectionState.status}" \
  -o table

적용 모드의 NSP 리소스와 승인된 상태의 프라이빗 엔드포인트가 표시됩니다.

프라이빗 엔드포인트에도 불구하고 DNS가 공용 IP로 확인

DNS 쿼리가 프라이빗 엔드포인트 IP 대신 공용 IP를 반환하는 경우:

  1. 프라이빗 DNS 영역이 있는지 확인합니다. privatelink.workspace.discovery.azure.com
  2. DNS 영역이 가상 네트워크에 연결되어 있는지 확인합니다.
  3. DNS 영역 그룹이 프라이빗 엔드포인트에 구성되어 있는지 확인합니다.
  4. 사용자 지정 DNS 서버를 사용하는 경우 Azure DNS 전달해야 합니다(168.63.129.16).

다음 단계