AWS IoT Device Defender 데모 - FreeRTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS IoT Device Defender 데모

중요

이 데모는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드 섹션을 참조하세요.

소개

이 데모에서는 AWS IoT Device Defender 라이브러리를 사용하여 AWS IoT Device Defender에 연결하는 방법을 보여줍니다. 이 데모는 coreMQTT 라이브러리를 사용하여 TLS(상호 인증)를 통해 AWS IoT MQTT 브로커 및 CoreJSON 라이브러리에 대한 MQTT 연결을 설정하고 AWS IoT Device Defender 서비스로부터 수신한 응답을 검증하고 파싱합니다. 데모에서는 디바이스에서 수집한 지표를 사용하여 JSON 형식의 보고서를 구성하는 방법과 구성된 보고서를 AWS IoT Device Defender 서비스에 제출하는 방법을 보여줍니다. 또한 전송된 보고서가 수락 또는 거부되었는지 확인하기 위해 coreMQTT 라이브러리에 콜백 함수를 등록하여 AWS IoT Device Defender 서비스로부터의 응답을 처리하는 방법도 보여줍니다.

참고

FreeRTOS 데모를 설정하고 실행하려면 FreeRTOS 시작하기의 단계를 따릅니다.

기능

이 데모에서는 지표를 수집하고, JSON 형식으로 Device Defender 보고서를 작성하고, AWS IoT MQTT 브로커와의 안전한 MQTT 연결을 통해 이 보고서를 AWS IoT Device Defender 서비스에 제출하는 방법을 보여주는 단일 애플리케이션 태스크를 생성합니다. 데모에는 표준 네트워킹 지표뿐만 아니라 사용자 지정 지표도 포함되어 있습니다. 데모에 포함된 사용자 지정 지표는 다음과 같습니다.

  • 'task_numbers' 지표: FreeRTOS 태스크 ID의 목록입니다. 이 지표의 유형은 '숫자 목록'입니다.

  • 'stack_high_water_mark' 지표: 데모 애플리케이션 태스크의 스택 하이 워터마크입니다. 이 지표의 유형은 '숫자'입니다.

네트워킹 지표를 수집하는 방법은 사용 중인 TCP/IP 스택에 따라 다릅니다. FreeRTOS+TCP 및 지원되는 lwIP 구성의 경우, 디바이스에서 실제 지표를 수집하여 AWS IoT Device Defender 보고서로 제출하는 지표 수집 구현을 제공합니다. FreeRTOS+TCPlwIP에 대한 구현은 GitHub에서 찾을 수 있습니다.

다른 TCP/IP 스택을 사용하는 보드의 경우 모든 네트워킹 지표를 0으로 반환하는 지표 수집 함수의 스텁 정의가 제공됩니다. 실제 지표를 전송하려면 네트워크 스택에 freertos/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c의 함수를 구현합니다. 이 파일은 GitHub 웹 사이트에서도 사용할 수 있습니다.

ESP32의 경우 기본 lwIP 구성에서는 코어 잠금을 사용하지 않으므로 데모에서 스텁 지표를 사용합니다. 참조 lwIP 지표 수집 구현을 사용하려면 lwiopts.h에서 다음 매크로를 정의합니다.

#define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 0 #define LWIP_TCPIP_CORE_LOCKING 1 #define LWIP_STATS 1 #define MIB2_STATS 1

다음은 데모를 실행하면 생성되는 출력의 예입니다.

보드가 FreerTOS+TCP 또는 지원되는 lwIP 구성을 사용하지 않는 경우 출력은 다음과 같습니다.

데모의 소스 코드는 freertos/demos/device_defender_for_aws/ 디렉터리 또는 GitHub 웹 사이트에서 다운로드할 수 있습니다.

AWS IoT Device Defender 주제 구독

subscribeToDefenderTopics 함수는 게시된 Device Defender 보고서에 대한 응답을 수신할 수 있는 MQTT 주제를 구독합니다. 매크로 DEFENDER_API_JSON_ACCEPTED를 사용하여 수락된 Device Defender 보고서에 대한 응답을 수신할 주제 문자열을 구성합니다. 매크로 DEFENDER_API_JSON_REJECTED를 사용하여 거부된 Device Defender 보고서에 대한 응답을 수신할 주제 문자열을 구성합니다.

디바이스 지표 수집

collectDeviceMetrics 함수는 metrics_collector.h에 정의된 함수를 사용하여 네트워킹 지표를 수집합니다. 수집되는 지표는 송수신된 바이트 및 패킷 수, 열린 TCP 포트, 열린 UDP 포트, 설정된 TCP 연결입니다.

AWS IoT Device Defender 보고서 생성

generateDeviceMetricsReport 함수는 report_builder.h에 정의된 함수를 사용하여 Device Defender 보고서를 생성합니다. 이 함수는 네트워킹 지표 및 버퍼를 사용하여 AWS IoT Device Defender에서 예상하는 형식으로 JSON 문서를 생성한 다음 제공된 버퍼에 씁니다. AWS IoT Device Defender에서 예상하는 JSON 문서의 형식은 AWS IoT 개발자 안내서디바이스 측 지표에 지정되어 있습니다.

AWS IoT Device Defender 보고서 게시

AWS IoT Device Defender 보고서는 JSON AWS IoT Device Defender 보고서 게시용 MQTT 주제에 게시됩니다. 보고서는 GitHub 웹 사이트의 이 코드 조각에 나와 있는 매크로 DEFENDER_API_JSON_PUBLISH를 사용하여 구성됩니다.

응답 처리를 위한 콜백

publishCallback 함수는 들어오는 MQTT 게시 메시지를 처리합니다. AWS IoT Device Defender 라이브러리의 Defender_MatchTopic API를 사용하여 들어오는 MQTT 메시지가 AWS IoT Device Defender 서비스가 전송한 것인지 확인합니다. AWS IoT Device Defender 서비스가 전송한 메시지인 경우 수신한 JSON 응답을 파싱하고 응답에서 보고서 ID를 추출합니다. 그런 다음 보고서 ID가 보고서에서 전송된 ID와 동일한지 확인합니다.