AWS IoT Policy 설정: 디바이스와 서버 간의 권한 제어
AWS IoT를 활용하여 IoT 디바이스와 서버 간의 통신을 구축할 때, 보안 정책을 적절히 설정하는 것은 필수적입니다. AWS IoT Policy는 MQTT, HTTP, WebSocket 등의 프로토콜을 통해 디바이스와 서버 간의 통신을 제어하며, 디바이스가 수행할 수 있는 작업을 제한할 수 있습니다. 본 포스팅에서는 AWS IoT Policy를 생성하고, ESP32 IDF를 사용하는 IoT 디바이스와 Python 기반의 AWS IoT 서버 간의 권한을 설정하는 방법을 설명합니다.
1. AWS IoT Policy란?
AWS IoT Policy는 AWS IoT Core에서 디바이스와 애플리케이션이 리소스에 접근할 수 있는 권한을 정의하는 JSON 기반의 정책 문서입니다. 이 정책을 통해 디바이스가 퍼블리싱(publish), 구독(subscribe), 연결(connect), 메시지 수신(receive) 등의 작업을 수행할 수 있도록 허용할 수 있습니다.
AWS IoT Policy는 AWS IAM Policy와 유사하지만, IoT 디바이스를 위한 특정 리소스 정책으로 동작합니다.
2. AWS IoT Policy 생성 및 설정
2.1 AWS IoT Policy 생성
AWS 콘솔에서 IoT 정책을 생성하려면 다음 단계를 따릅니다:
- AWS 콘솔에서
AWS IoT Core
로 이동합니다. - 좌측 메뉴에서
보안
→정책
을 선택합니다. 정책 생성
버튼을 클릭합니다.- 정책 이름을 입력하고, 아래 JSON 정책을 추가합니다.
다음은 IoT 디바이스가 특정 주제(topic)에 대한 publish
, subscribe
, connect
, receive
권한을 갖는 예제 정책입니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect",
"iot:Publish",
"iot:Subscribe",
"iot:Receive"
],
"Resource": "arn:aws:iot:us-east-1:123456789012:topic/my/topic"
}
]
}
정책 생성
버튼을 클릭하여 정책을 저장합니다.- 생성한 정책을 IoT Thing(디바이스)에 연결된 인증서에 적용합니다.
3. AWS IoT Device 코드 (ESP32 IDF)
ESP32를 사용하여 AWS IoT Core에 연결하고 데이터를 퍼블리싱하는 예제 코드를 작성합니다. AWS IoT Device SDK for Embedded C
를 이용하여 구현하며, Wi-Fi를 통해 AWS IoT Core에 접속하고 온도 데이터를 전송합니다.
3.1 ESP32 IDF 프로젝트 설정
ESP32에서 AWS IoT Core와 통신하려면 다음 라이브러리를 설치해야 합니다.
idf.py menuconfig
Wi-Fi SSID 및 비밀번호, AWS IoT 엔드포인트 및 인증서를 설정합니다.
3.2 ESP32 MQTT 코드 (온도 데이터 전송)
다음은 ESP32가 온도 데이터를 주기적으로 AWS IoT Core에 퍼블리싱하는 코드입니다.
#include <stdio.h>
#include "aws_iot_mqtt_client_interface.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#define AWS_IOT_ENDPOINT "a1b2c3d4e5f6g7.iot.us-east-1.amazonaws.com"
#define TOPIC "my/topic"
void publish_temperature(void *pvParameters) {
IoT_Error_t rc;
AWS_IoT_Client client;
char payload[50];
float temperature = 25.0;
aws_iot_mqtt_init(&client);
rc = aws_iot_mqtt_connect(&client, AWS_IOT_ENDPOINT);
if (rc != SUCCESS) {
ESP_LOGE("MQTT", "Connection failed: %d", rc);
vTaskDelete(NULL);
}
while (1) {
snprintf(payload, sizeof(payload), "{\"temperature\": %.2f}", temperature);
aws_iot_mqtt_publish(&client, TOPIC, payload);
ESP_LOGI("MQTT", "Published: %s", payload);
vTaskDelay(pdMS_TO_TICKS(5000));
}
}
void app_main() {
xTaskCreate(&publish_temperature, "publish_temperature", 4096, NULL, 5, NULL);
}
4. AWS IoT 서버 코드 (Python)
Python을 사용하여 AWS IoT Core에서 데이터를 구독(subscribe)하고, 수신된 온도 데이터가 정상 범위인지 확인하는 서버 코드를 작성합니다.
4.1 필요한 라이브러리 설치
Python에서 AWS IoT Core와 통신하려면 paho-mqtt
라이브러리를 설치해야 합니다.
pip install paho-mqtt
4.2 MQTT 구독 코드 (온도 모니터링)
다음 코드는 AWS IoT Core에서 온도 데이터를 구독하여, 특정 임계값을 초과하면 경고를 출력하는 Python 코드입니다.
import paho.mqtt.client as mqtt
import json
AWS_IOT_ENDPOINT = "a1b2c3d4e5f6g7.iot.us-east-1.amazonaws.com"
TOPIC = "my/topic"
# MQTT 메시지 수신 콜백 함수
def on_message(client, userdata, message):
payload = json.loads(message.payload.decode("utf-8"))
temperature = payload.get("temperature", 0)
print(f"Received Temperature: {temperature}")
if temperature > 30:
print("[ALERT] High Temperature Detected!")
# MQTT 클라이언트 설정
client = mqtt.Client()
client.on_message = on_message
client.connect(AWS_IOT_ENDPOINT, 8883)
client.subscribe(TOPIC)
print("Subscribed to topic.")
client.loop_forever()
5. 결론
이 포스팅에서는 AWS IoT Policy를 생성하고, ESP32 및 Python 서버가 AWS IoT Core와 안전하게 통신할 수 있도록 권한을 설정하는 방법을 설명하였습니다. AWS IoT Policy를 올바르게 구성하면 보안성이 강화되고, 디바이스가 불필요한 권한을 가지는 것을 방지할 수 있습니다.
ESP32에서 데이터를 퍼블리싱하고, Python 서버에서 이를 구독하여 온도를 모니터링하는 방식으로 IoT 시스템을 구현할 수 있습니다. 이와 같은 방식으로 AWS IoT를 활용한 다양한 IoT 애플리케이션을 개발할 수 있습니다.
'AWS IoT' 카테고리의 다른 글
AWS Lambda와 AWS DynamoDB를 활용한 데이터 저장 및 분석 (0) | 2025.04.01 |
---|---|
AWS IoT Rule Engine을 활용한 데이터 처리 (0) | 2025.03.31 |
AWS IoT 디바이스 자동 등록: Just-in-Time Provisioning과 Bulk Provisioning (0) | 2025.03.29 |
IoT Thing(디바이스) 등록 및 인증서 발급 방법: 개별 프로비저닝 vs 대량 프로비저닝 (Fleet Provisioning) (0) | 2025.03.28 |
AWS IoT Thing 등록 및 인증서 발급 방법: Provisioning 종류와 특징 (0) | 2025.03.27 |