AWS/PROJECT

Private Server에서 VPC Endpoint를 통해 IoT Core와 통신하기

2024. 5. 20. 16:30
728x90

 

아키텍처

본 작업의 아키텍처는 다음과 같습니다.

 

목표 : Private Subnet에 위치한 EC2와 IoT Core간의 통신을 VPC Endpoint를 사용하여 통신할 수 있도록 합니다.

Public Server의 경우 VPC 엔드포인트와 같은 리소스를 사용하지 않아도 다이렉트로 IoT Core와 연결될 수 있습니다.

Public Server

 

 

기본 환경 세팅

Network

리소스 IPv4 CIDR
VPC (vpc-iot-dev-test) 10.0.0.0/16
Public Subnet (sbn-iot-dev-pub-test) 10.0.0.0/24
Private Subnet (sbn-iot-dev-pri-test) 10.0.1.0/24
필요한 경우 인터넷 게이트웨이와 NAT 게이트웨이를 생성하여 라우팅 테이블에 연결합니다. EC2 내의 기본 세팅 및 작업을 위해 생성한 뒤 통신 테스트 시에 제거합니다.

 

EC2

세부 정보 설정 값
인스턴스 유형 t2.micro
가용영역 eu-central-1a
서브넷 Private Subnet (sbn-iot-dev-pri-test)
OS Amazon Linux 2023
EC2 인스턴스는 Bastion host를 이용하여 접속할 수 있습니다. 본 문서는 Session Manager를 이용해 EC2에 접속합니다.

 

 

VPC 엔드포인트

VPC 내에서 IoT 데이터 VPC 엔드포인트를 이용하여 VPC 내의 리소스에 접근할 수 있습니다.

 

VPC 엔드포인트 보안그룹

IoT 데이터 플레인 VPC 엔드포인트는 인터페이스 유형이기 때문에 보안그룹을 생성합니다.

MQTT 통신을 위해 VPC의 CIDR에서 8883 포트로의 TCP 통신을 허용합니다.

 

 

VPC 엔드포인트 생성

1. VPC 콘솔 > 엔드포인트 > [엔드포인트 생성] 선택

 

2. 서비스에서 com.amazonaws.[리전].iot.data를 선택합니다.

 

3. 사용할 VPC를 선택합니다. 추가 설정의 DNS 이름 활성화는 체크하지 않습니다.

 

4. 사용할 서브넷을 선택합니다. Private Subnet에 EC2가 생성되어 있으므로 Private Subnet을 선택합니다.

 

5. 위에서 생성한 VPC Endpoint용 보안그룹을 선택합니다.

 

6. 마지막으로 [엔드포인트 생성]을 선택하여 생성을 완료합니다. 사용 가능 상태가 될 때까지 잠시 기다립니다.

 

 

Route53 Private Hosted Zone

IoT Core Endpoint

1. IoT Core 엔드포인트를 다음 CLI 명령 또는 콘솔을 통해 확인합니다.

- AWS CLI
aws iot describe-endpoint --endpoint-type iot:Data-ATS

- AWS 콘솔
AWS IoT Core > 설정 > 디바이스 데이터 엔드포인트 정보에서 확인할 수 있습니다.

 

2. ###-ats.iot.[리전].amazonaws.com 형식의 엔드포인트를 얻을 수 있습니다.

 

Private 호스팅 영역 생성

1. Route53 콘솔로 이동하여 [호스팅 영역 생성]을 합니다.

 

2. 도메인 이름이 iot.[리전].amazonaws.com인 Private 호스팅 영역을 만듭니다.

 

3. 호스팅 영역과 연결할 VPC에서 사용할 리전과 VPC ID를 선택합니다.

 

 

레코드 생성

1. 생성한 호스팅 영역으로 접근한 뒤, [레코드 생성]을 선택합니다.

 

2. 다음과 같이 설정합니다.

레코드 이름 ###-ats.iot.eu-central-1.amazonaws.com IoT Core 엔드포인트를 설정합니다.
레코드 유형 A  
별칭 활성화  
트래픽 라우팅 대상 VPC 종단점에 대한 별칭  
리전 프랑크푸르트(eu-central-1)  
엔드포인트 vpce-xxx.data.iot.eu-central-1.vpce.amazonaws.com. VPC 엔드포인트가 AZ 정보를 포함하지 않는 이름을 사용합니다.

 

3. EC2에서 다음 명령을 통해 엔드포인트가 VPC의 Private IP 주소로 확인되는지 확인합니다.

dig +short ###-ats.iot.eu-central-1.amazonaws.com

VPC 엔드포인트가 적용되지 않았거나 Public 망을 통해 통신이 되는 경우 Public IP가 출력됩니다.

 

 

Pub/Sub 테스트

EC2에 인증서를 발급받아 IoT Core MQTT Client로 데이터를 Publish하고 Topic으로부터 메시지를 Subscribe를 해봅니다.

IoT 콘솔로부터 발급받은 인증서는 임시로 생성한 Bastion host 터널링을 통해 EC2로 옮길 수 있습니다.

 

Publish

EC2에서 sdk/test/python Topic에 메시지를 Publish 합니다.

 

AWS IoT Core MQTT 클라이언트에서 Topic을 구독하면 다음과 같이 메시지가 도착한 것을 확인할 수 있습니다.

 

Subscribe

AWS IoT Core MQTT 클라이언트에서 sdk/test/python이라는 Topic에 다음 메시지를 전송합니다.

 

다음과 같이 메시지가 도착한 것을 확인할 수 있습니다.

VPC 엔드포인트가 있으면 EC2에 보안그룹을 설정하지 않아도 IoT Core와 Pub/Sub이 가능합니다.

 

 

 

참고 문서

https://dev.classmethod.jp/articles/aws-iot-core-vpc-endpoint/

 

AWS IoT CoreにVPCエンドポイント経由でアクセスしてみた | DevelopersIO

AWS IoT CoreデータプレーンにはVPCエンドポイント経由でアクセスできます。通常のインターフェース型VPCエンドポイントと異なり、Route 53のプライベートホストゾーンで名前解決したり、エン

dev.classmethod.jp

 

728x90