내 AWS Lambda 함수를 다른 계정에서 Amazon Simple Notification Service(SNS) 주제에 구독하고 싶어요.
간단한 설명
Amazon SNS 콘솔을 사용하여 Amazon SNS 주제에 계정 간 AWS Lambda 구독을 추가합니다.
해결 방법
사전 요구 사항
시작하기 전에 다음 사항을 확인하십시오.
- Lambda 함수 리소스 정책이 SNS의 함수 호출을 허용합니다.
- SNS 주제 액세스 정책이 Lambda의 주제 구독을 허용합니다.
참고: SNS 주제는 계정 A에 있고 Lambda 함수는 계정 B에 있습니다.
계정 간 Lambda 함수 구독
계정 간 Lambda 함수를 SNS 주제에 구독하는 방법에는 두 가지가 있습니다.
- 계정 B의 Lambda 콘솔에서 SNS 트리거 추가
- 계정 B(Lambda 함수가 있는 계정)의 SNS 콘솔에서 Lambda 구독 추가
리소스 생성
계정 A에서SNS 주제 생성:
- Amazon SNS 콘솔을 연 다음, 왼쪽 패널에서 주제를 선택합니다.
- 주제 생성을 선택하고 **주제 유형)**을 선택한 다음, 주제 이름을 입력합니다.
- 아래로 스크롤 하여 주제 생성을 선택합니다.
계정 B가 주제에 대한 구독 작업을 수행할 수 있도록 허용합니다.
- 주제 액세스 정책을 편집하여 계정 B에 sns:Subscribe 권한을 부여합니다.
- 아래 표시된 정책 문을 추가하고 저장합니다.
{
"Sid": "Allow-AccountB-To-Subscribe",
"Effect": "Allow",
"Principal": {
"AWS": ""
},
"Action": "sns:Subscribe",
"Resource": ""
}
참고:****보안 주체의 경우, <AccountB> 을(를) Lambda 함수가 있는 사용자의 계정 번호로 교체하십시오. 리소스필드의 경우, <SNSTopicARN> 을(를) SNS 주제의 사용자 Amazon Resource Name(ARN)으로 교체하십시오.
계정 B에서 Lambda 함수를 생성합니다.
- AWS Lambda 콘솔에서 함수 페이지를 엽니다. 그런 다음, 함수 생성을 선택합니다.
- 함수 이름을 입력합니다.
- 실행 역할에서 기본 Lambda 권한으로 새 역할 생성을 선택합니다. Lambda는 Amazon CloudWatch에 로그를 업로드할 수 있는 권한을 함수에 부여하는 실행 역할을 생성합니다.
- 아래로 스크롤 하여 함수 생성 버튼을 선택합니다.
Lambda 콘솔에 트리거를 추가하여 Lambda 함수 구독(옵션 1)
- AWS Lambda 콘솔에서 함수 페이지를 열고 사용자가 이전에 생성한 함수를 선택합니다.
- 트리거 추가 버튼을 선택합니다.
- 트리거 구성 페이지의 드롭다운 목록에서 SNS를 선택합니다.
- SNS 주제 필드에 주제 ARN을 붙여넣습니다.
- 추가 버튼을 선택합니다.
이제 계정 A의 SNS 주제가 계정 B의 사용자 Lambda 함수를 호출할 수 있습니다.
구성 테스트
SNS 주제에 메시지를 게시하여 테스트합니다.
참고: Lambda 콘솔에서 트리거를 추가하면 Lambda는 Amazon SNS가 이 트리거에서 사용자의 Lambda 함수를 호출하는 데 필요한 권한을 자동으로 추가합니다.
SNS 콘솔에서 구독을 추가하여 Lambda 함수 구독(옵션 2)
이 옵션을 사용하려면 SNS 서비스 보안 주체에 lambda:InvokeFunction작업을 수행할 수 있는 권한을 명시적으로 부여해야 합니다.
SNS 서비스 주체가 Lambda 함수를 호출하도록 허용합니다.
Lambda 콘솔의 함수 페이지에서 사용자가 이전에 생성한 함수를 선택합니다. 그런 다음, 다음 단계를 완료하십시오.
- 구성 탭을 선택한 다음, 권한을 선택합니다.
- 아래로 스크롤하여 리소스 기반 정책 섹션으로 이동합니다. 그런 다음, 권한 추가 버튼을 선택합니다.
- AWS 서비스를 선택하고 드롭다운 목록에서 SNS를 선택합니다. 그런 다음, 필드를 채웁니다.
명령문 ID의 경우 AllowSNSToInvokeFunction 으로 설정합니다
소스 ARN의 경우 이전에 생성한 SNS 주제의 ARN을 붙여넣습니다.
작업에서 lambda:InvokeFunction을 선택합니다.
- 저장을 선택합니다.
- Lambda에 대한 SNS 구독을 생성합니다.
계정 B에서 Amazon SNS 콘솔을 엽니다.
- 왼쪽 패널에서 구독을 선택합니다.
- 구독 생성 버튼을 선택합니다.
- 주제 ARN 필드에 계정 A의 SNS 주제 ARN을 붙여넣습니다.
- 프로토콜 드롭다운 목록에서 AWS Lambda를 선택합니다.
- 엔드포인트 필드에 Lambda 함수의 ARN을 붙여넣습니다.
- 아래로 스크롤하여 구독 생성 버튼을 선택합니다.
**참고:**Lambda 함수(계정 B)가 있는 AWS 계정에서 사용자의 Lambda 함수를 SNS 주제에 구독해야 합니다. SNS 주제가 있는 계정(계정 A)에서 구독을 생성하려고 하면 다음 오류가 발생합니다.
Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX
관련 정보
Amazon Simple Notification Service로 AWS Lambda 사용
내 Amazon SNS 주제에 Lambda 함수를 구독하려고 할 때 권한 부여 오류가 발생하는 이유는 무엇인가요?