SNS 주제를 사용하여 계정 간 AWS Lambda 구독을 설정하려면 어떻게 해야 하나요?

3분 분량
0

내 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 주제 생성:

  1. Amazon SNS 콘솔을 연 다음, 왼쪽 패널에서 **Topics(주제)**를 선택하세요.
  2. **Create topic(주제 생성)**을 선택하고 **Topic type(주제 유형)**을 선택한 다음, **Topic name(주제 이름)**을 입력하세요.
  3. 아래로 스크롤 하여**Create Topic(주제 생성)**을 선택하세요.

계정 B가 주제에 대한 구독 작업을 수행할 수 있도록 허용하세요.

  1. 주제 액세스 정책을 편집하여 계정 B에 sns:Subscribe권한을 부여하세요.
  2. 아래 표시된 정책 설명문을 추가하고 **Save(저장)**하세요.
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

**참고:****Principal(주체)**의 경우, <AccountB> Lambda 함수가 있는 사용자의 계정 번호로 교체하세요. **Resource(자원)**필드의 경우, <SNSTopicARN> SNS 주제의 사용자 Amazon Resource Name(ARN)으로 교체하세요.

계정 B에서Lambda 함수를 생성하세요.

  1. AWS Lambda 콘솔에서**Function(함수)**페이지를 여세요.그런 다음, **Create function(함수 생성)**을 선택하세요.
  2. **Function name(함수 이름)**을 입력하세요.
  3. **Execution role(실행 역할)**에서 **Create a new role with basic Lambda permissions(기본 Lambda 권한으로 새 역할 생성)**를 선택하세요. Lambda는 Amazon CloudWatch에 로그를 업로드할 수 있는 권한을 함수에 부여하는 실행 역할을 생성합니다.
  4. 아래로 스크롤 하여 **Create function(함수 생성)**버튼을 선택하세요.

Lambda 콘솔에 트리거를 추가하여 Lambda 함수 구독(옵션 1)

  1. AWS Lambda 콘솔에서 **Function(함수)**페이지를 열고 사용자가 이전에 생성한 함수를 선택합니다.
  2. **Add Trigger(트리거 추가)**버튼을 선택하세요.
  3. 트리거 구성 페이지의 드롭다운 목록에서 SNS를 선택합니다.
  4. SNS Topic 필드에 주제 ARN을 붙여 넣으세요.
  5. **Add(추가)**버튼을 선택하세요.

이제 계정 A의 SNS 주제가 계정 B의 사용자 Lambda 함수를 호출할 수 있습니다.

구성 테스트

SNS 주제에 메시지를 게시하여 테스트하세요.
참고: Lambda 콘솔에서 트리거를 추가하면, Lambda는 Amazon SNS가 이 트리거에서 사용자의 Lambda 함수를 호출하는 데 필요한 권한을 자동으로 추가합니다.

SNS 콘솔에서 구독을 추가하여 Lambda 함수 구독(옵션 2)

이 옵션을 사용하려면, SNS 서비스 주체에 lambda:InvokeFunction작업을 수행할 수 있는 권한을 명시적으로 부여해야 합니다.

SNS 서비스 주체가 Lambda 함수를 호출하도록 허용하세요.

Lambda 콘솔의 Functions page(함수 페이지)에서 사용자가 이전에 생성한 함수를 선택하세요. 그런 다음, 다음 단계를 완료하세요.

  1. Configuration(구성) 탭을 선택한 다음, **Permissions(권한)**를 선택하세요.
  2. 아래로 스크롤 하여 **Resource-based policy(자원 기반 정책)**섹션으로 이동합니다. 그런 다음, **Add Permissions(권한 추가)**버튼을 선택하세요.
  3. AWS Service를 선택하고 드롭다운 목록에서SNS를 선택하세요. 그런 다음, 필드를 채웁니다.
    **Statement ID(명령문 ID)**의 경우, AllowSNSToInvokeFunction(SNS가 함수를 호출하도록 허용) 으로 설정하세요 **Source ARN(소스 ARN)**의 경우, 이전에 생성한 SNS 주제의 ARN을 붙여 넣으세요
    **Action(작업)**에서 lambda:InvokeFunction을 선택하세요
  4. **Save(저장)**를 선택하세요.
  5. Lambda에 대한 SNS 구독을 생성하세요.

계정 B에서 Amazon SNS 콘솔을 여세요.

  1. 왼쪽 패널에서 **Subscriptions(구독) **를 선택하세요.
  2. **Create Subscription(구독 생성)**버튼을 선택하세요.
  3. 계정 A의 SNS 주제 ARN을 Topic ARN필드에 붙여 넣으세요.
  4. Protocol드롭다운 목록에서AWS Lambda를 선택하세요.
  5. Lambda 함수의 ARN을 Endpoint필드에 붙여 넣으세요
  6. 아래로 스크롤 하여 **Create subscription(구독 생성)**버튼을 선택하세요.

**참고:**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 함수를 구독하려고 할 때 권한 부여 오류가 발생하는 이유는 무엇인가요?

AWS 공식
AWS 공식업데이트됨 일 년 전