교차 계정 Amazon SQS 엔드포인트를 Amazon SNS 주제에 어떻게 구성합니까?

6분 분량
0

계정 A에 Amazon Simple Queue Service(Amazon SQS) 대기열이 있습니다. 이 대기열에서 계정 B의 Amazon Simple Notification Service(SNS) 주제에 구독하려고 합니다.

간략한 설명

주제 소유자로 Amazon SNS 주제에서 구독을 생성합니다. 또는 대기열 소유자로 Amazon SQS 대기열에서 구독을 생성합니다. 구독을 성공적으로 생성하려면 두 접근 방식 모두 적절한 권한이 있어야 합니다.

해결 방법

**중요:**대기열 소유자로 구독하려면 계정 B의 SNS 주제 액세스 정책에 적절한 권한이 있는지 확인하세요. 이러한 권한을 통해 계정 A의 SQS 대기열에서 SNS 주제를 구독할 수 있습니다. 주제 소유자로 구독하려면 계정 A의 SQS 대기열 액세스 정책에 적절한 권한이 있는지 확인하세요. 계정 A에는 SNS 주제가 구독 확인 URL을 전송하도록 허용할 수 있는 권한이 있어야 합니다.

대기열 소유자로 구독하기

대기열 소유자로 대기열을 구독하려면 다음 작업을 완료하세요.

계정 B의 SNS 액세스 정책 수정

다음 단계를 완료합니다.

  1. 계정 B의 Amazon SNS 콘솔에 로그인합니다.
  2. 적절한 AWS 리전으로 전환합니다.
  3. Topics를 선택하고 SNS 주제를 선택합니다.
  4. Edit을 선택합니다.
  5. Access policy 섹션을 확장합니다.
  6. 다음 액세스 정책을 복사해 JSON editor 섹션에 붙여 넣습니다.
    {
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "111122223333"
          },
          "Action": "sns:Subscribe",
          "Resource": "arn:aws:sns:Region:account-id:topic-name"
        }
      ]
    }
    참고: AWS 계정 및 SNS 주제 ARN을 해당하는 값으로 바꾸세요.
  7. Save를 선택합니다.

대기열 소유자는 다음 단계를 완료하여 계정 A의 SQS 대기열이 계정 B의 SNS 주제를 구독하도록 할 수 있습니다.

  1. 계정 A의 Amazon SQS 콘솔에 로그인합니다.
  2. 적절한 리전으로 전환합니다.
  3. Queues를 선택한 후 SQS 대기열을 선택합니다.
  4. SNS subscriptions 섹션에서 Subscribe to Amazon SNS topic을 선택합니다.
  5. Specify an Amazon SNS topic available for this queue에서 드롭다운을 선택합니다. 그런 다음 Enter Amazon SNS topic ARN을 선택합니다.
  6. An Amazon SNS topic that can send notifications to an Amazon SQS queue 텍스트 필드에 SNS 주제 ARN을 입력합니다.
  7. Save를 선택합니다.
  8. 계정 B의 Amazon SNS 콘솔에 로그인합니다.
  9. Topics를 선택하고 SNS 주제를 선택합니다.
  10. 계정 B의 SNS 주제에 대한 구독이 완료되었는지 확인하려면 Subscriptions 섹션을 검토합니다.
    참고: 구독을 생성하면 SQS 대기열 액세스 정책에 구문이 추가됩니다. 이 정책은 SNS 주제가 대기열에 메시지를 보낼 수 있도록 허용합니다. 이 정책은 다음과 유사합니다.
{
      "Sid": "topic-subscription-arn:aws:sns:Region:account-id:topic-name",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:Region:account-id:queue-name",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
        }
      }
    }

주제 소유자로 구독하기

주제 소유자로 대기열을 구독하려면 다음 작업을 완료하세요.

계정 A의 SQS 대기열 수정

다음 단계를 완료합니다.

  1. 계정 A의 Amazon SQS 콘솔에 로그인합니다.
  2. 적절한 리전으로 전환합니다.
  3. Queues를 선택한 후 SQS 대기열을 선택합니다.
  4. Edit을 선택합니다.
  5. Access policy 섹션을 확장합니다.
  6. 다음 액세스 정책을 복사하여 JSON 편집기에 붙여 넣습니다.
    {
          "Sid": "Allow_SNS_topic_in_Account_B_to_Send_Message",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "SQS:SendMessage",
          "Resource": "arn:aws:sqs:Region:account-id:queue-name",
          "Condition": {
            "ArnLike": {
              "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
            }
          }
        }
    참고: SQS 대기열 ARN 및 SNS 주제 ARN을 해당하는 값으로 바꾸세요.

주제 소유자는 다음 단계를 완료하여 다른 계정에서 SQS 대기열을 구독합니다.

  1. 계정 B의 Amazon SNS 콘솔에 로그인합니다.
  2. 적절한 리전으로 전환합니다.
  3. Topics를 선택하고 SNS 주제를 선택합니다.
  4. Subscriptions에서 Create subscription을 선택합니다.
  5. Protocol 드롭다운 목록을 선택한 후 Amazon SQS를 선택합니다.
  6. Create subscription을 선택합니다.
  7. 구독을 확인하려면 계정 A의 Amazon SQS 콘솔에 로그인합니다.
  8. Queues를 선택한 다음 구독한 SQS 대기열을 선택합니다.
  9. Send and receive messages를 선택합니다.
  10. Poll for messages를 선택합니다. Amazon SNS에서 보낸 메시지가 Messages 섹션 아래에 표시됩니다.
  11. 메시지 ID를 선택합니다. SubscribeURL에 따옴표 안에 있는 URL을 복사합니다.
  12. SubscriptionArn으로 ConfirmSubscriptionResult를 보려면 웹 브라우저에 이 URL 링크를 붙여 넣고 Enter 키를 누릅니다.
  13. 계정 B의 Amazon SNS 콘솔에 로그인합니다.
  14. Topics를 선택하고 SNS 주제를 선택합니다.
  15. 구독이 확인되었는지 확인하려면 Subscriptions 아래의 구독 상태를 검토합니다. 구독 상태가 Pending confirmation에서 Confirmed로 변경됩니다.

참고: SNS 계정에서 구독을 소유하므로 SQS 콘솔에 등록된 구독을 볼 수 없습니다.

문제 해결 팁

대기열 문제를 해결하려면 사례에 따라 다음 작업을 완료하세요.

내 SQS 대기열이 암호화됨

AWS Key Management Service(AWS KMS) 키로 암호화된 SQS 대기열은 계정 간 액세스를 제한할 수 있습니다. 암호화된 대기열의 키를 정의하지 않으면 대기열에서 AWS KMS 키(SSE-KMS)를 기본 키로 사용합니다. 이 키는 동일한 계정의 보안 주체에만 액세스를 허용합니다. 자세한 내용은 Amazon SQS의 저장 시 암호화를 참조하세요.

SSE-KMS를 사용하는 암호화된 대기열에 액세스하려면 고객 관리형 AWS KMS 키를 생성하세요. 그런 다음, 키 정책에 권한을 추가하여 SNS 서비스가 AWS KMS API를 호출할 수 있도록 합니다.

SNS 서비스가 GenerateDataKeyDecrypt API 메서드를 사용할 수 있게 하려면 고객 관리형 키 정책에 다음 구문을 추가하세요.

{
      "Effect": "Allow",
      "Principal": {
            "Service": "sns.amazonaws.com"
      },
      "Action": [
            "kms:GenerateDataKey*",
            "kms:Decrypt"
      ],
      "Resource": "*"
}

자세한 내용은 대기열에 대한 서버 측 암호화(SSE) 구성(콘솔)을 참조하세요.

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

이 문제를 해결하려면 다음 단계를 사용하세요.

  1. 구독을 삭제합니다. 그런 다음 이전 단계의 13단계부터 시작합니다.

  2. AWS Command Line Interface(AWS CLI)를 사용하여 SQS 대기열을 폴링하려면 다음 명령을 실행하여 SubscriptionURL을 검색하세요.

    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

    **참고:**AWS CLI 명령을 실행할 때 오류가 발생하면, AWS CLI 오류 문제 해결을 참조하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

  3. 이 URL을 복사하고 브라우저에 붙여 넣어 구독을 확인합니다. 대기열 URL을 내 URL로 바꿔야 합니다.

내 SNS 주제 액세스 정책을 복사하여 붙여 넣으면 'Couldn't set topic access policy' 오류가 표시됨

내 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.'이라는 오류가 나타납니다.

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

  1. 정책 구문이 올바른지 확인하려면 액세스 정책을 복사하여 JSON Validator tool 웹 사이트에 붙여 넣습니다.
  2. 액세스 정책을 검토하여 구문이 중복되지 않는지 확인합니다. 첫 번째 구문 ID 뒤에 쉼표가 있는지 확인합니다.

Amazon SNS 콘솔에서 내 구독 ID가 'Deleted'로 표시됨

SNS와 SQS의 교차 계정 통합에서는 구독이 생성된 위치에 따라 구독 소유자가 결정됩니다.

SQS 계정에서 구독을 생성한 경우 SQS가 구독 소유자입니다. SNS 계정에서 구독을 생성한 경우 SNS가 구독의 소유자입니다.

구독을 소유하지 않은 계정에서 Unsubscribe API를 호출하면 구독이 Deleted 상태로 전환됩니다. 또는 콘솔에서 구독을 삭제하려고 하면 구독이 Deleted 상태로 전환됩니다. SNS 주제 구독이 Deleted 상태인 동안에는 구독을 소유한 계정이 주제에 대해 동일한 엔드포인트를 다시 구독할 수 없습니다.

48시간이 지나면 Amazon SNS가 Deleted 상태인 구독을 지우고 구독을 소유한 계정이 주제에 대해 동일한 엔드포인트를 다시 구독할 수 있습니다.

48시간이 지나기 전에 다시 구독하려면 SNS 주제를 소유한 AWS 계정에서 Subscribe API를 호출하여 구독을 다시 생성합니다.

모범 사례

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

관련 정보

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

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

Amazon SNS 주제에 구독자를 추가하려고 할 때 권한 부여 오류를 어떻게 해결합니까?

데이터 키 재사용 기간 이해

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