적용 대상: IoT Edge 1.5
중요합니다
IoT Edge 1.5 LTS는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일부터 수명이 종료됩니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.
이 문서에서는 다운스트림 디바이스와 IoT Edge 투명 게이트웨이 간에 신뢰할 수 있는 연결을 설정하는 지침을 제공합니다. 투명한 게이트웨이 시나리오에서 하나 이상의 디바이스는 IoT Hub에 대한 연결을 유지하는 단일 게이트웨이 디바이스를 통해 메시지를 보냅니다. 이 문서에서 는 게이트웨이 및 IoT Edge 게이트웨이 라는 용어는 투명한 게이트웨이로 구성된 IoT Edge 디바이스를 의미합니다.
참고 항목
다운스트림 디바이스는 데이터를 인터넷 또는 게이트웨이 디바이스로 직접 보냅니다(IoT Edge 사용 여부). 자식 디바이스는 중첩된 토폴로지의 다운스트림 디바이스 또는 게이트웨이 디바이스일 수 있습니다.
투명 게이트웨이 연결을 3단계로 설정합니다. 이 문서에서는 세 번째 단계를 설명합니다.
다운스트림 디바이스가 안전하게 연결할 수 있도록 게이트웨이 디바이스를 서버로 구성합니다. 다운스트림 디바이스에서 메시지를 수신하고 올바른 대상으로 라우팅하도록 게이트웨이를 설정합니다. 이를 위해 투명 게이트웨이로 작동하도록 IoT Edge 디바이스 구성을 참조하세요.
IoT Hub를 사용하여 인증할 수 있도록 다운스트림 디바이스에 대한 디바이스 ID를 만듭니다. 게이트웨이 디바이스를 통해 메시지를 보내도록 다운스트림 디바이스를 구성합니다. 이러한 단계는 Azure IoT Hub에 대한 다운스트림 디바이스 인증을 참조하세요.
다운스트림 디바이스를 게이트웨이 디바이스에 연결하고 메시지 보내기를 시작합니다.
이 문서에서는 다음과 같은 다운스트림 디바이스 연결 구성 요소에 대해 설명합니다.
- TLS(전송 계층 보안) 및 인증서 기본 사항
- 서로 다른 운영 체제에서 작동하고 인증서를 다르게 처리하는 TLS 라이브러리
기본 설정 언어로 Azure IoT 샘플을 연습하여 디바이스가 게이트웨이로 메시지를 보내도록 합니다.
필수 조건
다음을 획득하여 다운스트림 디바이스를 준비합니다.
다운스트림 디바이스
이 디바이스는 Azure IoT Hub에서 만든 ID를 사용하는 모든 애플리케이션 또는 플랫폼일 수 있습니다. 대부분의 경우 애플리케이션은 Azure IoT 디바이스 SDK를 사용합니다. 다운스트림 디바이스는 IoT Edge 게이트웨이 디바이스에서 실행되는 애플리케이션일 수도 있습니다.
나중에 이 문서에서는 IoT 디바이스를 다운스트림 디바이스로 연결하는 방법을 보여줍니다. IoT Edge 디바이스를 다운스트림 디바이스로 사용하려면 Azure IoT Edge 디바이스를 함께 연결하여 계층 구조(중첩된 에지)를 만듭니다.
루트 CA 인증서 파일
이 파일은 투명한 게이트웨이 역할을 하도록 IoT Edge 디바이스 구성에서 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 인증서 및 서버의 인증서가 있습니다. 클라이언트는 전체 서버 인증서 체인을 암호화하여 확인하여 서버를 신뢰합니다. 이 프로세스를 서버 체인 유효성 검사라고 합니다. 클라이언트는 서버가 '소유 증명'이라고 하는 서버 인증서의 프라이빗 키를 가지고 있음을 증명하도록 서버를 challenge합니다. 서버 체인 유효성 검사와 소유 증명을 함께 서버 인증이라고 합니다. 서버 인증서 체인의 유효성을 검사하려면 클라이언트에서 서버 인증서를 발급하는 데 사용되는 루트 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 인증서를 설치합니다. Node.js같은 일부 애플리케이션은 OS 인증서 저장소를 사용하지 않고 노드 런타임의 내부 인증서 저장소를 대신 사용합니다. 운영 체제 수준에서 인증서를 설치할 수 없는 경우 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 Node.js 디바이스 클라이언트를 IoT Edge 게이트웨이에 연결하는 샘플 애플리케이션을 제공합니다. Node.js 애플리케이션의 경우 여기에 표시된 대로 애플리케이션 수준에서 루트 CA 인증서를 설치해야 합니다. Node.js 애플리케이션은 시스템의 인증서 저장소를 사용하지 않습니다.
- Node.js용 Azure IoT 디바이스 SDK 샘플 리포지토리에서 edge_downstream_device.js에 대한 샘플을 가져옵니다.
- readme.md 파일을 검토하여 샘플을 실행하기 위한 모든 필수 구성 요소가 있는지 확인합니다.
- edge_downstream_device.js 파일에서 connectionString 및 edge_ca_cert_path 변수를 업데이트합니다.
- 디바이스에서 샘플을 실행하는 방법에 대한 지침은 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가 오프라인 기능을 다운스트림 디바이스로 확장하는 방법을 알아봅니다.