기존 Amazon SES SMTP IAM 사용자의 액세스 키를 교체하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 5월 18일

AWS Identity and Access Management(IAM)에서 Amazon Simple Email Service(Amazon SES) 간이 전자 우편 전송 프로토콜(SMTP) 자격 증명을 교체하려고 합니다. Amazon SES와 호환되는 사용자 이름과 암호를 생성하려면 어떻게 해야 합니까?

해결 방법

SMTP 사용자를 위해 IAM 콘솔에서 생성하는 액세스 키는 고객이 SES API 엔드포인트에 연결하면 효과가 있지만, Amazon SES SMTP 인터페이스와는 함께 사용할 수 없습니다. IAM 콘솔에서 생성한 키는 Amazon SES SMTP 서버에 필요한 자격 증명과는 형식이 다릅니다.

가장 좋은 방법은 기존 보안 액세스 키를 변환하는 대신 새 Amazon SES SMTP 자격 증명을 생성하는 것입니다. 

Amazon SES SMTP 인터페이스에 대한 자격 증명을 설정하려면 다음 중 하나를 수행하세요.

새 Amazon SES SMTP 자격 증명 생성(권장 사항)

1.    Amazon SES 콘솔을 사용하여 새로운 Amazon SES SMTP 자격 증명을 생성합니다.

2.    새 자격 증명 받은 후 필요하지 않은 경우, IAM의 기존 Amazon SES 자격 증명을 삭제할 수 있습니다.

기존 보안 액세스 키를 Amazon SES SMTP 형식으로 변환

참고: Python 3 이상 버전을 사용하여 다음 단계를 수행해야 합니다.

1.    최소한 ses:SendRawEmail에 대한 권한을 부여하도록 기존 IAM 사용자의 정책을 업데이트합니다.

2.    다음 Python 코드를 텍스트 편집기에 붙여 넣은 다음 파일을 seskey.py로 저장합니다.

#!/usr/bin/env python3

import hmac
import hashlib
import base64
import argparse

SMTP_REGIONS = [
    'us-east-2',       # 미국 동부(오하이오)
    'us-east-1',       # 미국 동부(버지니아 북부)
    'us-west-2',       # 미국 서부(오레곤)
    'ap-south-1',      # 아시아 태평양(뭄바이)
    'ap-northeast-2',  # 아시아 태평양(서울)
    'ap-southeast-1',  # 아시아 태평양(싱가포르)
    'ap-southeast-2',  # 아시아 태평양(시드니)
    'ap-northeast-1',  # 아시아 태평양(도쿄)
    'ca-central-1',    # 캐나다(중부)
    'eu-central-1',    # EU(프랑크푸르트)
    'eu-west-1',       # EU(아일랜드)
    'eu-west-2',       # EU(런던)
    'sa-east-1',       # 남아메리카(상파울루)
    'us-gov-west-1',   # AWS GovCloud(미국)
]

# 이 값은 서명을 계산하는 데 필요합니다. 변경하지 마세요.
DATE = "11111111"
SERVICE = "ses"
MESSAGE = "SendRawEmail"
TERMINAL = "aws4_request"
VERSION = 0x04


def sign(key, msg):
    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()


def calculate_key(secret_access_key, region):
    if region not in SMTP_REGIONS:
        raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")

    signature = sign(("AWS4" + secret_access_key).encode('utf-8'), DATE)
    signature = sign(signature, region)
    signature = sign(signature, SERVICE)
    signature = sign(signature, TERMINAL)
    signature = sign(signature, MESSAGE)
    signature_and_version = bytes([VERSION]) + signature
    smtp_password = base64.b64encode(signature_and_version)
    return smtp_password.decode('utf-8')


def main():
    parser = argparse.ArgumentParser(
        description='Convert a Secret Access Key for an IAM user to an SMTP password.')
    parser.add_argument(
        'secret', help='The Secret Access Key to convert.')
    parser.add_argument(
        'region',
        help='The AWS Region where the SMTP password will be used.',
        choices=SMTP_REGIONS)
    args = parser.parse_args()
    print(calculate_key(args.secret, args.region))


if __name__ == '__main__':
    main()

3.    Python 스크립트를 실행하려면 기존 보안 액세스 키를 입력합니다. 그런 다음 공백을 두고 SMTP 암호를 사용할 AWS 리전을 입력합니다. 다음 명령을 사용합니다.

python3 seskey.py YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P us-east-1

중요: 자격 증명을 입력하고 안전하고 신뢰할 수 있는 컴퓨터에서 이 스크립트를 실행해야 합니다.

4.    스크립트가 Amazon SES에서 사용할 수 있는 새 보안 액세스 키를 출력합니다. 생성된 SMTP 자격 증명을 애플리케이션에 저장한 다음, SES SMTP 엔드포인트에 연결할 때 해당 자격 증명을 사용합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?