내용으로 건너뛰기

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 콘솔을 연 다음, 왼쪽 패널에서 주제를 선택합니다.
  2. 주제 생성을 선택하고 **주제 유형)**을 선택한 다음, 주제 이름을 입력합니다.
  3. 아래로 스크롤 하여 주제 생성을 선택합니다.

계정 B가 주제에 대한 구독 작업을 수행할 수 있도록 허용합니다.

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

참고:****보안 주체의 경우, <AccountB> 을(를) Lambda 함수가 있는 사용자의 계정 번호로 교체하십시오. 리소스필드의 경우, <SNSTopicARN> 을(를) SNS 주제의 사용자 Amazon Resource Name(ARN)으로 교체하십시오.

계정 B에서 Lambda 함수를 생성합니다.

  1. AWS Lambda 콘솔에서 함수 페이지를 엽니다. 그런 다음, 함수 생성을 선택합니다.
  2. 함수 이름을 입력합니다.
  3. 실행 역할에서 기본 Lambda 권한으로 새 역할 생성을 선택합니다. Lambda는 Amazon CloudWatch에 로그를 업로드할 수 있는 권한을 함수에 부여하는 실행 역할을 생성합니다.
  4. 아래로 스크롤 하여 함수 생성 버튼을 선택합니다.

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

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

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

구성 테스트

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

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

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

SNS 서비스 주체가 Lambda 함수를 호출하도록 허용합니다.

Lambda 콘솔의 함수 페이지에서 사용자가 이전에 생성한 함수를 선택합니다. 그런 다음, 다음 단계를 완료하십시오.

  1. 구성 탭을 선택한 다음, 권한을 선택합니다.
  2. 아래로 스크롤하여 리소스 기반 정책 섹션으로 이동합니다. 그런 다음, 권한 추가 버튼을 선택합니다.
  3. AWS 서비스를 선택하고 드롭다운 목록에서 SNS를 선택합니다. 그런 다음, 필드를 채웁니다.
    명령문 ID의 경우 AllowSNSToInvokeFunction 으로 설정합니다 소스 ARN의 경우 이전에 생성한 SNS 주제의 ARN을 붙여넣습니다.
    작업에서 lambda:InvokeFunction을 선택합니다.
  4. 저장을 선택합니다.
  5. Lambda에 대한 SNS 구독을 생성합니다.

계정 B에서 Amazon SNS 콘솔을 엽니다.

  1. 왼쪽 패널에서 구독을 선택합니다.
  2. 구독 생성 버튼을 선택합니다.
  3. 주제 ARN 필드에 계정 A의 SNS 주제 ARN을 붙여넣습니다.
  4. 프로토콜 드롭다운 목록에서 AWS Lambda를 선택합니다.
  5. 엔드포인트 필드에 Lambda 함수의 ARN을 붙여넣습니다.
  6. 아래로 스크롤하여 구독 생성 버튼을 선택합니다.

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