다운스트림 디바이스를 Azure IoT Edge 게이트웨이에 연결

적용 대상:IoT Edge 1.5 확인 표시 IoT Edge 1.5 IoT Edge 1.4 확인 표시 IoT Edge 1.4

Important

IoT Edge 1.5 LTS 및 IoT Edge 1.4 LTS는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일에 수명이 종료됩니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

여기에서는 다운스트림 디바이스와 IoT Edge 투명 게이트웨이 간의 신뢰할 수 있는 연결을 설정하기 위한 지침을 제공합니다. 투명 게이트웨이 시나리오에서 하나 이상의 디바이스는 IoT Hub에 대한 연결을 유지하는 단일 게이트웨이 디바이스를 통해 메시지를 전달할 수 있습니다. 여기에서 게이트웨이 및 IoT Edge 게이트웨이라는 용어는 투명한 게이트웨이로 사용되는 IoT Edge 디바이스를 의미합니다.

참고 항목

다운스트림 디바이스는 인터넷 또는 게이트웨이 디바이스로 직접 데이터를 내보냅니다(IoT Edge 지원 여부에 관계 없음). 자식 디바이스는 중첩된 토폴로지의 다운스트림 디바이스 또는 게이트웨이 디바이스일 수 있습니다.

성공적인 투명 게이트웨이 연결을 설정하기 위한 세 가지 일반적인 단계가 있습니다. 이 문서에서는 세 번째 단계를 설명합니다.

  1. 다운스트림 디바이스를 안전하게 연결할 수 있도록 게이트웨이 디바이스를 서버로 구성합니다. 다운스트림 디바이스에서 메시지를 수신하고 적절한 대상으로 라우팅할 수 있도록 게이트웨이를 설정합니다. 이를 위해 투명 게이트웨이로 작동하도록 IoT Edge 디바이스 구성을 참조하세요.

  2. IoT Hub를 사용하여 인증할 수 있도록 다운스트림 디바이스에 대한 디바이스 ID를 만듭니다. 게이트웨이 디바이스를 통해 메시지를 보내도록 다운스트림 디바이스를 구성합니다. 이러한 단계는 Azure IoT Hub에 대한 다운스트림 디바이스 인증을 참조하세요.

  3. 다운스트림 디바이스를 게이트웨이 디바이스에 연결하고 메시지 보내기를 시작합니다.

이 문서는 다음과 같은 다운스트림 디바이스 연결 구성 요소를 이해하는 데 도움이 됩니다.

  • TLS(전송 계층 보안) 및 인증서 기본 사항
  • 인증서를 다르게 처리하는 여러 운영 체제에서 작동하는 TLS 라이브러리

그런 다음, 기본 언어로 디바이스가 게이트웨이에 메시지를 보내도록 하는 Azure IoT 샘플 연습을 수행합니다.

필수 조건

다음을 획득하여 다운스트림 디바이스를 준비합니다.

  • 다운스트림 디바이스

    이 디바이스는 Azure IoT Hub 클라우드 서비스를 사용하여 생성된 ID가 있는 애플리케이션 또는 플랫폼이 될 수 있습니다. 많은 경우에 이러한 애플리케이션은 Azure IoT 디바이스 SDK를 사용합니다. 다운스트림 디바이스는 IoT Edge 게이트웨이 디바이스 자체에서 실행 중인 애플리케이션일 수도 있습니다.

    이 문서의 뒷부분에는 IoT 디바이스를 다운스트림 디바이스로 연결하는 단계가 나와 있습니다. IoT Edge 디바이스를 다운스트림 디바이스로 사용하려는 경우 Azure IoT Edge 디바이스를 함께 연결하여 계층 구조(중첩 에지)를 만듭니다.

  • 루트 CA 인증서 파일

    이 파일은 다운스트림 디바이스에서 사용할 수 있는 투명 게이트웨이 역할을 하는 IoT Edge 디바이스를 구성에서 디바이스 CA 인증서를 생성하는 데 사용됩니다.

    다운스트림 디바이스는 이 인증서를 사용하여 게이트웨이 디바이스 ID의 유효성을 검사합니다. 이 신뢰할 수 있는 인증서는 게이트웨이 디바이스에 대한 TLS(전송 계층 보안) 연결의 유효성을 검사합니다. 루트 CA 인증서 제공 섹션에서 사용 세부 정보를 참조하세요.

  • 게이트웨이 디바이스를 가리키는 수정된 연결 문자열

    연결 문자열을 수정하는 방법은 Azure IoT Hub에 다운스트림 디바이스 인증에 설명되어 있습니다.

참고 항목

IoT Hub에 등록된 IoT 디바이스는 모듈 쌍을 사용하여 단일 디바이스에서 여러 프로세스, 하드웨어 또는 기능을 격리할 수 있습니다. IoT Edge 게이트웨이는 대칭 키 인증을 사용하지만 x.509 인증서 인증을 사용하지 않는 다운스트림 모듈 연결을 지원합니다.

TLS 및 인증서 기본 사항 이해

IoT Edge에 다운스트림 디바이스를 안전하게 연결하는 문제는 인터넷을 통해 발생하는 다른 보안 클라이언트/서버 통신과 동일합니다. 클라이언트와 서버는 TLS(전송 계층 보안)를 사용하여 인터넷을 통해 안전하게 통신합니다. TLS는 인증서라고 하는 표준 PKI(공용 키 인프라) 구문을 사용하여 빌드되었습니다. TLS는 상당히 관련된 사양이며 두 엔드포인트의 보안에 관한 광범위한 항목을 다룹니다. 이 섹션에서는 디바이스를 IoT Edge 게이트웨이에 안전하게 연결하는 것과 관련된 개념을 간단히 설명합니다.

클라이언트를 서버에 연결할 때 서버에서는 서버 인증서 체인이라는 인증서의 체인을 제공합니다. 인증서 체인은 일반적으로 CA(루트 인증 기관) 인증서, 하나 이상의 중간 CA 인증서 및 마지막으로 자체 서버 인증서로 구성됩니다. 클라이언트는 전체 서버 인증서 체인을 암호화된 방식으로 확인하여 서버와의 신뢰를 설정합니다. 이 서버 인증서 체인의 클라이언트 유효성 검사를 서버 체이니 유효성 검사라고 합니다. 클라이언트에는 소유 증명이라는 프로세스에서 서버 인증서와 관련된 개인 키의 소유를 서버에 증명하도록 하는 문제가 발생합니다. 서버 체인 유효성 검사와 소유 증명의 조합을 서버 인증이라고 합니다. 서버 인증서 체인의 유효성을 검사하려면 서버 인증서를 만드는(또는 발행하는) 데 사용된 루트 CA 인증서의 복사본이 클라이언트에 있어야 합니다. 일반적으로 웹 사이트에 연결할 때 브라우저는 일반적으로 사용되는 CA 인증서로 미리 구성되므로 클라이언트는 원활히 프로세스됩니다.

디바이스를 Azure IoT Hub에 연결할 때 디바이스는 클라이언트이며 IoT Hub 클라우드 서비스는 서버입니다. IoT Hub 클라우드 서비스는 공개적으로 널리 사용되는 Baltimore CyberTrust Root라는 루트 CA 인증서로 지원됩니다. 대부분의 디바이스에 IoT Hub CA 인증서가 이미 설치되어 있으므로 많은 TLS 구현(OpenSSL Schannel, LibreSSL)은 자동으로 서버 인증서 유효성 검사 동안에 해당 인증서를 사용합니다. 그러나 IoT Hub에 성공적으로 연결할 수 있는 디바이스는 IoT Edge 게이트웨이에 연결을 시도하는 문제가 있을 수 있습니다.

디바이스를 IoT Edge 게이트웨이에 연결할 때 다운스트림 디바이스는 클라이언트이고 게이트웨이 디바이스는 서버입니다. Azure IoT Edge를 사용하여 적합하다고 판단되는 게이트웨이 인증서 체인을 빌드할 수 있습니다. Baltimore와 같은 공용 CA 인증서를 사용하거나 자체 서명된(또는 내부) 루트 CA 인증서를 사용하도록 선택할 수도 있습니다. 공용 CA 인증서는 종종 이와 관련된 비용이 있으므로 일반적으로 프로덕션 시나리오에서 사용됩니다. 자체 서명된 CA 인증서는 개발 및 테스트에 대해 기본 설정됩니다. 데모 인증서는 자체 서명된 루트 CA 인증서입니다.

IoT Edge 게이트웨이에 대한 자체 서명된 루트 CA 인증서를 사용하는 경우에는 설치하거나 게이트웨이에 연결을 시도하는 모든 다운스트림 디바이스에 제공해야 합니다.

게이트웨이 인증서 설정 스크린샷.

IoT Edge 인증서 및 일부 프로덕션 의미에 대해 자세히 알아보려면 IoT Edge 인증서 사용량 세부 정보를 참조하세요.

루트 CA 인증서 제공

게이트웨이 디바이스의 인증서를 확인하려면 다운스트림 디바이스에 루트 CA 인증서의 자체 복사본이 필요합니다. IoT Edge git 리포지토리에 제공된 스크립트를 사용하여 테스트 인증서를 만든 경우 루트 CA 인증서는 azure-iot-test-only.root.ca.cert.pem이라고 합니다.

아직 수행하지 않은 경우 이 인증서 파일을 다운스트림 디바이스의 임의 디렉터리로 이동합니다. 운영 체제의 인증서 저장소에 CA 인증서를 설치하거나 Azure IoT SDK를 사용하여 애플리케이션 내에서 인증서를 참조하여(특정 언어의 경우) 파일을 이동할 수 있습니다.

Azure Key Vault 같은 서비스 또는 보안 복사 프로토콜 같은 기능을 사용하여 인증서 파일을 이동할 수 있습니다.

OS에 인증서 설치

루트 CA 인증서가 다운스트림 디바이스에 있으면 게이트웨이에 연결하는 애플리케이션에서 인증서에 액세스할 수 있는지 확인합니다.

일반적으로 운영 체제의 인증서 저장소에 루트 CA 인증서를 설치하면 대부분의 애플리케이션에서 루트 CA 인증서를 사용할 수 있습니다. OS 인증서 스토리지를 사용하지 않는 대신 노드 런타임의 내부 인증서 스토리지를 사용하는 NodeJS 애플리케이션과 같은 일부 예외가 있습니다. 운영 체제 수준에서 인증서를 설치할 수 없는 경우 Azure IoT SDK에서 인증서 사용으로 건너뜁니다.

Ubuntu 또는 Windows에 루트 CA 인증서를 설치합니다.

다음 명령은 Ubuntu 호스트에서 CA 인증서를 설치하는 방법의 예제입니다. 이 예제는 필수 구성 요소 문서의 azure-iot-test-only.root.ca.cert.pem 인증서를 사용하고 다운스트림 디바이스의 위치에 인증서를 복사한 것으로 가정합니다.

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

다음과 같은 메시지가 표시됩니다. "/etc/ssl/certs에 인증서 업데이트 중...1개 추가됨, 0개 제거됨, 완료"

Azure IoT SDK를 사용하여 인증서 사용

Azure IoT SDK를 간단한 샘플 애플리케이션을 사용하여 IoT Edge 디바이스에 연결합니다. 샘플의 목표는 디바이스 클라이언트를 연결하고 게이트웨이에 원격 분석 메시지를 보낸 다음, 연결을 닫고 종료하는 것입니다.

애플리케이션 수준 샘플을 사용하기 전에 다음 항목을 가져옵니다.

  • 게이트웨이 디바이스를 가리키도록 수정된 다운스트림 디바이스의 IoT Hub 연결 문자열

  • 다운스트림 디바이스를 IoT Hub에 인증하는 데 필요한 모든 인증서 자세한 내용은 Azure IoT Hub에 다운스트림 디바이스 인증을 참조하세요.

  • 다운스트림 디바이스의 어딘가에 복사 및 저장한 루트 CA 인증서에 대한 전체 경로.

    예: <file path>/azure-iot-test-only.root.ca.cert.pem

이제 선택한 언어로 된 샘플과 함께 인증서를 사용할 준비가 되었습니다.

이 섹션에서는 Azure IoT NodeJS 디바이스 클라이언트를 IoT Edge 게이트웨이에 연결하기 위한 샘플 애플리케이션을 제공합니다. NodeJS 애플리케이션의 경우 다음과 같이 애플리케이션 수준에서 루트 CA 인증서를 설치해야 합니다. NodeJS 애플리케이션은 시스템의 인증서 저장소를 사용하지 않습니다.

  1. Node.js용 Azure IoT 디바이스 SDK 샘플 리포지토리에서 edge_downstream_device.js에 대한 샘플을 가져옵니다.
  2. readme.md 파일을 검토하여 샘플을 실행하기 위한 모든 필수 구성 요소가 있는지 확인합니다.
  3. edge_downstream_device.js 파일에서 connectionStringedge_ca_cert_path 변수를 업데이트합니다.
  4. 디바이스에서 샘플을 실행하는 방법에 대한 지침은 SDK 설명서를 참조하세요.

실행 중인 샘플을 이해하기 위해 다음 코드 조각은 클라이언트 SDK가 인증서 파일을 읽고 보안 TLS 연결을 설정하는 데 사용하는 방법을 나타냅니다.

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

게이트웨이 연결 테스트

다운스트림 디바이스에서 다음 샘플 명령을 사용하여 게이트웨이 디바이스에 연결할 수 있는지 테스트합니다.

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

이 명령은 MQTTS(포트 8883)를 통한 연결을 테스트합니다. 다른 프로토콜을 사용하는 경우 필요에 따라 AMQPS(5671) 또는 HTTPS(443)에 대해 명령을 조정합니다.

이 명령의 출력은 체인의 모든 인증서에 대한 정보를 포함하여 길 수 있습니다. 연결에 성공하면 Verification: OK 또는 Verify return code: 0 (ok)와 같은 줄이 표시됩니다.

게이트웨이 연결을 확인하는 방법에 대한 스크린샷.

게이트웨이 연결 문제 해결

게이트웨이 디바이스에 대한 다운스트림 디바이스 연결이 불안정한 경우 해결을 위해 다음 질문을 고려하세요.

  • 연결 문자열에 있는 게이트웨이 호스트 이름이 게이트웨이 디바이스에 있는 IoT Edge config 파일의 호스트 이름 값과 같나요?
  • 게이트웨이 호스트 이름을 IP 주소로 확인할 수 있나요? DNS를 사용하거나 다운스트림 디바이스에 호스트 파일 항목을 추가하여 간헐적 연결을 해결할 수 있습니다.
  • 통신 포트가 방화벽에서 열려 있나요? 사용된 프로토콜(MQTTS: 8883/AMQPS: 5671/HTTPS: 433)을 기반으로 하는 통신은 다운스트림 디바이스와 투명 IoT Edge 간에 가능해야 합니다.

다음 단계

IoT Edge가 다운스트림 디바이스에 오프라인 기능을 확장할 수 있는 방법을 알아봅니다.