투케이2K

219. (TWOK/WORK) [업무 이슈] AWS IoT Core MQTT 메시지 테스트 시 IAM 계정 AccessKey, SecretKey 미사용 이슈 - 사물 인증서 사용 본문

투케이2K 업무정리

219. (TWOK/WORK) [업무 이슈] AWS IoT Core MQTT 메시지 테스트 시 IAM 계정 AccessKey, SecretKey 미사용 이슈 - 사물 인증서 사용

투케이2K 2026. 6. 1. 19:36
728x90
반응형

[제 목]

주제 : 투케이2K 업무 정리

타이틀 : 투케이 / 2k / 업무 정리

제목 : [업무 이슈] AWS IoT Core MQTT 메시지 테스트 시 IAM 계정 AccessKey, SecretKey 미사용 이슈 - 사물 인증서 사용

 

[내 용]

------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------

- 제 목 : [업무 이슈] AWS IoT Core MQTT 메시지 테스트 시 IAM 계정 AccessKey, SecretKey 미사용 이슈 - 사물 인증서 사용


- 테스트 환경 : AWS / Iot / MQTT / Shadow


- 사전) 👉 Aws Iot Core 간단 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


- 사전) 👉 MQTT (Message Queuing Telemetry Transport) 설명 : 

  >> MQTT 는 경량 메시지 프로토콜로, 주로 IoT(사물인터넷) 환경에서 사용됩니다

  >> MQTT 목적 : 제한된 네트워크 환경(저속, 불안정)에서 효율적으로 메시지를 주고받기 위해 설계

  >> MQTT 기반 : TCP/IP 위에서 동작

  >> MQTT 패턴 : Publish/Subscribe 모델을 사용

    - Publisher : 메시지를 발행하는 클라이언트

    - Subscriber : 특정 주제(topic)를 구독하는 클라이언트

    - Broker: 메시지를 중개하는 서버 (예: Mosquitto)

  >> MQTT 주요 특징 : 

    - 경량성 : 헤더가 매우 작음(2바이트부터 시작)

    - QoS (Quality of Service) : 
      $ QoS 0: 최대 한 번 전달(보장 없음)
      $ QoS 1: 최소 한 번 전달(중복 가능)
      $ QoS 2: 정확히 한 번 전달(가장 안전)

    - 지속 연결 : KeepAlive로 연결 상태 유지

    - Last Will and Testament (LWT) : 클라이언트 비정상 종료 시 브로커가 메시지 발행

    - 토픽 기반 라우팅 : 계층적 구조(/home/temperature 등)

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 🟥 기존 앱 및 웹에서 AWS IAM 계정 AccessKey , SecretKey 정보를 사용해 3자 입장에서 MQTT 메시지 송수신 테스트를 진행했지만, 더이상 해당 마스터 IAM 계정 정보를 사용하지 못하는 이슈 발생


2. 🟥 기능 구현 요청 내용 정리 : 

  >> IAM 계정 정보 없이 디바이스 기기와 MQTT 메시지 송수신 테스트 가능하게 기능 개발 요청

  >> MQTT 기능 테스트는 토픽 구독 Subscribe , 메시지 발생 Publish 동작이 되어야함

  >> 👉 현재 사용하고 있는 IAM 마스터 계정은 사용 중지 된 상태

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. 🟥 기존 AWS IAM 마스터 계정 AccessKey , SecretKey 정보를 사용해 AWS IoT Core MQTT 연결 수행 시 연결이 되지 않는 것 확인


2. 🟥 기존 AWS IAM 마스터 계정 정보를 사용해 앱 및 웹에서 모두 연결 실패 증상 확인

------------------------------------------------------------------------------






------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. 🟦 AWS IAM 계정을 사용해 AWS IoT Core 연결 및 MQTT 메시지 송수신 로직을 👉 프로비저닝을 통해 발급 받은 사물 인증서 정보를 사용해 연결하도록 로직 변경

  >> 👉 해당 로직 구현 시 앱은 정상 사용 가능하지만, 웹은 해당 방식으로 기능 사용이 불가능하므로 앱을 통해 테스트를 진행하도록 사전 공지 필요


2. 🟦 특정 사물에 생성 된 [하나의 사물 인증서] 로 다중 연결 가능 여부 정리

  >> AWS IoT Core 는 인증서를 기반으로 TLS 연결을 인증합니다.

  >> 👉 동일한 cert.pem / private.key 를 여러 클라이언트에서 사용하더라도 동시에 여러 MQTT connection 이 생성됩니다. (기술적으로 문제 없이 동작합니다 / Pub/Sub 도 테스트 가능)

  >> 👉 사용 시 주의점 : 

    - 각 클라이언트는 Client ID가 반드시 달라야 함

    - Client ID가 같으면 → 기존 연결이 끊기고 새 연결로 대체됨

    - 요약 표시 : 

      Client A -> clientId: device1
      Client B -> clientId: device2
      → ✅ OK (동시 연결 가능)

      Client A -> clientId: device1
      Client B -> clientId: device1
      → ❌ 기존 연결 끊김


3. 🟦 특정 사물에 생성 된 [다른 사물 인증서] 로 동시 연결 가능 여부 정리 : 

  >> 👉 같은 Thing 에 여러 인증서가 붙어 있어도 각 인증서로 동시에 여러 MQTT 연결이 가능하며, 서로 Pub/Sub 테스트도 문제없이 가능합니다.

    - Thing = 단순 logical entity

    - 실제 인증은 “인증서 기준” 으로 이루어짐

    - 구조 요약 : 

      Thing (논리적 디바이스)
        ├─ Cert A
        ├─ Cert B
        ├─ Cert C

  >> 👉 사용 시 주의점 : 

    - 각 클라이언트는 Client ID가 반드시 달라야 함

    - Client ID가 같으면 → 기존 연결이 끊기고 새 연결로 대체됨

    - 요약 표시 : 

      Cert A → ClientId: device-A
      Cert B → ClientId: device-B
      Cert C → ClientId: device-C
      → ✅ OK (동시 연결 가능)
      
      Cert A → clientId: test1
      Cert B → clientId: test1
      → ❌ 기존 연결 끊김

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------

▶️ [MQTT (Message Queueing Telemetry Transport) 통신 설명]

https://kkh0977.tistory.com/3631

https://blog.naver.com/kkh0977/222971771381?trackingCode=blog_bloghome_searchlist


▶️ [Aws Iot Core] Fleet provisioning 플릿 프로비저닝 수행 방법 정리 - 클레임 인증서 , 신뢰할 수 있는 사용자

https://kkh0977.tistory.com/7761

https://blog.naver.com/kkh0977/223779257161?trackingCode=blog_bloghome_searchlist


▶️ [Aws Iot Core] Aws 프로비저닝 수행 및 섀도우 Shadow 토픽 Topic 구독 시 와일드 카드 (wild card) 설명 정리

https://kkh0977.tistory.com/7902

https://blog.naver.com/kkh0977/223825295723?trackingCode=blog_bloghome_searchlist


▶️ [android] Aws Iot Core MQTT 연결 수행 후 Timer 타이머 사용해 주기적 connect 연결 상태 변경 및 해제 감지 로직

https://kkh0977.tistory.com/8330

https://blog.naver.com/kkh0977/224043610334?trackingCode=blog_bloghome_searchlist

------------------------------------------------------------------------------
 
728x90
반응형
Comments