EC2(AL2023)에서 SES(AWS Simple Email Service) 상태 확인 및 테스트 이메일 발송
험난하도다 서비스 런칭의 과정.. 이메일 쪽 테스트 중...
1. AWS 자격 증명 설정하기
EC2 인스턴스에서 SES를 사용하려면 권한이 필요하다.
AWS CLI로 aws configure 직접 설정도 가능하지만 나는 IAM 역할 설정을 이용했음
- AWS 콘솔에서 IAM 역할 생성:
사용 사례로 "EC2" 선택
"AmazonSESFullAccess" 권한 정책 연결
역할 이름 지정 (예: EC2-SES-Role) - EC2 인스턴스에 IAM 역할 연결:
EC2 콘솔에서 인스턴스 선택
작업 → 보안 → IAM 역할 수정
생성한 역할 선택 후 저장 - IAM 역할 연결 확인
# IMDSv2 토큰 발급
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
# 메타데이터에서 IAM 정보 확인
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/info
여기서 저 IP 주소가 뭔고 싶을텐데 저 주소는 AWS EC2 인스턴스 메타데이터 서비스(IMDS)의 특수 주소로 가상주소라고 함..
모든 EC2 인스턴스 내부에서만 접근할 수 있음
그리고 토큰 발급은 왜하냐면 예전에는 그냥
이렇게만 쳐도 메타데이터가 나왔는데 최근에는 AWS에서 보안 강화를 위해 IMDSv2를 사용하도록 권장한다고 함..
그래서 토큰 발급받은 뒤에 넣고 확인해야됨..
암튼 그렇게 정보를 확인해보면,
{
"Code" : "Success",
"LastUpdated" : "2025-04-01T08:40:21Z",
"InstanceProfileArn" : "arn:aws:iam::XXXXXXXXXXXX:instance-profile/EC2_SES_ROLE",
"InstanceProfileId" : "XXXXXXXXXXXXXXXXXX"
}
이런식으로 출력된다.. 민감정보는 내가 X처리함..
2. SES 서비스 상태 확인
# SES 할당량 확인
aws ses get-send-quota
# {
# "Max24HourSend": 50000.0, // 24시간 동안 최대 전송 가능한 이메일 수
# "MaxSendRate": 14.0, // 초당 최대 전송 속도
# "SentLast24Hours": 10.0 // 지난 24시간 동안 전송한 이메일 수
# }
# 검증된 이메일 주소 확인
aws ses list-identities --identity-type EmailAddress
검증된 이메일 주소가 안나올 경우엔,,
3. 이메일 주소 검증하기
# 발신자 이메일 주소 검증 요청
aws ses verify-email-identity --email-address your-email@example.com
내가 샘플로 your-email@example.com라고 적어뒀지만..
검증할 이메일 주소를 저기에 넣고 실행하면 AWS에서 검증 메일을 발송해줌.. 그러면 메일에 포함된 링크를 클릭하면 검증이 된다!
그러고 나면
# 검증된 이메일 주소 확인
aws ses list-identities --identity-type EmailAddress
# {
# "Identities": [
# "your-email@example.com"
# ]
# }
이렇게 검증된 이메일 주소 목록이 나온다!
4. 테스트 이메일 발송하기
aws ses send-email \
--from verified-email@example.com \
--destination "ToAddresses=recipient@example.com" \
--message "Subject={Data=테스트 메일,Charset=UTF-8},Body={Text={Data=SES에서 보낸 테스트 메일입니다.,Charset=UTF-8}}"
이렇게.. from에는 방금 검증된 이메일을 넣고 destination에는 테스트 이메일을 받아볼 주소를 적어주면 된다.
근데 이거는.. 샌드박스 모드가 해제되어 있지않으면 수신자 이메일도 검증된 이메일이어야만 테스트가 가능하다.
프로덕션으로 서비스 올릴려면 반드시 샌드박스 모드가 해제되어야 하니까 꼭 잊지 말고 요청하기!
샌드박스모드란?
AWS SES(Simple Email Service)의 초기 제한 상태로, 새로운 SES 계정이 스팸 발송을 방지하고 이메일 서비스의 품질을 보호하기 위해 기본적으로 적용되는 제한적인 환경