가상 네트워크에 대한 Azure IoT Hub DPS(Device Provisioning Service) 지원

이 문서에서는 DPS를 사용하여 IoT 허브에서 프로비전하는 IoT 디바이스에 대한 VNET(가상 네트워크) 연결 패턴을 소개합니다. 이 패턴은 고객 소유의 Azure VNET 내에서 디바이스, DPS 및 IoT 허브 간에 프라이빗 연결을 제공합니다.

DPS가 VNET으로 구성된 대부분의 시나리오에서 IoT Hub도 동일한 VNET에서 구성됩니다. IoT Hub에 대한 VNET 지원 및 구성에 대한 자세한 내용은 IoT Hub 가상 네트워크 지원을 참조하세요.

소개

기본적으로 DPS 호스트 이름은 인터넷을 통해 공개적으로 라우팅할 수 있는 IP 주소가 있는 퍼블릭 엔드포인트에 매핑됩니다. 이 퍼블릭 엔드포인트는 모든 고객에게 표시됩니다. 광역 네트워크 및 온-프레미스 네트워크를 통한 IoT 디바이스는 퍼블릭 엔드포인트에 액세스를 시도할 수 있습니다.

고객은 여러 가지 이유로 DPS와 같은 Azure 리소스에 대한 연결을 제한할 수 있습니다. 그 이유는 다음과 같습니다.

  • 공용 인터넷을 통한 연결 노출을 방지합니다. IoT 허브 및 DPS 리소스에 대한 네트워크 수준 격리를 통해 더 많은 보안 계층을 도입하여 노출을 줄일 수 있습니다.

  • 온-프레미스 네트워크 자산에서 프라이빗 연결 환경을 사용하도록 설정하여 데이터와 트래픽이 Azure 백본 네트워크로 직접 전송되도록 합니다.

  • 중요한 온-프레미스 네트워크에서의 반출 공격을 방지합니다.

  • 프라이빗 엔드포인트를 사용하여 Azure 전역의 연결 패턴을 설정합니다.

연결을 제한하는 일반적인 방법으로 DPS IP 필터 규칙프라이빗 엔드포인트가 있는 가상 네트워킹(VNET)이 있습니다. 이 문서의 목표는 프라이빗 엔드포인트를 사용하는 DPS에 대한 VNET 접근 방식을 설명하는 것입니다.

온-프레미스 네트워크에서 작동하는 디바이스는 VPN(가상 사설망) 또는 ExpressRoute 개인 피어링을 사용하여 Azure의 VNET에 연결하고, 프라이빗 엔드포인트를 통해 DPS 리소스에 액세스할 수 있습니다.

프라이빗 엔드포인트는 Azure 리소스에 액세스할 수 있는 고객 소유의 VNET 내에 할당된 개인 IP 주소입니다. DPS 리소스에 대한 프라이빗 엔드포인트가 있으면 VNET 내에서 작동하는 디바이스에서 퍼블릭 엔드포인트로의 트래픽을 허용하지 않고 DPS 리소스를 통한 프로비전을 요청할 수 있습니다. 각 DPS 리소스는 여러 프라이빗 엔드포인트를 지원할 수 있으며, 각 엔드포인트는 다른 지역의 VNET에 있을 수 있습니다.

필수 조건

계속하기 전에 다음과 같은 전제 조건을 충족하는지 확인하세요.

프라이빗 엔드포인트 제한 사항

프라이빗 엔드포인트를 사용하는 경우 DPS에 대한 현재 제한 사항은 다음과 같습니다.

  • DPS 리소스와 연결된 IoT 허브가 서로 다른 클라우드에 있는 경우 프라이빗 엔드포인트가 작동하지 않습니다. 예를 들어 Azure Government 및 글로벌 Azure가 있습니다.

  • DPS의 프라이빗 엔드포인트는 공용 지역에서만 지원되는 Azure Private Link를 사용합니다. 자세한 내용은 Azure Private Link 가용성을 참조하세요.

  • 현재 Azure 함수가 VNET 및 프라이빗 엔드포인트로 잠겨 있으면 DPS에 대한 Azure Functions를 사용하는 사용자 지정 할당 정책이 작동하지 않습니다.

  • 현재 DPS VNET은 DPS로의 데이터 수신에만 지원됩니다. DPS에서 IoT Hub로의 트래픽인 데이터 송신은 전용 VNET이 아닌 내부 서비스 간 메커니즘을 사용합니다. DPS와 IoT Hub 간의 전체 VNET 기반 송신 잠금에 대한 지원은 현재 사용할 수 없습니다.

  • 대기 시간이 가장 짧은 할당 정책은 디바이스를 대기 시간이 가장 짧은 IoT 허브에 할당하는 데 사용됩니다. 이 할당 정책은 가상 네트워크 환경에서 신뢰할 수 없습니다.

  • 하나 이상의 프라이빗 엔드포인트를 사용하도록 설정하려면 일반적으로 DPS 인스턴스에 대한 공용 액세스를 사용하지 않도록 설정해야 합니다. 공용 액세스를 사용하지 않도록 설정하면 더 이상 Azure Portal을 사용하여 등록을 관리할 수 없습니다. 대신 DPS 인스턴스에 구성된 VNET/프라이빗 엔드포인트 내의 머신에서 Azure CLI, PowerShell 또는 서비스 API를 사용하여 등록을 관리할 수 있습니다.

  • 프라이빗 엔드포인트를 사용하는 경우 가용성 영역 지원하는 지역 중 하나에 DPS를 배포하는 것이 좋습니다. 그렇지 않으면 프라이빗 엔드포인트가 사용하도록 설정된 DPS 인스턴스는 중단이 발생한 경우 가용성이 저하될 수 있습니다.

참고 항목

데이터 상주 고려 사항:

DPS는 전역 디바이스 엔드포인트(global.azure-devices-provisioning.net)를 제공합니다. 그러나 전역 엔드포인트를 사용하는 경우 DPS 인스턴스가 처음 만들어진 지역 외부에서 데이터를 리디렉션할 수 있습니다. 초기 DPS 지역 내에서 데이터 보존을 보장하려면 프라이빗 엔드포인트를 사용합니다.

프라이빗 엔드포인트 설정

프라이빗 엔드포인트를 설정하려면 다음 단계를 수행합니다.

  1. Azure Portal에서 DPS 리소스를 열고 네트워킹 탭을 선택합니다. 프라이빗 엔드포인트 연결+ 프라이빗 엔드포인트를 선택합니다.

    Screenshot that shows adding a new private endpoint for DPS.

  2. 프라이빗 엔드포인트 만들기 기본 사항 페이지에서 다음 표에 설명된 정보를 입력합니다.

    Screenshot that shows the private endpoints basics page.

    필드
    구독 프라이빗 엔드포인트를 포함할 원하는 Azure 구독을 선택합니다.
    리소스 그룹 프라이빗 엔드포인트를 포함할 리소스 그룹을 선택하거나 만듭니다.
    이름 프라이빗 엔드포인트에 대한 이름을 입력합니다.
    지역 선택한 지역은 VNET이 포함된 지역과 동일해야 하지만 DPS 리소스와 동일할 필요는 없습니다.

    다음: 리소스를 선택하여 프라이빗 엔드포인트에서 가리킬 리소스를 구성합니다.

  3. 프라이빗 엔드포인트 리소스 만들기 페이지에서 다음 표에 설명된 정보를 입력합니다.

    Screenshot that shows the private endpoint resource page.

    필드
    구독 프라이빗 엔드포인트에서 가리킬 DPS 리소스가 포함된 Azure 구독을 선택합니다.
    리소스 종류 Microsoft.Devices/ProvisioningServices를 선택합니다.
    리소스 프라이빗 엔드포인트가 매핑될 DPS 리소스를 선택합니다.
    대상 하위 리소스 iotDps를 선택합니다.

    리소스 ID 또는 별칭을 사용하여 Azure 리소스에 연결합니다. 설정에 대한 정보는 이 문서의 프라이빗 엔드포인트 요청 섹션에 나와 있습니다.

    다음: 구성을 선택하여 프라이빗 엔드포인트에 대한 VNET을 구성합니다.

  4. 프라이빗 엔드포인트 만들기 - 구성 페이지에서 프라이빗 엔드포인트를 만들 가상 네트워크 및 서브넷을 선택합니다.

    다음: 태그를 선택하여 필요에 따라 리소스에 대한 태그를 제공합니다.

    Screenshot that shows the private endpoint configuration page.

  5. 검토 + 만들기를 선택한 다음, 만들기를 선택하여 프라이빗 엔드포인트 리소스를 만듭니다.

디바이스에서 프라이빗 엔드포인트 사용

디바이스 프로비저닝 코드를 통해 프라이빗 엔드포인트를 사용하려면 Azure Portal에서 DPS 인스턴스에 대한 개요 페이지에 표시된 대로 프로비전 코드에서 DPS 인스턴스에 대한 특정 서비스 엔드포인트를 사용해야 합니다. 서비스 엔드포인트의 형식은 다음과 같습니다.

<Your DPS Tenant Name>.azure-devices-provisioning.net

설명서 및 SDK에 나와 있는 대부분의 샘플 코드는 글로벌 디바이스 엔드포인트(global.azure-devices-provisioning.net) 및 ID 범위를 사용하여 특정 DPS 인스턴스를 확인합니다. 프라이빗 엔드포인트를 사용하여 DPS 인스턴스에 연결하는 경우 글로벌 디바이스 엔드포인트 대신 서비스 엔드포인트를 사용하여 디바이스를 프로비전합니다.

예를 들어 Azure IoT C SDK의 프로비전 디바이스 클라이언트 샘플(pro_dev_client_sample)은 글로벌 디바이스 엔드포인트prov_dev_client_sample.c의 글로벌 프로비전 URI(global_prov_uri)로 사용하도록 설계되었습니다.

MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_RESULT, PROV_DEVICE_RESULT_VALUE);
MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_REG_STATUS, PROV_DEVICE_REG_STATUS_VALUES);

static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
}

PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
PROV_DEVICE_HANDLE prov_device_handle;
if ((prov_device_handle = Prov_Device_Create(global_prov_uri, id_scope, prov_transport)) == NULL)
{
    (void)printf("failed calling Prov_Device_Create\r\n");

프라이빗 엔드포인트가 있는 샘플을 사용하려면 위에서 강조 표시된 코드가 DPS 리소스에 대한 서비스 엔드포인트를 사용하도록 변경됩니다. 예를 들어 서비스 엔드포인트가 mydps.azure-devices-provisioning.net인 경우 코드는 다음과 같습니다.

static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* service_uri = "mydps.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
    PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
    PROV_DEVICE_HANDLE prov_device_handle;
    if ((prov_device_handle = Prov_Device_Create(service_uri, id_scope, prov_transport)) == NULL)
    {
        (void)printf("failed calling Prov_Device_Create\r\n");
    }

프라이빗 엔드포인트 요청

DPS 인스턴스에 대한 프라이빗 엔드포인트는 리소스 ID별로 요청할 수 있습니다. 이 요청을 수행하려면 리소스 소유자가 리소스 ID를 제공해야 합니다.

  1. 리소스 ID는 아래와 같이 DPS 리소스의 속성 탭에 제공됩니다.

    Screenshot that shows the DPS Properties tab.

    주의

    리소스 ID에는 구독 ID가 포함되어 있습니다.

  2. 리소스 ID가 있으면 위의 프라이빗 엔드포인트 설정 단계에 있는 3단계 프라이빗 엔드포인트 만들기 - 리소스 페이지의 단계를 따릅니다. 리소스 ID 또는 별칭으로 Azure 리소스에 연결을 선택하고 다음 표에 정보를 입력합니다.

    필드
    리소스 ID 또는 별칭 DPS 리소스에 대한 리소스 ID를 입력합니다.
    대상 하위 리소스 iotDps를 입력합니다.
    요청 메시지 DPS 리소스 소유자에 대한 요청 메시지를 입력합니다.
    예를 들어
    Please approve this new private endpoint
    for IoT devices in site 23 to access this DPS instance

    다음: 구성을 선택하여 프라이빗 엔드포인트에 대한 VNET을 구성합니다.

  3. 프라이빗 엔드포인트 만들기 - 구성 페이지에서 프라이빗 엔드포인트를 만들 가상 네트워크 및 서브넷을 선택합니다.

    다음: 태그를 선택하여 필요에 따라 리소스에 대한 태그를 제공합니다.

  4. 검토 + 만들기를 선택한 다음, 만들기를 선택하여 프라이빗 엔드포인트 요청을 만듭니다.

  5. DPS 소유자는 DPS 네트워킹 탭의 프라이빗 엔드포인트 연결 목록에서 프라이빗 엔드포인트 요청을 확인합니다. 해당 페이지에서 소유자는 프라이빗 엔드포인트 요청을 승인 또는 거부할 수 있습니다.

    Screenshot that shows the private endpoint request approval.

프라이빗 엔드포인트 가격 책정

가격 책정에 대한 자세한 내용은 Azure Private Link 가격 책정을 참조하세요.

다음 단계

아래 링크를 사용하여 DPS 보안 기능에 대해 자세히 알아봅니다.