MQTT · 2025-12-23

AWS IoT Core에 MQTT 기기 연결 방법

AWS IoT Core에 MQTT 기기를 안전하게 연결하는 단계별 절차와 인증 설정을 초보자도 이해하기 쉬운 설명으로 정리한 설정

작성일 : 2025-12-23 ㆍ 작성자 : 관리자
post
목차

개요

AWS IoT Core에 MQTT 기기를 연결하면 디바이스와 클라우드 간에 경량 메시지 교환이 가능하다. 이 문서에서는 AWS IoT Core의 기본 구성, 인증서 발급·정책 적용, 그리고 TLS 기반 MQTT 클라이언트 연결 과정을 단계별로 설명한다. 초보자도 따라할 수 있도록 콘솔과 AWS CLI, Python 예제를 함께 제시한다.

사전 준비

  • AWS 계정과 관리자 권한 또는 IoT 리소스 생성 권한
  • AWS CLI 설치 및 구성(aws configure)
  • Python 3 및 paho-mqtt 설치: pip install paho-mqtt
  • 루트 CA 파일(예: Amazon Root CA 1) 다운로드

기본 개념 정리

MQTT는 토픽 기반의 경량 프로토콜이다. AWS IoT Core는 디바이스 인증에 X.509 인증서를 사용한다. 정책(Policy)을 통해 허용되는 작업과 리소스를 제어한다. 안전한 연결을 위해 TLS가 필수이며, 클라이언트는 자신의 인증서와 개인키를 사용해 서버에 인증한다.

절차 요약

  • 1) Thing 생성
  • 2) 인증서 및 키 생성
  • 3) 정책(Policy) 생성 및 인증서에 연결
  • 4) Thing에 인증서 연결
  • 5) 엔드포인트 확인
  • 6) MQTT 클라이언트로 TLS 연결 및 퍼블리시/서브스크라이브

1. Thing 생성

콘솔에서 IoT Core → Manage → Things → Create 를 통해 Thing을 만든다. 간단한 이름을 지정하면 된다. 콘솔 대신 AWS CLI로 Thing을 생성할 수도 있다.

AWS CLI로 Thing 생성 예

aws iot create-thing --thing-name <THING_NAME>

2. 인증서 및 키 발급

AWS IoT는 자체 발급 API를 통해 인증서와 키를 생성할 수 있다. 로컬에서 CSR로 발급받아 업로드할 수도 있지만, 여기서는 간단히 AWS에서 키와 인증서를 생성하는 방법을 사용한다.

AWS CLI로 인증서 생성

aws iot create-keys-and-certificate --set-as-active \
  --certificate-pem-outfile certificate.pem.crt \
  --public-key-outfile public.key \
  --private-key-outfile private.key

3. 정책 생성 및 인증서에 연결

정책은 디바이스가 수행할 수 있는 작업을 정의한다. 최소 권한 원칙에 따라 필요한 작업만 허용한다. 예시 정책은 MQTT publish/subscribe/receive/connect를 허용한다.

예제 정책(JSON)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect",
        "iot:Publish",
        "iot:Subscribe",
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:<REGION>:<ACCOUNT_ID>:client/*",
        "arn:aws:iot:<REGION>:<ACCOUNT_ID>:topic/*",
        "arn:aws:iot:<REGION>:<ACCOUNT_ID>:topicfilter/*"
      ]
    }
  ]
}

정책 생성 및 인증서에 연결 CLI 예

aws iot create-policy --policy-name MyIotPolicy --policy-document file://policy.json
aws iot attach-policy --policy-name MyIotPolicy --target <CERT_ARN>

4. 인증서와 Thing 연결

인증서를 Thing에 연결하면 관리가 편해진다. 콘솔에서 Thing 상세화면에서 인증서를 연결하거나 CLI를 사용한다.

CLI로 연결 예

aws iot attach-thing-principal --thing-name <THING_NAME> --principal <CERT_ARN>

5. 엔드포인트 확인

디바이스는 AWS IoT의 커스텀 엔드포인트에 연결해야 한다. 엔드포인트는 리전에 따라 다르다.

엔드포인트 조회

aws iot describe-endpoint --endpoint-type iot:Data-ATS
# 반환된 endpoint를 사용하여 클라이언트 연결

6. MQTT 클라이언트 연결 (Python 예)

아래 예제는 paho-mqtt를 사용한 TLS 연결 예시다. 루트 CA, 개인키, 클라이언트 인증서를 지정한다. 엔드포인트와 포트(8883)를 사용한다.

import ssl
import time
import paho.mqtt.client as mqtt

ENDPOINT = "<YOUR_ENDPOINT>"
PORT = 8883
CLIENT_ID = "myDevice"
TOPIC = "test/topic"
CA_PATH = "AmazonRootCA1.pem"
CERT_PATH = "certificate.pem.crt"
KEY_PATH = "private.key"

def on_connect(client, userdata, flags, rc):
    print("connected rc=", rc)
    client.subscribe(TOPIC)

def on_message(client, userdata, msg):
    print(msg.topic, msg.payload)

client = mqtt.Client(client_id=CLIENT_ID)
client.on_connect = on_connect
client.on_message = on_message

client.tls_set(ca_certs=CA_PATH,
               certfile=CERT_PATH,
               keyfile=KEY_PATH,
               tls_version=ssl.PROTOCOL_TLSv1_2)

client.connect(ENDPOINT, PORT)
client.loop_start()

# publish 예
client.publish(TOPIC, payload='{"temperature":25}')

time.sleep(2)
client.loop_stop()
client.disconnect()

문제 해결 팁

  • TLS 핸드셰이크 실패: CA 파일 또는 인증서/키 경로를 확인
  • 403 에러: 정책에 필요한 권한이 포함되어 있는지 확인
  • 엔드포인트 오류: describe-endpoint 결과의 정확한 호스트명을 사용
  • 시간 동기화 문제: 디바이스 시간이 크게 어긋나면 TLS 인증서 검증 실패

보안 권장사항

  • 인증서와 개인키는 안전하게 보관하고 필요 시 교체
  • 정책은 최소 권한으로 구성
  • 장기간 미사용 인증서는 비활성화

정리

요약하면, AWS IoT Core에 MQTT 기기를 연결하려면 Thing 생성, 인증서 발급, 정책 연결, 엔드포인트 확인, 그리고 TLS 기반 MQTT 클라이언트 구성이 필요하다. 위 절차를 따르면 aws iot mqtt 연결과 aws mqtt 인증 설정을 안정적으로 완료할 수 있다.

aws iot mqtt 연결 aws iot core mqtt 튜토리얼 aws mqtt 인증 설정 aws iot core mqtt 연결 paho-mqtt iot 보안 aws cli iot