AWS IoT

AWS IoT Thing 등록 및 인증서 발급 방법: Provisioning 종류와 특징

임베디드 친구 2025. 3. 27. 10:34
728x90
반응형

AWS IoT Thing 등록 및 인증서 발급 방법: Provisioning 종류와 특징

AWS IoT에서 디바이스를 등록하고 인증서를 발급하는 과정은 보안과 운영 효율성을 고려하여 다양한 방식으로 제공됩니다. 이를 통칭하여 provisioning이라 하며, 적절한 방식으로 디바이스를 프로비저닝해야 원활한 IoT 운영이 가능합니다. 이번 포스팅에서는 AWS IoT에서 제공하는 provisioning 방식의 종류와 특징 및 절차를 설명하겠습니다.

1. AWS IoT Provisioning 방식 개요

AWS IoT에서 디바이스를 등록하고 인증서를 발급하는 provisioning 방식은 다음과 같이 구분됩니다.

Provisioning 방식 특징 절차
JITR (Just-In-Time Registration) 디바이스가 처음 연결될 때 자동으로 등록됨 1. 사전 인증서를 디바이스에 탑재 2. AWS IoT 정책 및 역할 설정 3. 디바이스가 AWS IoT에 처음 연결 시 자동 등록
JITP (Just-In-Time Provisioning) JITR과 유사하지만 추가 정책 및 사전 템플릿 필요 1. 등록 템플릿 설정 2. CA 인증서 등록 3. 디바이스가 연결될 때 자동 등록 및 정책 적용
Fleet Provisioning 대량 디바이스 등록에 적합 1. Provisioning 템플릿 생성 2. 디바이스에서 요청 전송 3. AWS IoT에서 자동으로 Thing 및 인증서 생성
Bulk Registration 미리 정의된 데이터셋을 사용하여 여러 디바이스 등록 1. CSV 파일을 생성하여 사전 정의된 디바이스 목록 준비 2. AWS CLI 또는 API를 사용하여 대량 등록
One-by-One Provisioning 개별 디바이스를 수동으로 등록 1. AWS 콘솔 또는 CLI에서 개별 Thing 생성 2. 인증서 발급 및 정책 적용 3. 디바이스에 인증서 설치 후 연결

이제 각 방식에 대한 상세한 구현 방법을 알아보겠습니다.


2. JITR (Just-In-Time Registration)

JITR 방식은 미리 발급된 인증서를 이용하여 처음 AWS IoT에 연결될 때 자동으로 Thing을 생성하고 인증서를 활성화하는 방식입니다.

절차

  1. 디바이스 제조 시 사전 인증서를 탑재
  2. AWS IoT에 CA 인증서 등록 및 활성화
  3. 디바이스가 AWS IoT에 연결 시 자동으로 Thing이 생성됨
  4. Lambda 함수를 이용하여 필요한 추가 정책을 적용

ESP32 예제 코드 (ESP-IDF & AWS IoT SDK)

// ESP32 AWS IoT JITR Example
#include "aws_iot_mqtt.h"
#include "aws_iot_config.h"

void app_main() {
    IoT_Error_t rc = FAILURE;
    AWS_IoT_Client client;

    rc = aws_iot_mqtt_init(&client, &mqttInitParams);
    if (rc != SUCCESS) {
        printf("MQTT Init failed\n");
        return;
    }

    rc = aws_iot_mqtt_connect(&client, &connectParams);
    if (rc == SUCCESS) {
        printf("Connected to AWS IoT\n");
    }
}

3. JITP (Just-In-Time Provisioning)

JITP는 JITR과 유사하지만, 추가적으로 등록 템플릿을 사전에 정의해야 한다는 차이점이 있습니다.

절차

  1. AWS IoT에 CA 인증서 등록 및 JITP 활성화
  2. Provisioning 템플릿을 생성하고 등록
  3. 디바이스가 AWS IoT에 연결될 때 자동으로 Thing이 생성되고 정책이 적용됨

AWS IoT 서버 예제 (Python)

import boto3

iot_client = boto3.client('iot')

def create_provisioning_template():
    response = iot_client.create_provisioning_template(
        templateName='JITP_Template',
        templateBody='''{
            "Parameters": {
                "ThingName": {"Type": "String"}
            },
            "Resources": {
                "thing": {
                    "Type": "AWS::IoT::Thing",
                    "Properties": {
                        "ThingName": {"Ref": "ThingName"}
                    }
                }
            }
        }''',
    )
    print("Provisioning Template Created:", response)

create_provisioning_template()

4. Fleet Provisioning

Fleet Provisioning은 수천 개 이상의 디바이스를 자동으로 등록할 때 사용하는 방식입니다.

절차

  1. Fleet Provisioning 템플릿 생성
  2. 디바이스에서 AWS IoT에 인증 요청을 보냄
  3. AWS IoT에서 자동으로 Thing 및 인증서를 발급하고, 정책을 적용

ESP32 예제 코드

// AWS IoT Fleet Provisioning Example for ESP32
void fleet_provisioning() {
    IoT_Error_t rc;
    char json_payload[] = "{\"serialNumber\": \"12345\"}";
    rc = aws_iot_mqtt_publish(&client, "$aws/provisioning-templates/FleetProvisioningTemplate", json_payload, strlen(json_payload), 1);
    if (rc == SUCCESS) {
        printf("Provisioning request sent\n");
    }
}

5. Bulk Registration

Bulk Registration은 사전에 준비된 데이터셋을 활용하여 다수의 디바이스를 한 번에 등록하는 방식입니다.

절차

  1. CSV 파일로 디바이스 정보 정리
  2. AWS CLI 또는 API를 사용하여 대량 등록 수행
  3. AWS IoT에서 인증서 및 정책을 자동 적용

AWS IoT 서버 예제 (Python)

import boto3

iot_client = boto3.client('iot')

def bulk_register_things():
    response = iot_client.start_thing_registration_task(
        templateBody='''{
            "Parameters": {
                "ThingName": {"Type": "String"}
            }
        }''',
        inputFileBucket='my-bucket',
        inputFileKey='device_list.csv',
    )
    print("Bulk registration started:", response)

bulk_register_things()

6. One-by-One Provisioning

One-by-One Provisioning은 개별 디바이스를 직접 등록하는 방식으로, 디바이스 수가 적거나 관리가 필요한 특정 디바이스에 적합합니다.

절차

  1. AWS IoT 콘솔 또는 CLI를 사용하여 개별 Thing을 생성
  2. 각 Thing에 대한 인증서를 발급 및 다운로드
  3. 인증서를 디바이스에 설치
  4. 디바이스에서 AWS IoT에 연결

AWS IoT 서버 예제 (Python)

import boto3

iot_client = boto3.client('iot')

def create_thing(thing_name):
    response = iot_client.create_thing(
        thingName=thing_name
    )
    print("Thing Created:", response)

def create_keys_and_certificate():
    response = iot_client.create_keys_and_certificate(setAsActive=True)
    print("Certificate Created:", response)
    return response

thing_name = "MyIoTDevice"
create_thing(thing_name)
cert_info = create_keys_and_certificate()

7. 결론

AWS IoT에서 제공하는 다양한 provisioning 방식은 디바이스 수와 운영 방식에 따라 선택할 수 있습니다.

  • 소량의 디바이스는 One-by-One Provisioning 또는 JITR/JITP 방식이 적합
  • 대량의 디바이스는 Fleet Provisioning이나 Bulk Registration이 효과적

디바이스 등록 방식을 적절히 활용하여 AWS IoT 환경을 효율적으로 구축하시기 바랍니다.

728x90
반응형