Amazon SQS 대기열에서 Amazon SNS 주제 구독 - Amazon Simple Notification Service

Amazon SQS 대기열에서 Amazon SNS 주제 구독

Amazon SNS 주제가 Amazon SQS 대기열에 메시지를 보내도록 하려면 다음 중 하나를 수행하세요.

다른 AWS 계정의 대기열에 메시지를 보내기 위해 주제를 생성하는 방법은 다른 계정의 Amazon SQS 대기열로 Amazon SNS 메시지 전송에서 확인하세요.

두 개의 대기열에 메시지를 전송하는 주제를 생성하는 AWS CloudFormation 템플릿을 보려면 AWS CloudFormation을 사용하여 Amazon SNS를 Amazon SQS 메시징에 자동화에서 확인하세요.

1단계: 대기열 및 주제의 ARN 획득

주제에 대기열을 구독할 때 사용자는 해당 대기열에 대한 ARN 사본이 필요합니다. 이와 마찬가지로 대기열에 메시지를 전송하도록 주제에 권한을 부여할 때 사용자는 주제에 대한 ARN 사본이 필요합니다.

대기열 ARN을 획득하려면 Amazon SQS 콘솔 또는 GetQueueAttributes API 작업을 사용할 수 있습니다.

Amazon SQS 콘솔로부터 대기열 ARN을 획득하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/sqs/에서 Amazon SQS 콘솔을 엽니다.

  2. 획득하고자 하는 ARN 대기열 박스를 선택합니다.

  3. 세부 정보 섹션에서 ARN 값을 복사하여 Amazon SNS 주제를 구독하는데 사용할 수 있도록 합니다.

주제 ARN을 가져오려면 Amazon SNS 콘솔, sns-get-topic-attributes 명령 또는 GetQueueAttributes API 작업을 사용할 수 있습니다.

Amazon SNS 콘솔로부터 주제 ARN을 획득하려면
  1. Amazon SNS 콘솔에 로그인합니다.

  2. 탐색 창에서 ARN을 가져오려는 주제를 선택합니다.

  3. 세부 정보 섹션에서 ARN 값을 복사하여 대기열에 메시지를 전송하는 Amazon SNS 주제에 대한 권한을 부여하는데 사용합니다.

2단계: Amazon SQS 대기열에 메시지를 전송하도록 Amazon SNS 주제에 권한 부여

Amazon SNS 주제가 대기열에 메시지를 전송할 수 있으려면 Amazon SNS 주제가 sqs:SendMessage 작업을 수행하도록 허용하는 정책을 대기열에 설정해야 합니다.

대기열에서 주제를 구독하기 전에 주제 및 대기열이 필요합니다. 주제 또는 대기열을 아직 생성하지 않은 경우, 지금 생성합니다. 자세한 정보는 주제 생성을 참조하고 Amazon Simple Queue Service 개발자 안내서대기열 생성을 참조하세요.

대기열에 정책을 설정하기 위해 Amazon SQS 콘솔 또는 SetQueueAttributes API 작업을 사용할 수 있습니다. 시작하기 전에 대기열로 메시지를 전송하도록 허용하고자 하는 해당 주제의 ARN을 보유하고 있는지 확인해야 합니다. 대기열에서 여러 주제를 구독하는 경우 정책은 각 주제에 대해 하나의 Statement 요소를 포함해야 합니다.

Amazon SQS 콘솔을 사용해 대기열에 SendMessage 정책 설정
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/sqs/에서 Amazon SQS 콘솔을 엽니다.

  2. 정책을 설정하려는 대기열의 상자를 선택하고 액세스 정책 탭을 선택한 다음 편집을 선택합니다.

  3. 액세스 정책 섹션에서 대기열에 액세스할 수 있는 사람을 정의합니다.

    • 주제의 작업을 허용하는 조건을 추가합니다.

    • 아래 예제와 같이 Principal을 Amazon SNS 서비스로 설정합니다

    • 혼동된 대리자 시나리오를 방지하기 위해 aws:SourceArn 또는 aws:SourceAccount 전역 조건 키를 사용합니다. 이러한 조건 키를 사용하려면 값을 주제의 ARN으로 설정합니다. 대기열에서 여러 주제를 구독하는 경우 aws:SourceAccount를 대신 사용할 수 있습니다.

    예를 들어, 다음 정책은 MyTopic이 MyQueue에 메시지를 전송하도록 허용합니다.

    { "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } } ] }

3단계: 대기열에서 Amazon SNS 주제 구독

주제를 통해 메시지를 전송하려면 대기열에서 Amazon SNS 주제를 구독해야 합니다. 사용자는 자체 ARN에 의해 해당 대기열을 지정합니다. 주제를 구독하려면 Amazon SNS 콘솔, sns-subscribe CLI 명령 또는 Subscribe API 작업을 사용할 수 있습니다. 시작하기 전에 구독하고자 하는 대기열의 ARN이 있어야 합니다.

  1. Amazon SNS 콘솔에 로그인합니다.

  2. 탐색 창에서 주제(Topics)를 선택합니다.

  3. 주제 페이지에서 주제를 선택합니다.

  4. 내 주제 페이지의 구독 페이지에서 구독 생성을 선택합니다.

  5. 구독 생성 페이지의 세부 정보 섹션에서 다음을 수행합니다.

    1. 주제 ARN을 확인합니다.

    2. 프로토콜에서 Amazon SQS를 선택합니다.

    3. 엔드포인트에서 Amazon SQS 대기열의 ARN을 입력합니다.

    4. 구독 생성을 선택합니다.

    구독이 확인되면 새 구독의 구독 ID는 구독 ID를 표시합니다. 대기열 소유자가 구독을 생성하면 구독은 자동으로 확인되며 거의 즉시 활성화됩니다.

    일반적으로 사용자는 소유한 주제에 대해 사용자 계정의 자체 대기열을 구독합니다. 하지만 다른 계정의 대기열에서 주제를 구독할 수도 있습니다. 구독을 생성한 사용자가 대기열의 소유자가 아닐 경우(예. 계정 A의 사용자가 계정 A의 주제에 대해 계정 B의 대기열을 구독할 경우) 구독이 확인되어야 합니다. 다른 계정에서 대기열 구독 및 구독 확인에 대한 자세한 정보는 다른 계정의 Amazon SQS 대기열로 Amazon SNS 메시지 전송에서 확인하세요.

4단계: 사용자에게 적절한 주제 및 대기열 작업에 대한 권한 부여

사용자는 AWS Identity and Access Management(IAM)를 사용해 적절한 사용자만 Amazon SNS 주제를 게시하고 Amazon SQS 대기열에서 메시지를 읽기/삭제하도록 허용해야 합니다. IAM 사용자의 주제 및 대기열에 대한 작업 제어에 대한 자세한 정보는 Amazon SNS로 자격 증명 기반 정책 사용 및 Amazon Simple Queue Service 개발자 안내서의 Amazon SQS의 Identity and Access Management를 참조하세요.

주제 또는 대기열에 대한 액세스를 제어하는 다음의 두 가지 방법이 있습니다.

  • IAM 사용자 또는 그룹에 정책을 추가합니다. 사용자에게 주제 또는 대기열에 대한 권한을 부여하는 가장 간단한 방법은 그룹을 생성하고 그룹에 적절한 정책을 추가한 후 사용자를 추가하는 것입니다. 그룹에서 사용자를 추가하거나 제거하는 것이 각각의 사용자에 대해 설정한 정책을 추적하는 것보다 훨씬 쉽습니다.

  • 주제 또는 대기열에 대한 정책을 추가합니다. 또 다른 AWS 계정에 주제 또는 대기열에 대한 권한을 부여하고자 할 경우 사용할 수 있는 유일한 방법은 권한을 부여하고자 하는 AWS 계정가 주체인 정책을 추가하는 것입니다.

사용자는 대부분의 경우 첫 번째 방법을 사용해야 합니다(그룹에 정책을 적용하여 해당 그룹에 적절한 사용자를 추가 및 제거함으로써 사용자에 대한 권한을 관리). 또 다른 계정의 사용자에게 권한을 부여해야할 경우에는 두 번째 방법을 사용해야 합니다.

IAM 사용자 또는 그룹에 정책 추가

IAM 사용자 또는 그룹에 다음의 정책을 추가할 경우 해당 사용자 또는 그룹 구성원에게 MyTopic에 대한 sns:Publish 작업을 수행할 권한을 부여할 것입니다.

{ "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }

IAM 사용자 또는 그룹에 다음의 정책을 추가할 경우 해당 사용자 또는 그룹 구성원에게 대기열 MyQueue1 및 MyQueue2에 대한 sqs:ReceiveMessagesqs:DeleteMessage 작업을 수행할 권한을 부여할 것입니다.

{ "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue1", "arn:aws:sqs:us-east-2:123456789012:MyQueue2" ] } ] }

주제 또는 대기열에 대한 정책 추가

다음의 정책 예제는 또 다른 계정에 주제 및 대기열에 대한 권한을 부여하는 방법을 보여줍니다.

참고

사용자 계정에 있는 리소스에 대한 액세스 권한을 또 다른 AWS 계정에 부여할 때 해당 리소스에 대해 관리자 레벨의 액세스(와일드카드 액세스) 권한을 보유한 IAM 사용자에게도 권한을 부여합니다. 다른 계정의 다른 모든 IAM 사용자는 자동으로 사용자 리소스에 대한 액세스가 거부됩니다. 해당 AWS 계정의 특정 IAM 사용자에게 사용자의 리소스에 대한 액세스 권한을 부여하고자 할 경우 관리자 레벨의 액세스 권한을 보유한 계정 또는 IAM 사용자는 이러한 IAM 사용자들에게 리소스에 대한 권한을 위임해야 한다. 교차 계정 위임에 대한 자세한 정보는 IAM 사용 가이드교차 계정 액세스 권한 사용을 참조하세요.

계정 123456789012의 주제 MyTopic에 대해 다음의 정책을 추가했을 경우 사용자는 계정 111122223333에 해당 주제에 대한 sns:Publish 작업을 수행할 권한을 부여했을 것입니다.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }

계정 123456789012의 대기열 MyQueue에 대해 다음의 정책을 추가했을 경우 사용자는 계정 111122223333에 해당 대기열에 대한 sqs:ReceiveMessagesqs:DeleteMessage 작업을 수행할 권한을 부여했을 것입니다.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue" ] } ] }

5단계: 주제의 대기열 구독 테스트

주제를 게시하고 주제가 대기열에 전송한 메시지를 확인함으로써 주제의 대기열 구독을 테스트할 수 있습니다.

Amazon SNS 콘솔을 사용하여 주제를 게시하려면
  1. AWS 계정는 주제에 게시할 권한을 가진 또는 IAM 사용자의 자격 증명을 통해 AWS Management Console에 로그인하고 https://console.aws.amazon.com/sns/에서 Amazon SNS 콘솔을 엽니다.

  2. 탐색 창에서 주제를 선택하고 주제 게시를 선택합니다.

  3. 제목 상자에 제목을 입력하고(예: Testing publish to queue), 메시지 상자에 텍스트를 입력한 후(예: Hello world!), 메시지 게시를 선택합니다. “메시지가 성공적으로 게시되었습니다”라는 메시지가 나타납니다.

Amazon SQS 콘솔을 사용한 주제에서의 메시지 확인
  1. 대기열의 메시지를 볼 수 있는 권한이 있는 AWS 계정 또는 IAM 사용자의 자격 증명을 사용하여 AWS Management Console에 로그인하고 https://console.aws.amazon.com/sqs/에서 Amazon SQS 콘솔을 엽니다.

  2. 주제를 구독하는 대기열을 선택합니다.

  3. Send and receive messages(메시지 보내기 및 받기)를 선택한 다음 Poll for messages(메시지 폴링)를 선택합니다. 알림 유형으로 된 메시지가 표시됩니다.

  4. 본문 열에서 추가 정보를 선택합니다. Message Details 상자는 주제에 게시한 제목 및 메시지로 된 JSON 문서를 담고 있습니다. 메시지는 다음의 JSON 문서와 유사합니다.

    { "Type" : "Notification", "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "Testing publish to subscribed queues", "Message" : "Hello world!", "Timestamp" : "2012-03-29T05:12:16.901Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEnTrFPa3...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee" }
  5. 닫기를 선택하세요. 대기열에 알림 메시지를 전송하는 주제를 성공적으로 게시했습니다.