Amazon SNS로 자격 증명 기반 정책 사용 - Amazon Simple Notification Service

Amazon SNS로 자격 증명 기반 정책 사용

Amazon Simple Notification Service는 AWS Identity and Access Management(IAM)와 통합되므로 AWS 계정 의 사용자가 Amazon SNS 리소스로 수행할 수 있는 Amazon SNS 작업을 지정할 수 있습니다. 정책에서 특정 주제를 지정할 수 있습니다. 예를 들어, AWS 계정 의 특정 주제와 함께 Publish 작업을 사용할 권한을 조직의 특정 사용자에게 부여하는 IAM 정책을 생성할 때 변수를 사용할 수 있습니다. 자세한 정보는 IAM 사용 가이드의 정책 변수를 참조하세요.

중요

Amazon SNS를 IAM과 함께 사용하더라도 Amazon SNS 사용 방법에는 변화가 없습니다. Amazon SNS 작업은 변경되지 않으며 사용자 및 액세스 제어와 관련된 새로운 Amazon SNS 작업도 없습니다.

Amazon SNS 작업 및 리소스에 대한 정책의 예는 Amazon SNS에 대한 정책 예제에서 확인하세요.

IAM 및 Amazon SNS 정책을 함께 사용

IAM 정책을 사용하여 Amazon SNS 작업 및 주제에 대한 사용자의 액세스를 제한합니다. IAM 정책을 사용하여 다른 AWS 계정 이 아닌 AWS 계정 내 사용자에게만 액세스를 제한할 수 있습니다.

Amazon SNS 정책을 특정 주제와 함께 사용하여 해당 주제를 작업할 수 있는 사람(예: 해당 주제에 메시지를 게시할 수 있는 사람, 해당 주제를 구독할 수 있는 사람 등)을 제한합니다. Amazon SNS 정책은 다른 AWS 계정 이나 자체 AWS 계정 에게 액세스 권한을 부여할 수 있습니다.

사용자에게 Amazon SNS 주제에 대한 권한을 부여하기 위해 IAM 정책, Amazon SNS 정책 또는 둘 다를 사용할 수 있습니다. 대개는 어떤 방법으로도 같은 결과를 얻을 수 있습니다. 예를 들어, 다음 다이어그램은 동일한 IAM 정책과 Amazon SNS 정책을 보여줍니다. IAM 정책에서는 AWS 계정의 topic_xyz라는 주제에 대한 Amazon SNS Subscribe 작업을 허용합니다. IAM 정책은 사용자 Bob과 Susan에게 연결됩니다. 즉 Bob과 Susan은 정책에 명시된 권한을 갖습니다. Amazon SNS 정책도 같은 방식으로 Bob과 Susan에게 topic_xyz에 대한 Subscribe에 액세스할 수 있는 권한을 부여합니다.


          동등한 IAM 및 Amazon SNS 정책
참고

이전 예제에서는 조건없는 간단한 정책을 보여줍니다. 두 정책 중 어느 쪽에도 특정 조건을 지정할 수 있으며 동일한 결과를 얻을 수 있습니다.

AWS IAM 정책과 Amazon SNS 정책 간에는 한 가지 다른 점이 있습니다. Amazon SNS 정책 시스템에서는 다른 AWS 계정 에 권한을 부여할 수 있는 반면, IAM 정책은 그렇지 않습니다.

사용자의 필요에 따라 두 시스템을 함께 효과적으로 사용하면서 권한을 관리해야 합니다. 다음 예는 두 정책 시스템이 어떻게 연계하는지 보여줍니다.

예 1

이 예제에서는 IAM 정책과 Amazon SNS 정책이 Bob에게 모두 적용됩니다. IAM 정책은 Bob에게 AWS 계정 의 모든 주제에 대해 Subscribe 권한을 부여하는 반면 Amazon SNS 정책은 Bob에게 특정 주제(topic_xyz)에 대해서만 Publish를 사용할 권한을 부여합니다. 다음 다이어그램에서 관련 개념을 설명합니다.


            Bob에 대한 IAM 및 Amazon SNS 정책

Bob이 AWS 계정의 어떤 주제를 구독하기 위해 요청을 보내면 IAM 정책에서 이 작업을 허용합니다. Bob이 topic_xyz에 메시지를 게시하기 위해 요청을 보내면 Amazon SNS 정책에서 이 작업을 허용합니다.

예 2

여기서는 예 1(Bob에게 2가지 정책이 적용됨)을 토대로 합니다. Bob이 opic_xyz에 메시지를 게시하는데, 사실 그에게는 권한이 없습니다. 따라서 그가 주제에 게시하는 것을 아예 금지하려 합니다. 가장 쉬운 방법은 모든 주제에서 Publish 작업에 대한 액세스를 거부하는 IAM 정책을 추가하는 것입니다. 이 세 번째 정책은 원래 topic_xyz에 대한 게시할 권한을 부여한 Amazon SNS 정책을 재정의합니다. 명시적 거부는 항상 허용을 재정의하기 때문입니다(정책 평가 로직에 대한 자세한 정보는 평가 로직 섹션 참조). 다음 다이어그램에서 관련 개념을 설명합니다.


            "거부" 정책이 Amazon SNS 정책 재정의

Amazon SNS 작업 및 리소스에 대한 정책의 예는 Amazon SNS에 대한 정책 예제에서 확인하세요. Amazon SNS 정책 작성에 대한 자세한 정보는 Amazon SNS에 대한 기술 설명서를 참조하세요.

Amazon SNS 리소스 ARN 형식

Amazon SNS에서는 주제가 정책에서 지정할 수 있는 유일한 리소스 유형입니다. 다음은 주제의 Amazon 리소스 이름(ARN) 형식입니다.

arn:aws:sns:region:account_ID:topic_name

ARN에 대한 자세한 내용을 확인하려면 IAM 사용 설명서ARN로 이동하세요.

다음은 us-east-2 리전에 있고 AWS 계정 123456789012에 속하는 MyTopic이라는 주제의 ARN입니다.

arn:aws:sns:us-east-2:123456789012:MyTopic

Amazon SNS에서 지원하는 서로 다른 리전 각각에 MyTopic이라는 주제가 있을 경우 다음 ARN으로 주제를 지정할 수 있습니다.

arn:aws:sns:*:123456789012:MyTopic

주제 이름에 *와 ?를 사용할 수 있습니다. 예를 들어, 다음은 Bob이 생성했고 bob_라는 접두사를 붙인 모든 주제를 가리킬 수 있습니다.

arn:aws:sns:*:123456789012:bob_*

사용자의 편의를 위해 사용자가 주제를 만들면 Amazon SNS는 그 주제의 ARN을 반환합니다.

Amazon SNS API 작업

IAM 정책에서는 Amazon SNS에서 제공하는 모든 작업을 지정할 수 있습니다. 그러나 ConfirmSubscriptionUnsubscribe 작업에는 인증이 필요하지 않습니다. 즉 정책에서 해당 작업을 지정하더라도 IAM은 해당 작업에 대한 사용자의 액세스를 제한하지 않습니다.

정책에서 지정하는 각 작업은 소문자 문자열의 접두사가 붙어야 합니다sns:. 예를 들어, 모든 Amazon SNS 작업을 지정하려면 sns:*를 사용합니다. 작업 목록을 보려면 Amazon Simple Notification Service API 참조로 이동하세요.

Amazon SNS 정책 키

Amazon SNS는 다음 AWS 전체 정책 키와 일부 서비스별 키를 구현합니다.

각 AWS 서비스에서 지원하는 조건 키 목록은 IAM 사용 설명서에서 AWS 서비스에 대한 작업, 리소스 및 조건 키를 참조하세요. 여러 AWS 서비스에서 사용할 수 있는 조건 키 목록은 IAM 사용 설명서AWS 전역 조건 컨텍스트 키를 참조하세요.

Amazon SNS는 다음과 같은 서비스별 키를 사용합니다. Subscribe 요청에 대한 액세스를 제한하는 정책에서 이 키를 사용합니다.

  • sns:endpoint— Subscribe 요청 또는 이전에 확인된 구독의 URL, 이메일 주소 또는 ARN입니다. 특정 엔드포인트(예: *@yourcompany.com)에 대한 액세스를 제한하려면 문자열 조건과 함께 사용합니다(Amazon SNS에 대한 정책 예제 참조).

  • sns:protocol— Subscribe 요청 또는 이전에 확인한 구독의 protocol 값입니다. 특정 전송 프로토콜(예: https)에 대한 게시를 제한하려면 문자열 조건과 함께 사용합니다(Amazon SNS에 대한 정책 예제 참조).

Amazon SNS에 대한 정책 예제

여기서는 Amazon SNS에 대한 사용자 액세스를 제어하는 몇몇 간단한 정책을 보여줍니다.

참고

나중에 Amazon SNS는 정책에 명시된 목표를 기반으로 다음 정책 중 하나에 논리적으로 포함되어야 하는 새로운 작업을 추가할 수 있습니다.

예 1: 어떤 그룹에서 주제를 만들고 관리하도록 허용

여기서는 CreateTopic, ListTopics, SetTopicAttributes, DeleteTopic에 대한 액세스 권한을 부여하는 정책을 만듭니다.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"], "Resource": "*" }] }

예 2: IT 그룹에서 특정 주제에 메시지를 게시하는 것을 허용

여기서는 IT를 위한 그룹을 만들고 관심 있는 특정 주제에 대해 Publish에 액세스할 수 있는 권한을 부여하는 정책을 할당합니다.

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }

예 3: AWS 계정 의 사용자에게 주제를 구독할 수 있는 권한 부여

여기서는 Subscribe 작업에 대한 액세스 권한을 부여하는 정책을 만듭니다. 이를 위해 sns:Protocolsns:Endpoint 정책 키에 대한 문자열 일치 조건을 사용합니다.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:Subscribe"], "Resource": "*", "Condition": { "StringLike": { "SNS:Endpoint": "*@example.com" }, "StringEquals": { "sns:Protocol": "email" } } }] }

예 4: 파트너가 특정 주제에 메시지를 게시하는 것을 허용

Amazon SNS 정책 또는 IAM 정책을 사용하여 파트너가 특정 주제에 게시하도록 허용할 수 있습니다. 파트너가 AWS 계정 이 있다면 더 수월하게 Amazon SNS 정책을 사용할 수 있습니다. 그러나 파트너 회사에서 AWS 보안 자격 증명을 가진 누구라도 주제에 메시지를 게시할 수 있습니다. 여기서는 특정 인물(또는 애플리케이션)에게만 액세스 권한을 부여한다고 가정합니다. 이렇게 하려면 파트너를 자체 회사 내의 사용자와 같이 처리해야 하며, IAM 정책 대신 Amazon SNS 정책을 사용해야 합니다.

여기서는 파트너 회사를 나타내는 WidgetCo라는 그룹을 만듭니다. 파트너 회사에서 액세스 권한을 필요로 하는 인물(또는 애플리케이션)을 위해 사용자를 만들고 그 사용자를 그룹에 넣습니다.

그런 다음 WidgetPartnerTopic이라는 특정 주제에 대한 액세스 권한을 Publish 그룹에 부여하는 정책을 연결합니다.

또한 WidgetCo 그룹이 주제에 다른 작업을 하지 못하도록 하려고 합니다. 따라서 WidgetPartnerTopic 이외의 다른 주제에서 Publish 이외의 다른 Amazon SNS 작업에 대한 권한을 거부하는 문을 추가합니다. 이는 시스템의 어딘가에서 사용자에게 Amazon SNS에 대한 폭넓은 액세스 권한을 부여하는 광범위한 정책이 있는 경우에만 필요합니다.

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" }, { "Effect": "Deny", "NotAction": "sns:Publish", "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" } ] }