특정 가상 네트워크에서 Azure Service Bus 네임스페이스에 대한 액세스 허용

VNet(Virtual Network) 서비스 엔드포인트와 Service Bus를 통합하면 양쪽 끝에서 네트워크 트래픽 경로를 보호하여 가상 네트워크에 바인딩된 가상 머신과 같은 워크로드의 메시징 기능에 대한 액세스를 보호할 수 있습니다.

적어도 하나의 가상 네트워크 서브넷 서비스 엔드포인트에 바인딩되도록 구성하면 해당하는 Service Bus 네임스페이스는 권한이 부여된 가상 네트워크 및 필요한 경우 특정 인터넷 IP 주소를 제외한 곳의 트래픽을 더 이상 허용하지 않습니다. 가상 네트워크 큐브 뷰에서 Service Bus 네임스페이스를 서비스 엔드포인트에 바인딩하면 가상 네트워크 서브넷에서 메시징 서비스로 격리된 네트워킹 터널을 구성합니다.

메시징 서비스 엔드포인트의 관찰 가능한 네트워크 주소가 공용 IP 범위에 있음에도 서브넷에 바인딩된 워크로드와 해당하는 Service Bus 네임스페이스 간에 격리된 프라이빗 관계가 생성됩니다.

중요 사항

  • Virtual Network는 프리미엄 계층 Service Bus 네임스페이스에서만 지원됩니다. Service Bus에서 VNet 서비스 엔드포인트를 사용할 경우 표준 및 프리미엄 계층 Service Bus 네임스페이스를 혼합하는 애플리케이션에서는 이 엔드포인트를 사용하지 않아야 합니다. 표준 계층은 VNet을 지원하지 않기 때문입니다. 엔드포인트는 프리미엄 계층 네임스페이스로만 제한됩니다.

  • Virtual Networks 통합을 구현하면 다른 Azure 서비스가 Service Bus와 상호 작용하지 않도록 방지할 수 있습니다. 예외적으로 네트워크 서비스 엔드포인트가 사용되는 경우에도 특정 신뢰할 수 있는 서비스에서 Service Bus 리소스에 대한 액세스를 허용할 수 있습니다. 신뢰할 수 있는 서비스 목록은 신뢰할 수 있는 서비스를 참조하세요.

    다음 Microsoft 서비스는 가상 네트워크에 있어야 합니다.

    • Azure App Service
    • Azure 기능
  • 지정된 IP 주소 또는 가상 네트워크의 서브넷에서만 트래픽을 허용하도록 네임스페이스에 대해 하나 이상의 IP 규칙 또는 가상 네트워크 규칙을 지정합니다. IP 및 가상 네트워크 규칙이 없는 경우 액세스 키를 사용하여 퍼블릭 인터넷을 통해 네임스페이스에 액세스할 수 있습니다.

VNet 통합에서 사용하도록 설정한 고급 보안 시나리오

엄격하게 분류된 보안이 필요한 솔루션은 일반적으로 해당 구획에 위치한 서비스 간에 통신 경로가 필요합니다. 해당 솔루션에서 가상 네트워크 서브넷은 분류된 서비스 간를 구분합니다.

TCP/IP에서 HTTPS를 수행하는 경로를 비롯한 구획 간의 즉시 IP 경로를 사용하면 네트워크 레이어에서 취약성을 악용할 위험이 있습니다. 메시징 서비스는 격리된 통신 경로를 제공합니다. 여기서 메시지는 항목을 전환할 때 디스크에도 작성됩니다. 동일한 Service Bus 인스턴스에 바인딩된 두 개의 고유 가상 네트워크에 있는 워크로드는 메시지를 통해 효율적이고 안정적으로 통신할 수 있습니다. 이 동안에 해당 네트워크 격리 경계의 무결성은 지켜집니다.

즉, 보안이 중요한 클라우드 솔루션은 Azure에서 제공하는 업계 최고의 안정적이고 확장성 있는 비동기 메시징 기능에 액세스할 뿐만 아니라 메시징을 사용하여 HTTPS 및 기타 TLS 보안 소켓 프로토콜을 비롯한 보안 솔루션 구획(피어 간 통신 모드로 달성 가능한 수준보다 본질적으로 더 안전함) 간에 통신을 만들 수도 있습니다.

Virtual Networks에 Service Bus 바인딩

가상 네트워크 규칙은 Azure Service Bus 서버가 특정 가상 네트워크 서브넷의 연결을 수락할지 여부를 제어하는 방화벽 보안 기능입니다.

Virtual Networks에 Service Bus를 바인딩하는 작업은 2단계 프로세스입니다. 먼저 Virtual Network 서브넷에서 Virtual Network 서비스 엔드포인트를 만들고 서비스 엔드포인트 개요에서 설명한 대로 Microsoft.ServiceBus에 사용하도록 설정해야 합니다. 서비스 엔드포인트를 추가했다면 여기에 가상 네트워크 규칙을 사용하여 Service Bus 네임스페이스를 바인딩합니다.

가상 네트워크 규칙은 가상 네트워크 서브넷을 사용하는 Service Bus 네임스페이스의 연결입니다. 규칙이 있는 한 서브넷에 바인딩된 모든 워크로드는 Service Bus 네임스페이스에 대한 액세스 권한이 부여됩니다. Service Bus 자체는 아웃바운드 연결을 설정하지 않고, 액세스 권한을 가져올 필요도 없습니다. 따라서 이 규칙을 사용하여 서브넷에 대한 액세스 권한이 부여되지 않습니다.

참고 항목

네트워크 서비스 엔드포인트는 가상 네트워크에서 실행되는 애플리케이션에 Service Bus 네임스페이스에 대한 액세스를 제공합니다. 가상 네트워크는 엔드포인트의 연결 가능성을 제어하지만 Service Bus 엔터티(큐, 토픽 또는 구독)에서 수행할 수 있는 작업은 제어하지 않습니다. Microsoft Entra ID를 사용하여 애플리케이션이 네임스페이스 및 해당 엔터티에서 수행할 수 있는 작업에 권한을 부여합니다. 자세한 내용은 Azure Service Bus 엔터티에 액세스하기 위해 Microsoft Entra ID를 사용하여 애플리케이션 인증 및 권한 부여를 참조하세요.

Azure Portal 사용

네임스페이스를 만들 때 네임스페이스에 대한 퍼블릭 전용(모든 네트워크에서) 또는 프라이빗 전용(프라이빗 엔드포인트를 통해서만) 액세스를 허용할 수 있습니다. 네임스페이스가 만들어지면 특정 IP 주소 또는 특정 가상 네트워크(네트워크 서비스 엔드포인트 사용)에서 액세스를 허용할 수 있습니다.

네임스페이스를 만들 때 공용 액세스 구성

공용 액세스를 사용하도록 설정하려면 네임스페이스 만들기 마법사의 네트워킹 페이지에서 공용 액세스를 선택합니다.

Screenshot showing the Networking page of the Create namespace wizard with Public access option selected.

네임스페이스를 만든 후 Service Bus 네임스페이스 페이지의 왼쪽 메뉴에서 네트워킹을 선택합니다. 모든 네트워크 옵션이 선택되어 있는 것을 볼 수 있습니다. 선택한 네트워크 옵션을 선택하고 특정 IP 주소 또는 특정 가상 네트워크에서 액세스를 허용할 수 있습니다. 다음 섹션에서는 액세스가 허용되는 네트워크를 지정하는 방법에 대한 세부 정보를 제공합니다.

기존 네임스페이스에 대해 선택한 네트워크 구성

이 섹션에서는 Azure Portal을 사용하여 가상 네트워크 서비스 엔드포인트를 추가하는 방법을 보여 줍니다. 액세스를 제한하려면 이 Event Hubs 네임스페이스에 대한 가상 네트워크 서비스 엔드포인트를 통합해야 합니다.

  1. Azure Portal에서 Service Bus 네임스페이스로 이동합니다.

  2. 왼쪽 메뉴의 설정 아래에서 네트워킹 옵션을 선택합니다.

    참고 항목

    프리미엄 네임스페이스에 대해서만 네트워킹 탭이 표시됩니다.

  3. 네트워킹 페이지에서 공용 네트워크 액세스에 대해 다음 세 가지 옵션 중 하나를 설정할 수 있습니다. 특정 IP 주소의 액세스만 허용하려면 선택한 네트워크 옵션을 선택합니다.

    • Disabled. 이 옵션은 네임스페이스에 대한 모든 공용 액세스를 사용하지 않도록 설정합니다. 네임스페이스는 프라이빗 엔드포인트를 통해서만 액세스할 수 있습니다.

      Screenshot that shows the Networking page of a namespace with public access disabled.

      신뢰할 수 있는 Microsoft 서비스가 방화벽을 우회하도록 허용할지 여부를 선택합니다. Azure Service Bus에 대한 신뢰할 수 있는 Microsoft 서비스 목록은 신뢰할 수 있는 Microsoft 서비스 섹션을 참조하세요.

    • 선택한 네트워크. 이 옵션은 선택한 네트워크의 액세스 키를 사용하여 네임스페이스에 대한 공용 액세스를 사용하도록 설정합니다.

      Important

      선택한 네트워크를 선택하는 경우 네임스페이스에 액세스할 수 있는 가상 네트워크 또는 IP 방화벽 규칙을 하나 이상 추가합니다. 프라이빗 엔드포인트를 통해서만 이 네임스페이스에 대한 모든 트래픽을 제한하려면 사용하지 않도록 설정를 선택합니다.

    • 모든 네트워크(기본값). 이 옵션은 액세스 키를 사용하여 모든 네트워크에서 공용 액세스를 사용하도록 설정합니다. 모든 네트워크 옵션을 선택하면 Service Bus는 액세스 키를 사용한 모든 IP 주소에서의 연결을 허용합니다. 이 설정은 0.0.0.0/0 IP 주소 범위를 수락하는 규칙과 같습니다.

  4. 특정 가상 네트워크에 대한 액세스를 제한하려면 아직 선택하지 않은 경우 선택한 네트워크 옵션을 선택합니다.

  5. 페이지의 가상 네트워크 섹션에서 +기존 가상 네트워크 추가를 선택합니다. 새 VNet을 만들려면 + 새 가상 네트워크 만들기를 선택합니다.

    Image showing the selection of Add existing virtual network button on the toolbar.

    Warning

    선택한 네트워크 옵션을 선택하고 이 페이지에 하나 이상의 IP 방화벽 규칙이나 가상 네트워크를 추가하지 않으면 액세스 키를 사용하여 퍼블릭 인터넷을 통해 네임스페이스에 액세스할 수 있습니다.

  6. 가상 네트워크 목록에서 가상 네트워크를 선택하고 서브넷을 선택합니다. 가상 네트워크 목록에 추가하기 전에 서비스 엔드포인트를 사용하도록 설정해야 합니다. 서비스 엔드포인트가 활성화되지 않는 경우 포털에서 활성화하라는 메시지가 나타납니다.

    Image showing the selection of VNet and subnet.

  7. 서브넷의 서비스 엔드포인트를 Microsoft.ServiceBus에 사용하도록 설정하고 나면 다음과 같은 성공 메시지가 표시되어야 합니다. 페이지 맨 아래에서 추가를 선택하여 네트워크를 추가합니다.

    Image showing the success message of enabling the service endpoint.

    참고 항목

    서비스 엔드포인트를 사용하도록 설정할 수 없는 경우 Resource Manager 템플릿을 사용하여 누락된 가상 네트워크 서비스 엔드포인트를 무시할 수 있습니다. 이 기능은 포털에서 사용할 수 없습니다.

  8. 도구 모음에서 저장을 선택하여 설정을 저장합니다. 포털 알림에 확인이 표시될 때까지 몇 분 정도 기다립니다. 저장 단추가 사용하지 않도록 설정됩니다.

    Image showing the network service endpoint saved.

    참고 항목

    특정 IP 주소나 범위에서 액세스를 허용하는 방법에 관한 지침은 특정 IP 주소 또는 범위에서 액세스 허용을 참조하세요.

신뢰할 수 있는 Microsoft 서비스

신뢰할 수 있는 Microsoft 서비스에서 이 방화벽을 무시하도록 허용 설정을 사용하도록 설정하면 다음 서비스에 Service Bus 리소스에 대한 액세스 권한이 부여됩니다.

신뢰할 수 있는 서비스 지원되는 사용 시나리오
Azure Event Grid Azure Event Grid에서 Service Bus 네임스페이스의 큐 또는 토픽에 이벤트를 보낼 수 있습니다. 다음 단계도 수행해야 합니다.
  • 항목 또는 도메인에 대해 시스템이 할당한 ID 사용
  • Service Bus 네임스페이스의 Azure Service Bus 데이터 보낸 사람 역할에 ID 추가
  • 그런 다음, 시스템 할당 ID를 사용하도록 Service Bus 큐 또는 토픽을 엔드포인트로 사용하는 이벤트 구독을 구성합니다.

자세한 내용은 관리 ID를 사용한 이벤트 전달을 참조하세요.

Azure Stream Analytics Azure Stream Analytics 작업이 Service Bus 에서 토픽으로 데이터를 출력하도록 허용합니다.

중요: 관리 ID를 사용하여 Service Bus 네임스페이스에 액세스하도록 Stream Analytics 작업을 구성해야 합니다. Service Bus 네임스페이스의 Azure Service Bus 데이터 보낸 사람 역할에 ID를 추가합니다.

Azure IoT Hub IoT Hub가 Service Bus 네임스페이스의 큐 또는 토픽에 메시지를 보낼 수 있도록 허용합니다. 다음 단계도 수행해야 합니다.
Azure API Management

API Management 서비스를 사용하면 Service Bus 네임스페이스의 Service Bus 큐/토픽에 메시지를 보낼 수 있습니다.

Azure IoT Central

IoT Central에서 데이터를 Service Bus 네임스페이스의 Service Bus 큐 또는 토픽으로 내보낼 수 있습니다. 다음 단계도 수행해야 합니다.

  • IoT Central 애플리케이션에 대해 시스템 할당 ID를 사용하도록 설정합니다.
  • Service Bus 네임스페이스의 Azure Service Bus 데이터 보낸 사람 역할에 ID를 추가합니다.
  • 그런 다음, ID 기반 인증을 사용하도록 Service Bus IoT Central 애플리케이션의 내보내기 대상을 구성합니다.
Azure Digital Twins Azure Digital Twins가 Service Bus 네임스페이스의 Service Bus 토픽에 데이터를 송신하도록 허용합니다. 다음 단계도 수행해야 합니다.

  • Azure Digital Twins 인스턴스에 대해 시스템 할당 ID를 사용하도록 설정합니다.
  • Service Bus 네임스페이스의 Azure Service Bus 데이터 보낸 사람 역할에 ID를 추가합니다.
  • 그런 다음, 시스템 할당 ID를 사용하여 인증하는 Azure Digital Twins 엔드포인트 또는 Azure Digital Twins 데이터 기록 연결을 구성합니다. Azure Digital Twins에서 Service Bus 리소스로 엔드포인트 및 이벤트 경로를 구성하는 방법에 대한 자세한 내용은 Azure Digital Twins 이벤트 라우팅Azure Digital Twins에서 엔드포인트 만들기를 참조하세요.
Azure Monitor(진단 설정 및 작업 그룹) Azure Monitor가 Service Bus 네임스페이스의 Service Bus에 진단 정보 및 경고 알림을 보내도록 허용합니다. Azure Monitor는 Service Bus 네임스페이스에서 데이터를 읽고 쓸 수 있습니다.
Azure Synapse Azure Synapse가 Synapse 작업 영역 관리 ID를 사용하여 서비스 버스에 연결하도록 허용합니다. Service Bus 네임스페이스의 ID에 Azure Service Bus 데이터 발신자, 수신자 및 소유자 역할을 추가합니다.

Azure Service Bus에 대한 다른 신뢰할 수 있는 서비스는 아래에서 찾을 수 있습니다.

  • Azure Data Explorer
  • Azure Health Data Services
  • Azure Arc
  • Azure Kubernetes
  • Azure Machine Learning
  • Microsoft Purview

Resource Manager 템플릿 사용

다음과 같은 샘플 Resource Manager 템플릿을 사용하면 기존 Service Bus 네임스페이스에 가상 네트워크 규칙을 추가할 수 있습니다. 네트워크 규칙의 경우 가상 네트워크에 있는 서브넷의 ID를 지정합니다.

ID는 가상 네트워크 서브넷의 정규화된 Resource Manager 경로입니다. 예를 들어 가상 네트워크의 기본 서브넷인 경우 /subscriptions/{id}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/default입니다.

참고 항목

defaultAction의 기본값은 Allow입니다. 가상 네트워크 또는 방화벽 규칙을 추가할 때 defaultActionDeny로 설정해야 합니다.

템플릿:

{
	"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
	"contentVersion": "1.0.0.0",
	"parameters": {
		"servicebusNamespaceName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Service Bus namespace"
			}
		},
		"virtualNetworkName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Virtual Network Rule"
			}
		},
		"subnetName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Virtual Network Sub Net"
			}
		},
		"location": {
			"type": "string",
			"metadata": {
				"description": "Location for Namespace"
			}
		}
	},
	"variables": {
		"namespaceNetworkRuleSetName": "[concat(parameters('servicebusNamespaceName'), concat('/', 'default'))]",
		"subNetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets/', parameters('virtualNetworkName'), parameters('subnetName'))]"
	},
	"resources": [{
			"apiVersion": "2022-10-01-preview",
			"name": "[parameters('servicebusNamespaceName')]",
			"type": "Microsoft.ServiceBus/namespaces",
			"location": "[parameters('location')]",
			"sku": {
				"name": "Premium",
				"tier": "Premium",
				"capacity": 1
			},
			"properties": {
				"premiumMessagingPartitions": 1,
				"minimumTlsVersion": "1.2",
				"publicNetworkAccess": "Enabled",
				"disableLocalAuth": false,
				"zoneRedundant": true
			}
		},
		{
			"apiVersion": "2022-07-01",
			"name": "[parameters('virtualNetworkName')]",
			"location": "[parameters('location')]",
			"type": "Microsoft.Network/virtualNetworks",
			"properties": {
				"addressSpace": {
					"addressPrefixes": [
						"10.0.0.0/23"
					]
				},
				"subnets": [{
					"name": "[parameters('subnetName')]",
					"properties": {
						"addressPrefix": "10.0.0.0/23",
						"serviceEndpoints": [{
							"service": "Microsoft.ServiceBus"
						}]
					}
				}]
			}
		},
		{
			"apiVersion": "2022-10-01-preview",
			"name": "[variables('namespaceNetworkRuleSetName')]",
			"type": "Microsoft.ServiceBus/namespaces/networkruleset",
			"dependsOn": [
				"[concat('Microsoft.ServiceBus/namespaces/', parameters('servicebusNamespaceName'))]"
			],
			"properties": {
				"publicNetworkAccess": "Enabled",
				"defaultAction": "Deny",
				"virtualNetworkRules": [{
					"subnet": {
						"id": "[variables('subNetId')]"
					},
					"ignoreMissingVnetServiceEndpoint": false
				}],
				"ipRules": [],
				"trustedServiceAccessEnabled": false
			}
		}
	],
	"outputs": {}
}

템플릿을 배포하려면 Azure Resource Manager에 대한 지침을 따르세요.

Important

IP와 가상 네트워크 규칙이 없으면 defaultActiondeny로 설정하더라도 모든 트래픽 흐름이 네임스페이스로 이동합니다. 퍼블릭 인터넷을 통해 네임스페이스에 액세스할 수 있습니다(액세스 키 사용). 지정된 IP 주소 또는 가상 네트워크의 서브넷에서만 트래픽을 허용하도록 네임스페이스에 대해 하나 이상의 IP 규칙 또는 가상 네트워크 규칙을 지정합니다.

Azure CLI 사용

az servicebus namespace network-rule-set 추가, 나열, 업데이트 및 제거 명령을 사용하여 Service Bus 네임스페이스에 대한 가상 네트워크 규칙을 관리합니다.

Azure PowerShell 사용

다음 Azure PowerShell 명령을 사용하여 Service Bus 네임스페이스에 대한 네트워크 규칙을 추가, 나열, 제거, 업데이트 및 삭제합니다.

기본 작업 및 공용 네트워크 액세스

REST API

defaultAction 속성의 기본값은 API 버전 2021-01-01-preview 이하의 경우 Deny입니다. 그러나 IP 필터 또는 VNet(가상 네트워크) 규칙을 설정하지 않으면 거부 규칙이 적용되지 않습니다. 즉, IP 필터 또는 VNet 규칙이 없는 경우 Allow로 처리됩니다.

API 버전 2021-06-01-preview부터 서비스 측 적용을 정확하게 반영하기 위해 defaultAction 속성의 기본값은 Allow입니다. 기본 작업이 Deny로 설정된 경우 IP 필터 및 VNet 규칙이 적용됩니다. 기본 작업이 Allow로 설정된 경우 IP 필터 및 VNet 규칙이 적용되지 않습니다. 서비스는 규칙을 껐다가 다시 켤 때 규칙을 기억합니다.

API 버전 2021-06-01-preview 이상에는 publicNetworkAccess라는 새 속성도 도입되었습니다. Disabled로 설정하면 작업이 프라이빗 링크로만 제한됩니다. Enabled로 설정하면 공용 인터넷을 통한 작업이 허용됩니다.

이러한 속성에 대한 자세한 내용은 네트워크 규칙 집합 만들기 또는 업데이트프라이빗 엔드포인트 연결 만들기 또는 업데이트를 참조하세요.

참고 항목

위의 설정 중 어느 것도 SAS 또는 Microsoft Entra 인증을 통한 클레임 유효성 검사를 무시하지 않습니다. 인증 유효성 검사는 항상 서비스가 defaultAction, publicNetworkAccess, privateEndpointConnections 설정으로 구성된 네트워크 유효성 검사의 유효성을 검사한 후에 실행됩니다.

Azure Portal

Azure Portal은 항상 최신 API 버전을 사용하여 속성을 가져오고 설정합니다. 이전에 defaultActionDeny로 설정하고 2021-01-01-preview 및 이전 버전을 사용하여 네임스페이스를 구성하고 0 IP 필터 및 VNet 규칙을 지정한 경우 포털은 이전에 네임스페이스의 네트워킹 페이지에서 선택한 네트워크를 확인했을 것입니다. 이제 모든 네트워크 옵션을 확인합니다.

Screenshot of the Azure portal Networking page. The option to allow access from All networks is selected on the Firewalls and virtual networks tab.

다음 단계

가상 네트워크에 대한 자세한 내용은 다음 링크를 참조하세요.