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

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

Amazon Simple Notification Service는 AWS Identity and Access Management (IAM)과 통합되어의 사용자가 Amazon SNS 리소스로 수행할 수 있는 Amazon SNS 작업을 지정할 AWS 계정 수 있습니다. 정책에서 특정 주제를 지정할 수 있습니다. 예를 들어, 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 정책은의 topic_xyz라는 주제에 대한 Amazon SNS Subscribe 작업을 허용합니다 AWS 계정 . IAM 정책은 사용자 Bob과 Susan에게 연결됩니다(즉, Bob과 Susan이 정책에 명시된 권한을 가짐). Amazon SNS 정책도 같은 방식으로 Bob과 Susan에게 topic_xyz에 대한 Subscribe에 액세스할 수 있는 권한을 부여합니다.

IAM 정책과 Amazon SNS 정책을 비교하여 두 정책 모두 Bob과 Susan이라는 두 사용자에게 동등한 권한을 부여하여 AWS 계정에서 특정 Amazon SNS 주제를 구독할 수 있도록 합니다. 강조 표시된 주요 차이점은 Amazon SNS 정책이 여러의 사용자에게 권한을 부여할 수 AWS 계정있지만 IAM 정책은 부여할 수 없다는 것입니다.
참고

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

AWS IAM 정책과 Amazon SNS 정책에는 한 가지 차이점이 있습니다. Amazon SNS 정책 시스템을 사용하면 다른에 권한을 부여할 수 AWS 계정있지만 IAM 정책은 부여하지 않습니다.

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

예 1

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

IAM 정책과 Amazon SNS 정책이 모두 사용자 Bob에게 적용되는 방법을 보여줍니다. IAM 정책은 Bob이의 모든 주제를 구독하도록 허용하고 AWS 계정, Amazon SNS 정책은 "topic_xyz"라는 특정 주제에 메시지를 게시할 수 있는 권한을 부여합니다. 다이어그램은 IAM 정책에서 부여한 일반 권한과 특정 주제에 대해 Amazon SNS 정책에서 부여한 특정 권한 간의 차이점을 강조 표시합니다.

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

예 2

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

모든 주제에 대해 '게시' 작업을 거부하는 IAM 정책을 추가하는 것이 사용자 Bob이 특정 주제 'topic_xyz'에 게시할 수 있도록 허용한 기존 Amazon SNS 정책을 재정의하는 방법임을 보여주는 그림입니다. IAM 거부 정책은 Amazon SNS 정책보다 우선 적용되므로 Bob이 'topic_xyz'를 포함한 모든 주제에 게시하는 것을 효과적으로 방지합니다.

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 리전의 MyTopic이라는 주제에 대한 ARN으로, AWS 계정 123456789012 속합니다.

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 광범위한 정책 키와 일부 서비스별 키를 구현합니다.

각각에서 지원하는 조건 키 목록은 IAM 사용 설명서의에 사용되는 작업, 리소스 및 조건 키를 AWS 서비스 AWS 서비스참조하세요. 여러에서 사용할 수 있는 조건 키 목록은 IAM 사용 설명서AWS 전역 조건 컨텍스트 키를 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 정책을 사용하여 파트너가 특정 주제에 게시하도록 허용할 수 있습니다. 파트너에게이 있는 경우 Amazon SNS 정책을 사용하는 AWS 계정것이 더 쉬울 수 있습니다. 그러나 파트너의 회사에서 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" } ] }