기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon VPC에서 Amazon SNS 메시지 게시
이 섹션에서는 프라이빗 네트워크에서 메시지를 안전하게 유지하면서 Amazon SNS 주제에 게시하는 방법을 설명합니다. Amazon Virtual Private Cloud(Amazon VPC)에서 호스팅되는 Amazon EC2 인스턴스에서 메시지를 게시합니다. 이 메시지는 퍼블릭 인터넷으로 이동하지 않고 AWS 네트워크 내에 머물러 있습니다. VPC에서 메시지를 비공개로 게시하면 애플리케이션과 Amazon SNS 간 트래픽의 보안을 강화할 수 있습니다. 이 보안은 고객에 관한 개인 식별 정보(PII)를 게시할 때 또는 애플리케이션에 시장 규정이 적용될 때 중요합니다. 예를 들어 미국 건강 보험 이전 및 책임법(HIPAA)을 준수해야 하는 의료 서비스 시스템이나 지불 카드 산업 데이터 보안 표준(PCI DSS)을 준수해야 하는 금융 시스템을 보유한 경우 비공개로 게시하는 것이 도움이 됩니다.
일반적인 단계는 다음과 같습니다.
-
AWS CloudFormation 템플릿을 사용하여 AWS 계정에서 임시 프라이빗 네트워크를 자동으로 생성합니다.
-
VPC를 Amazon SNS와 연결하는 VPC 엔드포인트를 생성합니다.
-
Amazon EC2 인스턴스에 로그인하여 Amazon SNS 주제에 메시지를 비공개로 게시합니다.
-
메시지가 성공적으로 전송되었는지 확인합니다.
-
이 프로세스에서 생성한 리소스를 삭제하여 AWS 계정에 남아 있지 않게 합니다.
아래 다이어그램은 이 단계들을 완료하면 AWS 계정에 생성되는 프라이빗 네트워크를 나타낸 것입니다.
이 네트워크는 Amazon EC2 인스턴스를 포함하는 VPC로 구성됩니다. 인스턴스는 인터페이스 VPC 엔드포인트를 통해 Amazon SNS에 연결합니다. 이러한 엔드포인트 유형은 AWS PrivateLink에서 제공하는 서비스에 연결됩니다. 이 연결이 설정되면 네트워크가 퍼블릭 인터넷에서 연결이 끊어져 있더라도 Amazon EC2 인스턴스에 로그인하여 Amazon SNS 주제에 메시지를 게시할 수 있습니다. 해당 주제는 수신한 메시지를 두 가지 구독 AWS Lambda 함수로 분산합니다. 이 두 함수는 수신한 메시지를 Amazon CloudWatch Logs에 로그합니다.
이 단계를 완료하는 데 약 20분 정도 소요됩니다.
시작하기 전에
시작하기 전에 Amazon Web Services(AWS) 계정에 로그인합니다. 가입하면 AWS에서 Amazon SNS 및 Amazon VPC를 포함한 모든 서비스에 계정이 자동으로 등록됩니다. 계정을 아직 만들지 않은 경우 https://aws.amazon.com/
1단계: Amazon EC2 키 페어 생성
키 페어는 Amazon EC2 인스턴스에 로그인하는 데 사용됩니다. 키 페어는 로그인 정보 암호화에 사용되는 퍼블릭 키와 로그인 정보 암호화 해제에 사용되는 프라이빗 키로 구성됩니다. 키 페어를 생성할 때 프라이빗 키의 사본을 다운로드합니다. 이후에 키 페어는 Amazon EC2 인스턴스에 로그인하는 데 사용됩니다. 로그인하려면 키 페어의 이름을 지정하고 프라이빗 키를 제공해야 합니다.
키 페어를 생성하려면
AWS Management Console에 로그인하고 https://console.aws.amazon.com/ec2/
에서 Amazon EC2 콘솔을 엽니다. -
왼쪽의 탐색 메뉴에서 Network & Security 섹션을 찾습니다. 그다음에 키 페어를 선택합니다.
-
키 페어 생성(Create Key Pair)을 선택합니다.
-
Create Key Pair(키 페어 생성) 창에서 Key pair name(키 페어 이름)에
VPCE-Tutorial-KeyPair
를 입력합니다. 그다음에 생성을 선택합니다. -
브라우저에서 프라이빗 키 파일이 자동으로 다운로드됩니다. 안전한 장소에 저장합니다. Amazon EC2는 파일에
.pem
확장자를 부여합니다. -
(선택 사항) Mac 또는 Linux 컴퓨터에서 SSH 클라이언트를 사용하여 인스턴스에 연결하는 경우 사용자만 프라이빗 키 파일을 읽을 수 있도록 다음과 같이
chmod
명령으로 프라이빗 키에 대한 권한을 설정합니다.-
다음과 같이 터미널을 열고 프라이빗 키가 포함된 디렉터리로 이동합니다.
$
cd /
filepath_to_private_key
/ -
다음 명령을 사용하여 권한을 설정합니다.
$
chmod 400 VPCE-Tutorial-KeyPair.pem
-
2단계: AWS 리소스 생성
인프라를 설정하려면 AWS CloudFormation 템플릿을 사용하세요. 템플릿은 Amazon EC2 인스턴스 및 Amazon SNS 주제와 같은 AWS 리소스를 구축하기 위한 블루프린트 역할을 수행하는 파일입니다. 이 프로세스는 템플릿은 GitHub에서 다운로드할 수 있습니다.
사용자는 AWS CloudFormation에 템플릿을 제공하고 AWS CloudFormation에서는 AWS 계정에 스택으로 필요한 리소스를 프로비저닝합니다. 스택이란 사용자가 하나의 단위로 관리하는 리소스 모음입니다. 이 단계를 완료한 후 AWS CloudFormation을 사용하여 스택에 있는 모든 리소스를 한 번에 삭제할 수 있습니다. 이 리소스는 사용자가 원하지 않는 한 AWS 계정에 남아 있지 않습니다.
이 프로세스에서 사용할 스택으로 다음과 같은 리소스가 있습니다.
-
VPC 및 이에 연결된 네트워킹 리소스(예: 서브넷, 보안 그룹, 인터넷 게이트웨이, 라우팅 테이블)
-
VPC의 서브넷으로 시작되는 Amazon EC2 인스턴스.
-
Amazon SNS 주제.
-
두 가지 AWS Lambda 함수. 이러한 함수는 Amazon SNS 주제에 게시되는 메시지를 수신하고 CloudWatch Logs에서 이벤트를 로그합니다.
-
Amazon CloudWatch 지표 및 로그.
-
Amazon EC2 인스턴스가 Amazon SNS를 사용하도록 허용하는 IAM 역할과 Lambda 함수가 CloudWatch 로그에 쓸 수 있도록 허용하는 IAM 역할.
AWS 리소스를 생성하려면
-
GitHub 웹 사이트에서 템플릿 파일
을 다운로드합니다. -
AWS CloudFormation 콘솔
에 로그인합니다. -
스택 생성을 선택합니다.
-
템플릿 선택 페이지에서 Amazon S3에 템플릿 업로드를 선택하고 파일을 선택한 후 다음을 선택합니다.
-
다음과 같이 세부 정보 지정 페이지에서 스택과 키 이름을 지정합니다.
-
스택 이름에는
VPCE-Tutorial-Stack
을 입력합니다. -
KeyName에서 VPCE-Tutorial-KeyPair를 선택합니다.
-
SSHLocation에서 기본값
0.0.0.0/0
을 그대로 둡니다. -
다음을 선택합니다.
-
-
옵션 페이지에서 모든 기본값을 그대로 두고 다음을 선택합니다.
-
검토 페이지에서 스택 세부 정보를 확인합니다.
-
기능에서 AWS CloudFormation이 사용자 지정 이름으로 IAM 리소스를 생성할 수 있음을 인정합니다.
-
Create를 선택합니다.
AWS CloudFormation 콘솔에서 Stacks(스택) 페이지를 엽니다. VPCE-Tutorial-Stack은 CREATE_IN_PROGRESS 상태입니다. 몇 분 후 생성 프로세스가 완료되면 상태가 CREATE_COMPLETE으로 바뀝니다.
작은 정보
Refresh(새로 고침) 버튼을 선택하여 최신 스택 상태를 확인합니다.
3단계: Amazon EC2 인스턴스에 인터넷 액세스 권한이 없는지 확인
이전 단계에서 VPC로 시작된 Amazon EC2 인스턴스에 인터넷 액세스 권한이 없습니다. 발신 트래픽을 허용하지 않고 Amazon SNS에 메시지를 게시할 수 없습니다. 인스턴스에 로그인하여 이를 확인합니다. 그런 다음 퍼블릭 엔드포인트에 연결을 시도하고 Amazon SNS에 메시지를 게시해 보세요.
이 시점에서는 게시 시도가 실패합니다. 나중 단계에서 Amazon SNS용 VPC 엔드포인트를 생성하고 나면 게시 시도가 성공합니다.
Amazon EC2 인스턴스에 연결하려면
-
https://console.aws.amazon.com/ec2/
에서 Amazon EC2 콘솔을 엽니다. -
왼쪽의 탐색 메뉴에서 인스턴스 섹션을 찾습니다. 그런 다음 인스턴스를 선택합니다.
-
인스턴스 목록에서 VPCE-Tutorial-EC2Instance를 선택합니다.
-
퍼블릭 DNS(IPv4) 열에 있는 호스트 이름을 복사합니다.
-
터미널을 엽니다. 키 페어가 포함된 디렉터리에서 다음 명령을 사용하여 인스턴스에 연결합니다. 여기에서
instance-hostname
은 Amazon EC2 콘솔에서 복사한 호스트 이름입니다.$
ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@
instance-hostname
인스턴스가 인터넷에 연결되어 있지 않음을 확인하려면
-
다음과 같이 터미널에서 amazon.com과 같은 퍼블릭 엔드포인트에 연결을 시도합니다.
$
ping amazon.com
연결 시도가 실패하므로 언제든지 취소할 수 있습니다(Windows에서는 Ctrl + C, macOS에서는 Command + C).
인스턴스가 Amazon SNS에 연결되어 있지 않음을 확인하려면
-
Amazon SNS 콘솔
에 로그인합니다. -
왼쪽의 탐색 메뉴에서 주제를 선택합니다.
-
주제 페이지에서 VPCE-Tutorial-Topic이라는 주제의 Amazon 리소스 이름(ARN)을 복사합니다.
-
다음과 같이 터미널에서 주제에 메시지를 게시해 보세요.
$
aws sns publish --region
aws-region
--topic-arnsns-topic-arn
--message "Hello"게시 시도가 실패하므로 언제든지 취소할 수 있습니다.
4단계: Amazon SNS용 Amazon VPC 엔드포인트 생성
VPC를 Amazon SNS에 연결하려면 인터페이스 VPC 엔드포인트를 정의하세요. 엔드포인트를 추가한 후에는 VPC의 Amazon EC2 인스턴스에 로그인할 수 있으며 이 인스턴스에서 Amazon SNS API를 사용할 수 있습니다. 주제에 메시지를 게시할 수 있습니다. 메시지는 비공개로 게시됩니다. 메시지는 AWS 네트워크 내에 머물러 있고 퍼블릭 인터넷으로 이동하지 않습니다.
참고
인스턴스에는 여전히 다른 AWS 서비스 및 인터넷 상의 엔드포인트에 액세스할 수 있는 권한이 없습니다.
엔드포인트를 생성하려면
-
https://console.aws.amazon.com/vpc/
에서 Amazon VPC 콘솔을 엽니다. -
왼쪽의 탐색 메뉴에서 엔드포인트를 선택합니다.
-
엔드포인트 생성을 선택합니다.
-
엔드포인트 생성 페이지의 서비스 범주에서 기본 선택인 AWS 서비스를 그대로 둡니다.
-
서비스 이름에서 Amazon SNS의 서비스 이름을 선택합니다.
서비스 이름은 선택한 리전에 따라 달라집니다. 예를 들어 미국 동부(버지니아 북부)를 선택한 경우 서비스 이름은 com.amazonaws.
us-east-1
.sns입니다. -
VPC에서 이름이 VPCE-Tutorial-VPC인 VPC를 선택합니다.
-
서브넷에서 서브넷 ID에 VPCE-Tutorial-Subnet이 있는 서브넷을 선택합니다.
-
프라이빗 DNS 이름 활성화에서 이 엔드포인트에 대해 활성화를 선택합니다.
-
보안 그룹에서 Select security group(보안 그룹 선택)을 선택하고 VPCE-Tutorial-SecurityGroup을 선택합니다.
-
엔드포인트 생성을 선택합니다. Amazon VPC 콘솔은 VPC 엔드포인트가 생성되었음을 확인합니다.
-
닫기를 선택합니다.
Amazon VPC 콘솔에서 엔드포인트 페이지가 열립니다. 새 엔드포인트의 상태는 대기 중입니다. 몇 분 후 생성 프로세스가 완료되면 상태가 사용 가능으로 바뀝니다.
5단계: Amazon SNS 주제에 메시지 게시
이제 VPC에 Amazon SNS용 엔드포인트가 포함되므로 Amazon EC2 인스턴스에 로그인하여 주제에 메시지를 게시할 수 있습니다.
메시지를 게시하려면
-
터미널이 Amazon EC2 인스턴스에 연결되어 있지 않으면 다음과 같이 다시 연결합니다.
$
ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@
instance-hostname
-
Amazon SNS 주제에 메시지를 게시하기 위해 앞서 사용한 명령을 실행합니다. 이번에는 다음과 같이 게시 시도가 성공하고 Amazon SNS는 메시지 ID를 반환합니다.
$
aws sns publish --region
aws-region
--topic-arnsns-topic-arn
--message "Hello"{ "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de" }
6단계: 메시지 전송 확인
Amazon SNS 주제는 메시지를 수신하면 두 가지 구독 Lambda 함수로 전송하여 메시지를 분산합니다. 이 함수는 메시지를 받으면 이 이벤트를 CloudWatch 로그에 로그합니다. 메시지 전송이 성공했는지 확인하려면 함수가 호출되었는지 확인한 후 CloudWatch 로그가 업데이트되었는지 확인합니다.
Lambda 함수가 호출되었는지 확인하려면
-
https://console.aws.amazon.com/lambda/
에서 AWS Lambda 콘솔을 엽니다. -
함수 페이지에서 VPCE-Tutorial-Lambda-1을 선택합니다.
-
모니터링을 선택합니다.
-
호출 횟수 그래프를 확인합니다. 이 그래프에서는 Lambda 함수가 실행된 횟수를 보여줍니다.
호출 횟수는 메시지를 주제에 게시한 횟수와 일치합니다.
CloudWatch 로그가 업데이트되었는지 확인하려면
-
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
왼쪽 탐색 메뉴에서 로그를 선택합니다.
-
다음 방법으로 Lambda 함수가 쓴 로그를 확인합니다.
-
/aws/lambda/VPCE-Tutorial-Lambda-1/ 로그 그룹을 선택합니다.
-
로그 스트림을 선택합니다.
-
로그에
From SNS: Hello
항목이 포함되어 있는지 확인합니다. -
콘솔 상단의 로그 그룹을 선택하여 로그 그룹페이지를 표시합니다. 그런 다음 /aws/lambda/VPCE-Tutorial-Lambda-2/ 로그 그룹에 대해 앞서 수행한 단계를 반복합니다.
-
축하합니다! Amazon SNS용 엔드포인트를 VPC에 추가하는 방식으로 VPC에서 관리하는 네트워크에서 주제에 메시지를 게시할 수 있었습니다. 메시지는 비공개로 게시되어 퍼블릭 인터넷에 노출되지 않았습니다.
7단계: 정리
생성한 리소스를 보관하고 싶지 않으면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.
먼저 Amazon VPC 콘솔을 사용하여 VPC 엔드포인트를 삭제합니다. 그 다음에 AWS CloudFormation 콘솔에서 스택을 삭제하여 이미 생성한 다른 리소스를 삭제합니다. 스택을 삭제할 때 AWS CloudFormation은 AWS 계정에서 스택의 리소스를 제거합니다.
VPC 엔드포인트를 삭제하려면
-
https://console.aws.amazon.com/vpc/
에서 Amazon VPC 콘솔을 엽니다. -
왼쪽의 탐색 메뉴에서 엔드포인트를 선택합니다.
-
생성한 엔드포인트를 선택합니다.
-
작업을 선택한 다음 엔드포인트 삭제를 선택합니다.
-
엔드포인트 삭제 창에서 예, 삭제를 선택합니다.
그러면 엔드포인트 상태가 삭제 중으로 변경됩니다. 삭제가 완료되면 페이지에서 해당 엔드포인트가 제거됩니다.
AWS CloudFormation 스택을 삭제하려면
-
https://console.aws.amazon.com/cloudformation
에서 AWS CloudFormation 콘솔을 엽니다. -
VPCE-Tutorial-Stack 스택을 선택합니다.
-
[Actions]를 선택한 다음 [Delete Stack]을 선택합니다.
-
스택 삭제 창에서 예, 삭제를 선택합니다.
그러면 스택 상태가 DELETE_IN_PROGRESS로 변경됩니다. 삭제가 완료되면 페이지에서 해당 스택이 페이지에서 제거됩니다.
관련 리소스
자세한 정보는 다음 리소스를 참조하세요.