[AWS] IoT Rule을 사용해서 MSK에 data stream 하기

Joney의 SW 공부 블로그·2023년 7월 17일
0

AWS MSK

목록 보기
4/4

개요

IoT 디바이스가 AWS IoT Core로 데이터를 전송하는 경우, 데이터를 MSK에 라우팅하기 위해, IoT rule을 설정할 필요가 있다.

설정 방법

Secret Manager 설정

  • AWS console > KMS에 접속하여 키 생성
    • 키 유형 : 대칭
    • 키 사용 : 암호화 및 해독
  • AWS console > Secret Manager 에서 "새 보안 암호 저장"
    • 보안 암호 유형 : 다른 유형의 보안 암호
    • 키/값 페어 > 일반 텍스트
      • {"username": "admin","password": "msk-admin"}
    • 암호화 키 : 위의 KMS에서 만든 key 선택
    • 자동 교체 구성 : 비활성화

MSK Cluster 설정

  • 액세스 제어 방법

    • SASL/SCRAM 인증 : 활성화
  • SASL/SCRAM 인증의 "보안 암호 연결"

  • 보안 암호 선택


IAM 설정

  • 신뢰 관계
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • 정책

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "arn:aws:secretsmanager:{region}:secret:*"
            ]
        }
    ]
}
  • KMS에서 생성한 키의 사용자에 해당 IAM 역할 추가

대상 설정

  • AWS console > IoT Core > 메시지 라우팅 > 대상 "대상 생성"
    • VPC 대상 생성 선택
    • MSK Cluster가 생성되어 있는 VPC 선택
    • MSK cluster가 생성된 subnet 선택
    • MSK cluster 보안그룹 선택
    • 위에서 설정한 IAM 역할 선택

Rule 생성

  • 규칙 이름 설정
    • 규칙이 생성된 뒤, 규칙 이름에 따라 Basic Ingest이 정해지므로, iot core에 데이터를 전송하는 topic 설계에 따라 이름 설정 필요
  • SQL 문
SELECT
    *,
    parse_time("yyyy-MM-dd'T'HH:mm:ss", timestamp()) as received_time // 디버그용 Timestamp
FROM
    'aws/rules/msk'
  • 규칙 작업
    • Apache Kafka Cluster 선택
    • VPC 대상 : 위에서 생성한 대상(MSK가 배포된 VPC) 선택
    • Kafka 주제 : 브로커로 전송할 topic (MSK client에서 생성한 topic)
    • 키, 파티션은 설정 안함
  • 클라이언트 속성
    • bootstrap.servers : SASK/SCRAM의 엔드포인트 입력
      • MSK Cluster Client 속성에서 SASL/SCRAM의 엔드포인트 가져오기
    • SSL 구성
      • security.protocol을 SASL_SSL 선택
      • sasl.mechanism은 SCRAM-SHA-512로 선택
      • sasl.scram을 각각 아래와 같이 작성
${get_secret('{보안 암호 이름}', 'SecretString', 'username', 'arn:aws:iam::{계정 번호}:role/{생성한 IAM}')}
${get_secret('{보안 암호 이름}', 'SecretString', 'password', 'arn:aws:iam::{계정 번호}:role/{생성한 IAM}')}
profile
SW 지식 노트 블로그

0개의 댓글