안녕하세요. 마이크로서비스나 서버리스 애플리케이션에서 메시지 게시/구독을 담당하는 Amazon SNS(Simple Notification Service) 주제(Topic)를 생성하고, 이를 외부 애플리케이션(ex. Spring Boot, Node.js 등)에서 안전하게 접근할 수 있도록 IAM 사용자를 생성하여 액세스 키를 발급하는 과정까지 순서대로 살펴보겠습니다.
Amazon SNS
1. Amazon SNS (Simple Notification Service) 란?
Amazon SNS는 AWS에서 제공하는 완전관리형 Pub/Sub(발행/구독) 메시징 서비스입니다.
애플리케이션끼리 직접 데이터를 주고받으면 시스템 구조가 복잡해지고, 하나의 시스템이 고장 나면 전체가 영향을 받습니다. SNS는 이를 해결하기 위해 중간에서 메시지를 중개해 주는 역할을 합니다.
# 주제(Topic)
- Topic은 메시지가 모이는 ‘채널’이자 ‘게시판’입니다.
- 게시자(Publisher): Topic에 메시지를 보냅니다. (ex. 회원가입 완료 이벤트 발행)
- 구독자(Subscriber): 해당 주제를 구독하고 있다가, 메시지가 올라오면 자동으로 전달받습니다. (ex. 이메일 발송 시스템, SMS 알림 서비스, AWS Lambda 등)
- 특징: 하나의 주제에 여러 구독자를 붙일 수 있어서, 메시지 한 번으로 여러 시스템에 동시에 알림을 보내는 1:N 구조(Fan-out)가 가능합니다.
2. Amazon SNS 주제(Topic) 생성하기
Amazon SNS는 메시지 기반의 Pub/Sub 서비스입니다. 먼저 메시지가 드나들 통로인 '주제'를 만들어 보겠습니다.
1) SNS 콘솔 접속 및 주제 메뉴 이동
- AWS 콘솔에서 Amazon SNS 서비스로 이동합니다.
- 왼쪽 사이드바 메뉴에서 [주제]를 클릭합니다.
https://ap-northeast-2.console.aws.amazon.com/sns/v3/home?region=ap-northeast-2#/homepage

2) 주제 생성 시작
- 주제 화면으로 이동한 후, 우측 상단 또는 중앙의 [주제 생성] 버튼을 클릭합니다.

3) 세부 정보 설정
- 유형 선택: 대다수의 일반적인 메시징 아키텍처나 다중 프로토콜(SMS, 이메일, Lambda, HTTP 등) 전송이 필요하다면 [표준(Standard)] 타입을 선택합니다. (순서 보장이 엄격하게 필요하다면 FIFO 선택)
- 이름 입력: 주제의 이름을 입력합니다. (ex. TestTopic)
- 설정을 마쳤다면 하단의 [주제 생성]을 클릭합니다.

4) 생성 완료 및 ARN 확인
- 주제가 성공적으로 생성되면 초록색 알림창과 함께 상세 정보가 표시됩니다.
- 이때 애플리케이션 연동 시 사용될 고유 주소인 ARN(Amazon Resource Name)을 복사하여 별도로 기록해 둡니다.

AWS IAM
1. AWS IAM (Identity and Access Management) 이란?
IAM은 AWS 리소스에 대한 인증(Authentication)과 권한 부여(Authorization)를 안전하게 제어하는 서비스입니다. 쉽게 말해 "누가(Who) 어떤 AWS 리소스에(What) 접근할 수 있는가"를 정의하는 보안 요새입니다.
AWS를 처음 만들면 모든 권한을 가진 '루트 계정'이 생성되지만, 보안상 실제 개발이나 서비스 연동에는 루트 계정을 사용하지 않습니다. 대신 IAM을 통해 필요한 권한만 가진 가상 계정을 만들어 사용합니다.
# 개념
- IAM 사용자 (User): AWS와 상호작용하는 사람 또는 애플리케이션 계정입니다. (ex. 백엔드 서버 연동용 계정 board-user)
- 액세스 키 (Access Key ID / Secret Access Key): 콘솔 로그인이 아닌, 소스코드나 API를 통해 AWS에 접속할 때 사용하는 아이디와 비밀번호입니다.
- 정책 (Policy): "이 계정은 SNS에 메시지를 보낼 수만 있어", "S3 버킷에서 파일을 읽을 수만 있어"와 같이 권한을 JSON 형태로 명시한 문서입니다.
2. SNS와 IAM을 같이 쓰는 이유
Spring Boot 같은 백엔드 애플리케이션에서 AWS SNS로 알림 메시지를 보내려면(Publish), AWS 입장에서는 "이 서버가 우리 SNS 채널에 메시지를 보낼 자격이 있는 인증된 서버인가?"를 확인해야 합니다.
- IAM을 통해 board-user라는 애플리케이션 전용 계정을 만들고, SNS 메시지 게시 권한(AmazonSNSFullAccess 등)을 부여합니다.
- 이 계정의 액세스 키(Access Key)를 발급받아 백엔드 소스코드 환경 설정에 입력합니다.
- 애플리케이션은 이 키를 사용해 AWS 인증을 통과한 뒤, 지정된 SNS Topic ARN으로 안전하게 메시지를 보냅니다.
( IAM을 사용할 때는 항상 최소 권한의 원칙을 지켜야 합니다. 만약 외부 연동용 액세스 키가 탈취되더라도, 해당 키에 SNS 권한만 들어있다면 다른 AWS 리소스(DB나 서버 등)를 보호할 수 있기 때문입니다. )
3. IAM 사용자 생성 및 자격 증명 발급하기
외부 애플리케이션에서 방금 만든 SNS에 메시지를 보내려면(Publish), 적절한 권한을 가진 AWS 계정의 자격 증명(Access Key)이 필요합니다. 루트 계정을 쓰는 것은 보안상 위험하므로 전용 IAM 사용자를 만들겠습니다.
https://us-east-1.console.aws.amazon.com/iam/home?redirectFrom=iamv2®ion=us-east-1#/users
1) IAM 사용자 메뉴 이동
- AWS 콘솔에서 IAM(Identity and Access Management) 서비스로 이동합니다.
- 왼쪽 [액세스 관리] 메뉴에서 [IAM 사용자]를 선택한 뒤, 우측 상단의 [사용자 생성]을 클릭합니다.

2) 사용자 세부 정보 및 권한 설정
- 사용자 이름: 생성할 사용자명을 입력합니다. (ex. board-user)
- 콘솔 로그인 권한은 비활성화한 채로 다음으로 넘어갑니다.
- 권한 설정: 해당 사용자에게 SNS 권한을 부여합니다. AmazonSNSFullAccess 등의 정책을 직접 연결합니다.


3) 검토 및 생성 완료
- 설정한 권한 요약과 사용자 정보를 최종 확인하고 하단의 [사용자 생성]을 클릭하여 생성을 완료합니다.

4. 액세스 키(Access Key) 발급받기
프로그래밍 방식(API, CLI 등)으로 AWS에 접근하기 위한 키를 생성하는 마지막 단계입니다.
1) 액세스 키 만들기 메뉴 진입
- 생성된 board-user 상세 페이지로 이동합니다.
- 우측의 [액세스 키 만들기] 링크를 클릭합니다.

2) 설명 태그 설정 (선택 사항)
- 이 액세스 키의 용도를 파악하기 쉽게 설명 태그 값을 입력하고 [액세스 키 만들기]를 진행합니다.

3) 액세스 키 저장 및 확인
- 생성이 완료되면 화면에 액세스 키 ID(Access Key ID)와 비밀 액세스 키(Secret Access Key)가 발급됩니다.
- 주의: 비밀 액세스 키는 이 시점 이후로 다시는 확인할 수 없으므로, 반드시 .csv 파일로 다운로드하거나 안전한 곳에 복사해 두어야 합니다!

이제 외부 애플리케이션 환경 설정(Properties 혹은 .env 파일)에 방금 발급받은 Access Key, Secret Key를 넣고, SNS ARN 주소를 이용해 코드로 메시지를 주고받을 준비가 끝났습니다. 다음 포스팅에서는 실제 애플리케이션 코드를 통해 SNS 메시지를 게시(Publish)하는 예제를 다뤄보겠습니다.
AWS SNS 연동 및 Webhook.site 활용 실전 메시지 발송 테스트
[Spring Boot] AWS SNS 연동 및 Webhook.site 활용 실전 메시지 발송 테스트
안녕하세요. 지난 포스팅에서 AWS 콘솔을 통해 SNS 주제를 만들고 IAM 자격 증명을 발급받았는데요.[AWS] Amazon SNS 주제 생성 및 IAM 사용자 액세스 키 발급 가이드 [AWS] Amazon SNS 주제 생성 및 IAM 사용자
0206cho.tistory.com
