Amazon SNS 토픽에 이메일 구독을 생성했으나, 구독이 반복적으로 취소(Unsubscribed)되는 현상을 해결하고 싶습니다.
Short Description
Amazon SNS에서 이메일 구독이 의도치 않게 취소되는 현상은 주로 다음과 같은 원인으로 발생합니다:
- 이메일 보안 솔루션(스팸 필터, 링크 스캐너 등)이 SNS 알림 이메일 내의 "Unsubscribe" 링크를 자동으로 클릭하여 구독이 취소되는 경우
- 이메일 수신자가 실수로 Unsubscribe 링크를 클릭한 경우
특히 기업 환경에서는 이메일 보안 솔루션이 수신 이메일의 모든 링크를 사전 검사(pre-fetch/pre-click)하는 경우가 많으며, 이 과정에서 Unsubscribe 링크가 자동으로 호출되어 구독이 취소됩니다.
이 문제를 해결하기 위해 Amazon SNS 콘솔에서 인증 기반 구독 취소(Authenticated Unsubscribe) 모드로 구독을 생성할 수 있습니다. 이 모드를 사용하면 구독 취소 시 AWS 자격 증명을 통한 인증이 필요하므로, 이메일 내 링크 클릭만으로는 구독이 취소되지 않습니다.
중요: 기존 구독을 인증이 필요한 구독으로 변경하려면, 기존 구독을 먼저 삭제(구독 취소)한 후 아래 절차에 따라 새 구독을 생성해야 합니다.
Resolution
사전 조건
- Amazon SNS 토픽이 이미 생성되어 있어야 합니다.
- SNS 토픽에 대한
sns:Subscribe 권한이 있는 IAM 사용자 또는 역할이 필요합니다.
- 구독할 이메일 주소에 접근할 수 있어야 합니다 (구독 확인 이메일 수신 필요).
- 새 구독을 확인하고 설정을 완료하려면 구독 확인 이메일 메시지에 대한 액세스 권한이 있어야 합니다.
참고: 토픽에 대한 메일링 리스트를 구독하는 경우, 먼저 메일링 리스트에 이메일 주소를 추가하여 구독 확인 이메일을 수신할 수 있도록 하십시오.
1단계: 기존 구독 삭제
기존에 인증 없이 생성된 구독이 있다면 먼저 삭제합니다.
구독이 아직 활성(Confirmed) 상태인 경우:
- Amazon SNS 콘솔에 로그인합니다.
- 왼쪽 탐색 창에서 "구독(Subscriptions)"을 선택합니다.
- 삭제할 구독을 선택하고 "삭제(Delete)"를 선택합니다.
구독이 이미 취소(Unsubscribed)된 경우:
구독이 이미 취소된 상태라면, 해당 구독은 콘솔에서 바로 삭제할 수 없을 수 있습니다. 이 경우 다음 두 가지 방법 중 하나를 사용합니다:
- 방법 A: 구독 취소 시 수신된 Unsubscribe 확인 이메일에 포함된 "click here to resubscribe" 링크를 클릭하여 재구독을 생성한 뒤, SNS 콘솔에서 해당 구독을 삭제합니다.
- 방법 B: 약 48시간을 대기하면 취소된 구독이 SNS에서 자동으로 삭제됩니다. 삭제가 완료된 후 2단계부터 진행합니다.
2단계: 새 이메일 구독 생성
- Amazon SNS 콘솔의 왼쪽 탐색 창에서 "구독(Subscriptions)"을 선택합니다.
- "구독 생성(Create subscription)"을 선택합니다.
- 다음과 같이 설정합니다:
- 토픽 ARN: 구독할 SNS 토픽의 ARN을 선택합니다.
- 프로토콜:
이메일(Email)을 선택합니다.
- 엔드포인트: 구독할 이메일 주소를 입력합니다.
- "구독 생성(Create subscription)"을 선택합니다.

3단계: 구독 확인 이메일에서 URL 복사
- 이메일에서 AWS 알림의 구독 확인 메시지를 찾습니다. 발신자는 보통
no-reply@sns.amazonaws.com입니다.
중요: 구독 확인 이메일에 있는 "Confirm subscription" 링크를 직접 클릭하지 마십시오. 링크를 직접 클릭하면 인증 없이 구독이 확인되어, 이후 이메일 내 Unsubscribe 링크로도 구독 취소가 가능해집니다.
- 구독 확인 링크를 마우스 오른쪽 버튼으로 클릭하고 링크 주소 복사를 선택합니다.
주의: 링크를 클릭하여 브라우저에서 접속하면 안 됩니다. 링크에 직접 접속하면 인증 없이 구독이 확인되어 AuthenticateOnUnsubscribe가 false로 설정됩니다. 반드시 "링크 주소 복사"로 URL만 복사하세요.(마우스 우 클릭 - 링크 복사)

4단계: SNS 콘솔에서 구독 확인 (인증 모드)
- Amazon SNS 콘솔의 왼쪽 탐색 창에서 "구독(Subscriptions)"을 선택합니다.
- 구독 목록에서 상태가 "확인 보류 중(Pending confirmation)"인 구독을 선택합니다.
- "구독 확인(Confirm subscription)"을 선택합니다.
- 구독 확인 대화 상자에서 3단계에서 복사한 구독 확인 URL을 붙여넣습니다.
- "구독 확인(Confirm subscription)"을 선택합니다.

이 방식으로 구독을 확인하면 AuthenticateOnUnsubscribe가 자동으로 true로 설정됩니다. 이후 이메일 내 Unsubscribe 링크를 클릭해도 구독이 취소되지 않습니다.
5단계: 동작 확인
- 구독 상태가 "확인됨(Confirmed)"으로 변경되었는지 확인합니다.
구독 취소 인증이 활성화된 상태에서:
- 이메일 내 Unsubscribe 링크를 클릭하면 구독 취소가 거부됩니다.
- 구독을 취소하려면 AWS 콘솔에서 해당 구독을 선택하고 **삭제(Delete)**를 선택해야 합니다.

주의사항
- 구독 확인 이메일의 링크를 직접 클릭하면 인증 없는 구독으로 생성됩니다. 반드시 SNS 콘솔의 "구독 확인" 기능을 통해 URL을 붙여넣는 방식으로 확인해야 합니다.
- 구독 확인 이메일이 스팸함으로 분류될 수 있으므로, 발신자 주소
no-reply@sns.amazonaws.com을 허용 목록에 추가하는 것을 권장합니다.
- 인증 기반 구독 취소를 활성화하면 이메일 수신자가 직접 구독을 취소할 수 없습니다. 구독 관리는 AWS 콘솔 또는 API를 통해서만 가능합니다.
- 이메일 보안 솔루션이 확인(Confirmation) 링크도 자동 클릭하는 경우가 있으므로, 보안 팀에 SNS 관련 도메인(
sns.amazonaws.com)의 링크 스캔 예외 처리를 요청하는 것도 고려하세요.
- 구독 확인 이메일은 48시간 내에 확인하지 않으면 자동 삭제됩니다.
Related Information
[1] 설명서 > Amazon SNS > 이메일 알림 구독 : https://docs.aws.amazon.com/ko_kr/sns/latest/dg/sns-email-notifications.html
[2] 설명서 > Amazon SNS > ConfirmSubscription API : https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html
[3] 설명서 > Amazon SNS > 보안 모범 사례 : https://docs.aws.amazon.com/ko_kr/sns/latest/dg/sns-security-best-practices.html