교차 계정 Amazon SQS 엔드포인트를 Amazon SNS 주제에 맞게 구성하려면 어떻게 해야 하나요?

4분 분량
0

계정 A의 Amazon SQS 대기열을 계정 B의 Amazon SNS 주제에 구독하고 싶습니다.

간략한 설명

Amazon Simple Notification Service(SNS) 주제에서 주제 소유자로 구독을 생성하거나 Amazon Simple Queue Service(Amazon SQS) 대기열에서 대기열 소유자로 구독을 생성할 수 있습니다. 후자의 경우 대기열에서 Amazon SNS 주제에 메시지를 보낼 수 있도록 허용하는 적절한 권한이 Amazon SQS 대기열에 있어야 합니다.

해결 방법

사전 요구 사항

계정 B의 SNS 주제 액세스 정책에 적절한 권한이 있는지 확인하세요. 이를 통해 계정 A의 SQS 대기열에서 SNS 주제를 구독할 수 있습니다.

대기열 소유자로 구독하기

대기열 소유자는 다음 단계에 따라 계정 A의 SQS 대기열을 계정 B의 SNS 주제에 구독할 수 있습니다.

  1. AWS Management Console에 로그인하고 계정 A의 Amazon SQS 콘솔로 이동합니다.
  2. 대기열을 선택하고 SQS 대기열을 선택합니다.
  3. SNS 구독 섹션에서 Amazon SNS 주제 구독을 선택합니다.
  4. 드롭다운 목록에서 주제 선택을 선택합니다. 그런 다음 Amazon SNS 주제 ARN 입력을 선택합니다.
  5. Amazon SQS 대기열 텍스트 필드에 알림을 보낼 수 있는 Amazon SNS 주제에 SNS 주제 ARN을 입력합니다.
  6. 저장을 선택합니다.
  7. AWS Management Console에 로그인하고 계정 B의 Amazon SNS 콘솔로 이동합니다.
  8. 주제을 클릭하고 SNS 주제를 선택합니다.
  9. 구독 섹션 아래에서 계정 B의 SNS 주제에 구독이 완료되었는지 확인합니다.

주제 소유자로 구독하기

주제 소유자는 다음 단계에 따라 다른 계정에서 SQS 대기열을 구독할 수 있습니다.

계정 B의 액세스 정책 수정

  1. AWS Management Console에 로그인하고 계정 B의 Amazon SNS 콘솔로 이동합니다
  2. 주제을 클릭하고 SNS 주제를 선택합니다.
  3. 페이지 오른쪽 상단에서 편집을 선택합니다.
  4. 액세스 정책 - 옵션 섹션을 확장합니다. 다음 액세스 정책을 복사해 JSON 편집기 섹션에 붙여넣습니다. (AWS 계정과 SNS 주제 ARN을 내게 맞는 값으로 바꾸세요.) 그 후 하단에서 변경 사항 저장을 선택합니다.
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": "sns:Subscribe",
      "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic"
    }
  ]
}

계정 A의 SQS 대기열 수정

  1. AWS Management Console에 로그인하고 계정 A의 Amazon SQS 콘솔로 이동합니다.
  2. 대기열을 선택하고 SQS 대기열을 선택합니다.
  3. 페이지 오른쪽 상단에서 편집을 선택합니다.
  4. 액세스 정책 섹션으로 이동합니다. 다음 액세스 정책을 복사해 JSON 편집기에 붙여 넣습니다. (SQS 대기열 ARN과 SNS 주제 ARN을 내게 맞는 값으로 바꿔야 합니다.)
{
  "Sid": "Stmt1234",
  "Effect": "Allow",
  "Principal": "*",
  "Action": "sqs:SendMessage",
  "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName",
  "Condition": {
    "ArnEquals": {
      "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName"
    }
  }
}

계정 B의 SNS 주제에서 SQS 대기열 구독

AWS Management Console에 로그인하고 계정 B의 Amazon SNS 콘솔로 이동해 주제를 선택하고 SNS 주제를 선택합니다.

  1. 구독에서 구독 생성을 선택합니다.
  2. 프로토콜 드롭다운 목록을 선택하고 Amazon SQS를 선택합니다.
  3. 구독 생성을 선택합니다.
  4. AWS Management Console에 로그인하고 계정 A의 Amazon SQS 콘솔로 이동합니다. 대기열을 선택하고 SQS 대기열을 선택합니다.
  5. 페이지 오른쪽 상단에서 메시지 보내기 및 받기를 선택합니다.
  6. 메시지 폴을 선택합니다. Amazon SNS에서 보낸 메시지가 메시지 섹션 아래에 표시됩니다.
  7. 메시지 ID를 선택합니다. SubscribeURL을 찾아 따옴표 안에 있는 URL을 복사합니다.
  8. URL 링크를 웹 브라우저에 붙여 넣습니다.
  9. AWS Management Console에 로그인하고 계정 B의 Amazon SNS 콘솔로 이동해 주제를 선택하고 SNS 주제를 선택합니다.
  10. 구독 아래의 구독 상태를 보고 구독이 확인되었는지 확인합니다.

문제 해결 팁

Amazon SNS Console에서 구독을 생성했는데도 SNS 콘솔에서 구독이 보류 중으로 나타납니다.

다음 단계를 따라 오류를 해결하세요.

  • 구독을 삭제하고 위의 9단계부터 다시 시작합니다.
  • AWS CLI를 사용해 다음 명령을 실행하여 SubscriptionURL을 검색해 SQS 대기열을 폴링합니다.
aws sqs receive-message --queue-url https**:**//sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyQueue --attribute-names All --message-attribute-names All --max-number-of-messages 10

참고: CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요. 이 URL을 복사하고 브라우저에 붙여 넣어 구독을 확인합니다. 대기열 URL을 내 URL로 바꿔야 합니다.

SNS 주제 액세스 정책을 복사하여 붙여 넣으면 “Couldn't set topic access policy.
Error code: InvalidParameter - Error message: An error occurred while setting the attribute access policy. Invalid parameter: Policy Error: null.”이라는 오류가 나타납니다.

다음 단계를 따라 오류를 해결하세요.

  • JSON 상태 검사기 도구에 액세스 정책을 복사하여 붙여 넣으면 정책 구문이 올바른지 확인할 수 있습니다.
  • 액세스 정책을 검토하여 문이 중복되는지 확인하세요. 첫 번째 문 ID 뒤에 쉼표가 있는지 확인하세요.

모범 사례

SQS 대기열에 SNS 구독을 인증합니다. 이 구성을 사용하면 주제 소유자와 구독 소유자만 SNS 주제에서 SQS 대기열을 구독 취소할 수 있습니다.

관련 정보

다른 계정의 Amazon SQS 대기열에 Amazon SNS 메시지 전송

Amazon Simple Storage Service(S3) 이벤트 알림이 주제에 게시되도록 허용

Amazon SNS에 구독자를 추가하려고 할 때 권한 부여 오류를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 10달 전