

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

# Amazon SNS의 Identity and Access Management
<a name="security-iam"></a>

Amazon SNS에 액세스하려면가 요청을 인증하는 데 사용할 AWS 수 있는 자격 증명이 필요합니다. 이러한 자격 증명에는 Amazon SNS 주제 및 메시지와 같은 AWS 리소스에 액세스할 수 있는 권한이 있어야 합니다. 다음 섹션에서는 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 및 Amazon SNS를 사용하여 리소스에 대한 액세스를 제어함으로써 리소스를 보호하는 방법에 대해 자세히 설명합니다.

AWS Identity and Access Management (IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 AWS 서비스 되는 입니다. IAM 관리자는 어떤 사용자가 Amazon SNS 리소스를 사용할 수 있도록 *인증*(로그인)되고 *권한이 부여*(권한 있음)될 수 있는지 제어합니다. IAM은 추가 비용 없이 사용할 수 AWS 서비스 있는 입니다.

## 대상
<a name="security_iam_audience"></a>

 AWS Identity and Access Management (IAM)를 사용하는 방법은 역할에 따라 다릅니다.
+ **서비스 사용자** - 기능에 액세스할 수 없는 경우 관리자에게 권한 요청(참조[Amazon Simple Notification Service ID 및 액세스 문제 해결](security_iam_troubleshoot.md))
+ **서비스 관리자** - 사용자 액세스 결정 및 권한 요청 제출([Amazon SNS에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 참조)
+ **IAM 관리자** - 액세스를 관리하기 위한 정책 작성([Amazon Simple Notification Service의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 참조)

## ID를 통한 인증
<a name="security_iam_authentication"></a>

인증은 자격 증명 자격 증명을 AWS 사용하여에 로그인하는 방법입니다. AWS 계정 루트 사용자, IAM 사용자 또는 IAM 역할을 수임하여 인증해야 합니다.

 AWS IAM Identity Center (IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 자격 증명으로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In 사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 AWS 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 를 생성할 때 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *theroot 사용자*라는 하나의 로그인 자격 증명으로 AWS 계정시작합니다. 일상적인 태스크에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자 자격 증명이 필요한 작업은 *IAM 사용 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) 섹션을 참조하세요.

### 페더레이션 ID
<a name="security_iam_authentication-federated"></a>

가장 좋은 방법은 인간 사용자에게 자격 증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 서비스 사용하여에 액세스하도록 요구하는 것입니다.

*페더레이션 자격 증명*은 엔터프라이즈 디렉터리, 웹 자격 증명 공급자 또는 자격 증명 소스의 자격 증명을 AWS 서비스 사용하여 Directory Service 에 액세스하는 사용자입니다. 페더레이션 ID는 임시 자격 증명을 제공하는 역할을 수임합니다.

중앙 집중식 액세스 관리를 위해 AWS IAM Identity Center를 추천합니다. 자세한 정보는 *AWS IAM Identity Center 사용 설명서*의 [What is IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 ID입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 자격 [증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 사용하여에 액세스하도록 인간 사용자에게 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)하기를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 관리 권한을 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

*[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*은 임시 자격 증명을 제공하는 특정 권한이 있는 자격 증명입니다. [사용자에서 IAM 역할(콘솔)로 전환하거나 또는 API 작업을 호출하여 역할을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 수임할 수 있습니다. AWS CLI AWS 자세한 내용은 *IAM 사용 설명서*의 [역할 수임 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)을 참조하세요.

IAM 역할은 페더레이션 사용자 액세스, 임시 IAM 사용자 권한, 교차 계정 액세스, 교차 서비스 액세스 및 Amazon EC2에서 실행되는 애플리케이션에 유용합니다. 자세한 내용은 *IAM 사용 설명서*의 [교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

## 정책을 사용하여 액세스 관리
<a name="security_iam_access-manage"></a>

정책을 AWS 생성하고 자격 증명 또는 리소스에 연결하여 AWS 에서 액세스를 제어합니다. 정책은 자격 증명 또는 리소스와 연결될 때 권한을 정의합니다.는 보안 주체가 요청할 때 이러한 정책을 AWS 평가합니다. 대부분의 정책은에 JSON 문서 AWS 로 저장됩니다. JSON 정책 문서에 대한 자세한 내용은 *IAM 사용 설명서*의 [JSON 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) 섹션을 참조하세요.

정책을 사용하여 관리자는 어떤 **보안 주체**가 어떤 **리소스**에 대해 어떤 **조건**에서 **작업**을 수행할 수 있는지 정의하여 누가 무엇을 액세스할 수 있는지 지정합니다.

기본적으로 사용자 및 역할에는 어떠한 권한도 없습니다. IAM 관리자는 IAM 정책을 생성하고 사용자가 수임할 수 있는 역할에 추가합니다. IAM 정책은 작업을 수행하기 위해 사용하는 방법과 관계없이 작업에 대한 권한을 정의합니다.

### ID 기반 정책
<a name="security_iam_access-manage-id-based-policies"></a>

ID 기반 정책은 ID(사용자, 사용자 그룹 또는 역할)에 연결하는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

ID 기반 정책은 *인라인 정책*(단일 ID에 직접 포함) 또는 *관리형 정책*(여러 ID에 연결된 독립 실행형 정책)일 수 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 *IAM 사용 설명서*의 [관리형 정책 및 인라인 정책 중에서 선택](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) 섹션을 참조하세요.

### 리소스 기반 정책
<a name="security_iam_access-manage-resource-based-policies"></a>

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 예를 들어 IAM *역할 신뢰 정책* 및 Amazon S3 *버킷 정책*이 있습니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다.

리소스 기반 정책은 해당 서비스에 있는 인라인 정책입니다. 리소스 기반 정책에서는 IAM의 AWS 관리형 정책을 사용할 수 없습니다.

### 기타 정책 유형
<a name="security_iam_access-manage-other-policies"></a>

AWS 는 보다 일반적인 정책 유형에서 부여한 최대 권한을 설정할 수 있는 추가 정책 유형을 지원합니다.
+ **권한 경계** - ID 기반 정책에서 IAM 엔터티에 부여할 수 있는 최대 권한을 설정합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 엔터티의 권한 범위](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** - AWS Organizations내 조직 또는 조직 단위에 대한 최대 권한을 지정합니다. 자세한 내용은AWS Organizations 사용 설명서의 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.**
+ **리소스 제어 정책(RCP)** – 계정의 리소스에 사용할 수 있는 최대 권한을 설정합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ **세션 정책** – 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

### 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies"></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 에서 여러 정책 유형이 관련될 때 요청을 허용할지 여부를 AWS 결정하는 방법을 알아보려면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

## 액세스 관리
<a name="access-control"></a>

Amazon SNS에는 AWS Identity and Access Management (IAM) 정책에 사용되는 것과 동일한 언어로 작성된 정책을 사용하는 자체 리소스 기반 권한 시스템이 있습니다. 즉, Amazon SNS 정책 및 IAM 정책과 유사한 정책을 적용할 수 있습니다.

**참고**  
모든 사용자가 자신의 계정에 속한 사용자에게 자신의 권한을 위임할 AWS 계정 수 있다는 점을 이해하는 것이 중요합니다. 교차 계정 액세스를 사용하면 추가 사용자를 관리하지 않고도 AWS 리소스 액세스 권한을 공유할 수 있습니다. 교차 계정 액세스 사용에 대한 자세한 정보는 *IAM 사용 설명서*의 [교차 계정 액세스 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html)을 참조하세요.

# Amazon SNS 액세스 제어 사용 사례
<a name="sns-when-to-use-access-control"></a>

리소스에 대한 액세스 권한을 부여하거나 거부하는 방식에는 상당한 유연성을 발휘할 수 있습니다. 그러나 일반적인 사용 사례는 매우 간단합니다.
+ 다른에 특정 유형의 주제 작업(예: 게시) AWS 계정 을 부여하려고 합니다. 자세한 내용은 [주제에 대한 AWS 계정 액세스 권한 부여](sns-access-policy-use-cases.md#sns-grant-aws-account-access-to-topic) 단원을 참조하십시오.
+ 주제에 대한 구독을 HTTPS 프로토콜로만 제한하려는 경우 자세한 내용은 [HTTPS로 구독 제한](sns-access-policy-use-cases.md#sns-limit-subscriptions-to-https) 단원을 참조하십시오.
+ Amazon SNS에서 Amazon SQS 대기열에 메시지를 게시하는 것을 허용하려는 경우 자세한 내용은 [Amazon SQS 대기열에 메시지를 게시합니다.](sns-access-policy-use-cases.md#sns-publish-messages-to-sqs-queue) 단원을 참조하십시오.

# 주요 Amazon SNS 액세스 정책 개념
<a name="sns-access-policy-language-key-concepts"></a>

다음 섹션에서는 액세스 정책 언어를 사용하기 위해 알아두어야 할 개념을 설명합니다. 이 개념들은 논리적 순서대로 제시됩니다. 즉 가장 먼저 알아야 할 용어가 목록의 맨 위에 있습니다.

## 권한
<a name="permissions"></a>

*권한(permission)*은 특정 리소스에 대해 어떤 종류의 액세스를 허용하거나 허용하지 않는 개념입니다. 기본적으로 권한은 "D에 해당된다면 A는 C에게 B를 할 수 있다/없다"의 형식을 띱니다. 예를 들어, *Jane*(A)은 *HTTP 프로토콜을 사용*(D)한다면 *TopicA*(C)에 *게시*(B)할 권한을 갖습니다. Jane이 TopicA에 게시할 때마다 서비스에서는 그녀에게 권한이 있는지 그리고 그 요청이 권한에 설정된 조건을 충족하는지 확인합니다.

## 문
<a name="statement"></a>

*문(statement)*은 단일 권한에 대한 공식적인 설명이며 액세스 정책 언어로 작성됩니다. 설명은 항상 *정책*(다음 개념 설명 참조)이라고 부르는 더 광범위한 컨테이너 문서의 일부로 작성합니다.

## 정책
<a name="policy"></a>

*정책(policy)*은 하나 이상의 문에 대한 컨테이너의 역할을 수행하는 문서(액세스 정책 언어에서 작성됨)입니다. 예를 들어, 하나의 정책이 2개의 설명을 포함할 수 있습니다. 그중 하나는 Jane이 이메일 프로토콜을 사용하여 구독할 수 있다고, 다른 하나는 Bob이 Topic A에 게시할 수 없다고 규정합니다. 다음 그림에서 보여 주는 것처럼, 상응하는 시나리오는 2개의 정책을 갖습니다. 하나는 Jane이 이메일 프로토콜을 사용하여 구독할 수 있다고, 다른 하나는 Bob이 Topic A에 게시할 수 없다고 규정합니다.

![\[Amazon SNS에서 정책 스테이트먼트를 구성하는 두 가지 방법을 비교합니다. 왼쪽의 단일 정책(정책 A)에 두 개의 스테이트먼트가 포함되어 있습니다. 오른쪽에는 동일한 두 스테이트먼트가 두 정책으로 나뉘며 각 정책에는 하나의 스테이트먼트가 포함됩니다. 다이어그램은 이러한 두 접근 방식이 권한을 정의하고 적용하는 방식과 동등하다는 것을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Statement_and_Policy.gif)


정책 문서에는 ASCII 문자만 사용할 수 있습니다. `aws:SourceAccount` 및 `aws:SourceOwner`를 활용하여 비 ASCII 문자가 포함된 다른 AWS 서비스의 ARNs을 플러그인해야 하는 시나리오를 해결할 수 있습니다. [`aws:SourceAccount`과 `aws:SourceOwner` 비교](sns-access-policy-use-cases.md#source-account-versus-source-owner) 간 차이점을 참조하세요.



## Issuer
<a name="issuer"></a>

*발행자(issuer)*는 리소스에 대한 권한을 부여하기 위해 정책을 작성하는 사람입니다. 발급자(정의상)는 항상 리소스 소유자입니다. AWS 는 AWS 서비스 사용자가 소유하지 않은 리소스에 대한 정책을 생성하도록 허용하지 않습니다. John이 리소스 소유자인 경우 John이 해당 리소스에 대한 권한을 부여하기 위해 작성한 정책을 제출할 때 John의 자격 증명을 AWS 인증합니다.

## 위탁자
<a name="principal"></a>

*보안 주체*는 정책에 따라 권한을 받는 사람입니다. 보안 주체는 "A는 D가 적용되는 경우 B에게 B를 할 수 있는 권한이 있습니다."라는 명령문에서 A입니다. 책에서 보안 주체를 "모든 사람"으로 설정할 수 있습니다. 즉, 모든 사람을 나타내는 와일드카드를 지정할 수 있습니다. 예를 들어, 요청자의 신원이 아닌, 요청자의 IP 주소와 같은 다른 식별 특성에 따라 액세스를 제한하려는 경우 이와 같이 할 수 있습니다.

## 작업
<a name="action"></a>

*작업*은 보안 주체가 수행할 수 있는 권한이 있는 작업입니다. "D에 해당된다면 A는 C에게 B를 할 수 있다" 설명에서 작업은 B입니다. 일반적으로 작업은 요청의 작업일 뿐입니다 AWS. 예를 들어, Jane이 `Action``=Subscribe`를 사용하여 Amazon SNS에 요청을 전송합니다. 하나의 정책에 하나 이상의 작업을 지정할 수 있습니다.

## Resource
<a name="resource"></a>

*리소스*는 보안 주체가 액세스를 요청하는 개체입니다. "D에 해당된다면 A는 C에게 B를 할 수 있다" 설명에서 리소스는 C입니다.

## 조건과 키
<a name="conditions"></a>

*조건(conditions)*은 권한에 대한 제한 또는 세부 정보입니다. "D에 해당된다면 A는 C에게 B를 할 수 있다" 설명에서 조건은 D입니다. 정책에서 조건을 지정하는 부분이 가장 세부적이고 복잡할 수 있습니다. 일반적인 조건은 다음 항목과 관련 있습니다.
+ 날짜와 시간(예: 요청이 특정 일보다 먼저 도착해야 함)
+ IP 주소(예: 요청자의 IP 주소가 특정 CIDR 범위에 속해야 함)

*키*는 액세스 제한의 기준이 되는 구체적 특성입니다. 이를테면 요청의 날짜와 시간이 키가 될 수 있습니다.

*조건*과 *키*를 함께 사용하여 제한을 표현합니다. 실제로 제한을 구현하는 방식은 예시를 통해 가장 쉽게 이해할 수 있습니다. 2010년 5월 30일 이전으로 액세스를 제한하려는 경우 `DateLessThan`이라는 조건을 사용합니다. 호출된 키 `aws:CurrentTime`을 사용하여 값 `2010-05-30T00:00:00Z`로 설정합니다. AWS 에서는 사용할 수 있는 조건과 키를 정의합니다. AWS 서비스 자체(예: Amazon SQS 또는 Amazon SNS)는 서비스별 키도 정의할 수 있습니다. 자세한 내용은 [Amazon SNS API 권한: 작업 및 리소스 참조](sns-access-policy-language-api-permissions-reference.md) 단원을 참조하십시오.

## 요청자
<a name="requester"></a>

*요청자는* AWS 서비스에 요청을 보내고 특정 리소스에 대한 액세스를 요청하는 사람입니다. 요청자는에 "D AWS 가 적용되는 경우 B를 C로 할 수 있나요?"라는 요청을 보냅니다.

## 평가
<a name="evaluation"></a>

*평가는* AWS 서비스가 해당 정책에 따라 수신 요청을 거부하거나 허용해야 하는지 여부를 결정하는 데 사용하는 프로세스입니다. 평가 로직에 대한 자세한 내용은 [평가 로직](sns-access-policy-language-evaluation-logic.md)에서 확인하세요.

## Effect
<a name="effect"></a>

*효과(effect)*는 정책 설명에서 평가 시점에 반환해야 할 결과입니다. 정책 설명을 작성할 때 이 값을 지정하며, 가능한 값은 *거부(deny)*와 *허용(allow)*입니다.

예를 들어, 남극 대륙에서 보내는 모든 요청을 *거부*하는 정책 설명을 작성할 수 있습니다(효과=요청에서 남극 대륙에 할당된 IP 주소를 사용할 경우 거부). 또는 남극 대륙에서 *보내지 않은* 모든 요청을 *허용*하라는 정책 설명을 작성할 수 있습니다(효과=남극 대륙에서 보내지 않은 요청이면 허용). 두 설명이 동일한 기능을 할 것처럼 보이지만 액세스 정책 언어 로직에서는 서로 다릅니다. 자세한 내용은 [평가 로직](sns-access-policy-language-evaluation-logic.md) 단원을 참조하십시오.

효과에 대해 지정할 수 있는 값이 2개뿐이지만(허용 또는 거부) 정책 평가 시점에는 서로 다른 3가지 결과가 나올 수 있습니다. *기본 거부*, *허용* 또는 *명시적 거부*입니다. 자세한 정보는 다음 개념과 [평가 로직](sns-access-policy-language-evaluation-logic.md)에서 확인하세요.

## 기본 거부
<a name="Define_SoftDeny"></a>

*기본 거부(default deny)*는 허용 또는 명시적 거부가 없는 정책의 기본 결과입니다.

## 허용
<a name="allow"></a>

*허용(allow)*은 효과=기술된 모든 조건을 충족할 경우 허용인 설명의 결과입니다. 예: 2010년 4월 30일 오후 1:00 이전에 수신된 요청이면 허용. 허용은 모든 기본 거부를 무시하지만 명시적 거부는 무시하지 않습니다.

## 명시적 거부
<a name="Define_HardDeny"></a>

*명시적 거부(explicit deny)*는 효과=기술된 모든 조건을 충족할 경우 거부인 설명의 결과입니다. 예: 남극 대륙에서 보낸 모든 요청 거부. 남극 대륙에서 보낸 모든 요청은 다른 어떤 정책에서 허용하더라도 항상 거부됩니다.

# Amazon SNS 액세스 제어 아키텍처 개요
<a name="sns-access-policy-language-architectural-overview"></a>

다음 그림과 표는 상호 작용을 통해 리소스에 대한 액세스 제어를 수행하는 주요 구성 요소에 대해 설명합니다.

![\[AWS 서비스내의 액세스 제어 흐름입니다. 이는 리소스 소유자가 정책을 통해 리소스(예: Amazon SQS 대기열)를 관리하는 방법을 보여줍니다. 이러한 정책은 AWS 서비스의 액세스 정책 언어 평가 코드로 평가되어 요청자의 수신 요청에 리소스에 대한 액세스 권한을 부여해야 하는지 또는 거부해야 하는지 여부를 결정합니다. 다이어그램에는 리소스 소유자, 리소스, 정책, 수신 요청, 평가 로직에 해당하는 번호가 매겨진 요소가 포함되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Arch_Overview.gif)



|  |  | 
| --- |--- |
| 1 |  리소스 소유자  | 
| 2 |  리소스( AWS 서비스 내에 포함됨. 예: Amazon SQS 대기열).  | 
| 3 |  정책. 일반적으로 리소스당 하나의 정책이 있지만, 여러 개의 정책을 가질 수도 있습니다. AWS 서비스 자체는 정책을 업로드하고 관리하는 데 사용하는 API를 제공합니다.  | 
| 4 |  요청자 및 AWS 서비스에 대한 수신 요청.  | 
| 5 |  액세스 정책 언어 평가 코드입니다. 이는 서비스 내에서 해당 정책을 기준으로 수신 요청을 AWS 평가하고 요청자가 리소스에 액세스할 수 있는지 여부를 결정하는 코드 세트입니다. 서비스에서 결정을 내리는 방식에 대한 자세한 내용은 [평가 로직](sns-access-policy-language-evaluation-logic.md)에서 확인하세요.  | 

# Amazon SNS에서 액세스 정책 언어 사용
<a name="sns-access-policy-language-using"></a>

다음 그림과 표는 액세스 정책 언어를 사용하여 액세스를 제어하는 일반적인 프로세스를 설명합니다.

![\[액세스 제어가 AWS에서 액세스 정책 언어를 사용하여 작동하는 방법에 대한 6단계 프로세스입니다. 리소스에 대한 정책을 쓰고 시스템에 추가한 다음, 요청자의 요청 단계, AWS 서비스 가 해당 정책 평가, 마지막으로 평가에 따라 요청에 대해 권한을 허용하거나 거부하는 서비스를 진행합니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Basic_Flow.gif)



**액세스 정책 언어를 통한 액세스 제어를 사용하는 프로세스**  

|  |  | 
| --- |--- |
|  1  |  리소스에 대한 정책을 작성합니다. 예를 들어, Amazon SNS 주제에 대한 권한을 지정하는 정책을 작성합니다.  | 
|  2  |  정책을에 업로드합니다 AWS.  AWS 서비스 자체는 정책을 업로드하는 데 사용하는 API를 제공합니다. 예를 들어 Amazon SNS `SetTopicAttributes` 작업을 사용하여 특정 Amazon SNS 주제에 대한 정책을 업로드합니다.  | 
|  3  |  어떤 사람이 리소스를 사용하기 위해 요청을 전송합니다. 예를 들어, 사용자가 주제 중 하나를 사용하기 위해 Amazon SNS에 요청을 전송합니다.  | 
|  4  |   AWS 서비스는 요청에 적용할 수 있는 정책을 결정합니다. 예를 들어, Amazon SNS는 사용 가능한 모든 Amazon SNS 정책을 살펴보고 어떤 정책을 적용할 수 있는지를 결정합니다(리소스가 무엇이고 요청자가 누구인지 등을 기준으로).  | 
|  5  |   AWS 서비스는 정책을 평가합니다. 예를 들어, Amazon SNS는 정책을 평가하고 요청자가 주제를 사용하도록 허용할지 여부를 결정합니다. 결정 로직에 대한 자세한 내용은 [평가 로직](sns-access-policy-language-evaluation-logic.md)에서 확인하세요.  | 
|  6  |   AWS 서비스가 요청을 거부하거나 계속 처리합니다. 이를테면 정책 평가 결과에 따라 서비스가 요청자에게 "액세스 거부" 오류로 반환되거나 계속 요청을 처리합니다.  | 

# 평가 로직
<a name="sns-access-policy-language-evaluation-logic"></a>

평가 시점의 목표는 권한 요청(grant request)을 허용 또는 거부할지를 결정하는 것입니다. 평가 로직에서는 몇 가지 기본 규칙을 따릅니다.
+ 기본적으로, 본인을 제외한 사람이 리소스를 사용하겠다고 요청하면 모두 거부됩니다.
+ 허용은 모든 기본 거부를 무시합니다.
+ 명시적 거부는 모든 허용을 무시합니다.
+ 정책이 평가되는 순서는 중요하지 않습니다.

그러한 결정이 내려지는 방법은 다음 순서도와 설명에서 자세히 다룹니다.

![\[리소스에 AWS 대한 액세스 요청을 허용 또는 거부해야 하는지 여부를 결정하기 위해에서 사용하는 의사 결정 프로세스를 보여줍니다. 기본값인 거부로 시작하여 해당 정책에서 명시적 거부가 있는지 확인한 다음, 허용 지침을 찾고 마지막으로 허용이 발견되지 않으면 요청이 기본적으로 거부됩니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Evaluation_Flow.gif)



|  |  | 
| --- |--- |
| 1 |  결정은 기본 거부에서 시작합니다.  | 
| 2 |   그러면 적용 코드에서 리소스, 보안 주체, 작업, 조건을 고려하여 해당 요청에 적용 가능한 모든 정책을 평가합니다. 적용 코드에서 정책을 평가하는 순서는 중요하지 않습니다.  | 
| 3 |   적용 코드는 이 모든 정책에서 해당 요청에 적용될 명시적 거부 명령을 찾습니다. 하나라도 찾으면 적용 코드는 "거부" 결정을 반환하고 프로세스가 종료됩니다. 이것이 명시적 거부입니다. 자세한 정보는 [명시적 거부](sns-access-policy-language-key-concepts.md#Define_HardDeny)에서 확인하세요.  | 
| 4 |  명시적 거부가 없을 경우 적용 코드는 해당 요청에 적용될 "허용" 명령을 찾습니다. 하나라도 찾으면 적용 코드는 "허용" 결정을 반환하고 프로세스가 완료됩니다. 서비스에서는 계속 요청을 처리합니다.  | 
| 5 |  허용이 없을 경우 최종 결정은 "거부"입니다. 명시적 거부 또는 허용이 없으므로 *기본 거부*로 간주됩니다. 자세한 정보는 [기본 거부](sns-access-policy-language-key-concepts.md#Define_SoftDeny)에서 확인하세요.  | 

## 명시적 거부와 기본 거부의 상호 작용
<a name="denials"></a>

어떤 정책이 해당 요청에 직접적으로 적용되지 않을 경우 그 결과는 기본 거부입니다. 예를 들어 사용자가 Amazon SNS 사용을 요청하지만 주제의 정책이 사용자의를 AWS 계정 전혀 참조하지 않는 경우 해당 정책은 기본 거부로 이어집니다.

설명의 조건이 충족되지 않을 경우에도 정책의 결과는 기본 거부입니다. 설명의 모든 조건이 충족될 경우, 정책의 결과는 정책에 포함된 효과 요소의 값에 따라 허용 또는 명시적 거부가 됩니다. 정책에서는 어떤 조건이 충족되지 않을 때 해야 할 일을 지정하지 않으므로, 그러한 경우 결과는 기본 거부가 됩니다.

이를테면 남극 대륙에서 보내는 요청을 거부하고 싶습니다. 남극 대륙에서 오지 않은 요청만 허용하도록 정책을 작성합니다(정책 A1). 다음 다이어그램은 이 정책을 보여줍니다.

![\[남극 대륙에서 오는 요청이 아니라면 요청을 허용하는 정책(정책 A1)을 보여줍니다. '허용' 영향이 미치려면 요청이 남극에서 시작되어서는 안 된다는 조건을 보여줍니다. 그렇지 않으면 기본 작업은 요청을 거부하는 것이기 때문입니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override_1.gif)


누군가가 미국에서 요청을 보낼 경우 남극 대륙에서 온 요청이 아니므로 조건을 충족합니다. 따라서 요청이 허용됩니다. 누군가가 남극 대륙에서 요청을 보낼 경우 조건을 충족하며 정책의 결과는 기본 거부가 됩니다.

다음 다이어그램처럼 정책을 다시 작성하여(정책 A2) 결과를 명시적 거부로 바꿀 수 있습니다. 이 정책은 남극 대륙에서 온 요청을 명시적으로 거부합니다.

![\[요청이 남극에서 온 경우 요청을 명시적으로 거부하는 정책(정책 A2)을 보여줍니다. 조건이 충족되면(요청이 남극에서 시작됨) 정책이 명시적 거부를 초래한다는 것을 보여줍니다. 즉, 이러한 상황에서는 요청이 항상 거부됩니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override_2.gif)


누군가가 남극 대륙에서 요청을 보낼 경우 조건을 충족하므로 정책의 결과는 명시적 거부입니다.

기본 거부는 허용으로 재정의할 수 있지만 명시적 거부는 재정의할 수 없기 때문에 기본 거부와 명시적 거부를 반드시 구분해야 합니다. 예를 들어, 2010년 6월 1일에 도착하는 요청을 허용하는 또 다른 정책이 있다고 가정하겠습니다. 이 정책이 남극 대륙의 액세스를 제한하는 정책과 결합될 경우 종합적인 결과는 어떻게 됩니까? 날짜 기반 정책(정책 B)을 앞의 정책 A1 및 A2와 결합했을 때 종합적인 결과를 비교해보겠습니다. 시나리오 1은 정책 A1과 정책 B를, 시나리오 2에서는 정책 A2를 정책 B와 결합합니다. 다음 그림과 설명은 남극 대륙에서 보낸 요청이 2010년 6월 1일에 도착했을 때의 결과를 보여 줍니다.

![\[정책이 요청의 오리진(남극)과 요청 날짜(2010년 6월 1일)를 기준으로 액세스를 제한하는 두 시나리오를 비교합니다. 시나리오 1에서 정책을 조합하면 기본값 거부가 허용으로 재정의되어 요청을 허용합니다. 시나리오 2에서 한 정책의 명시적 거부는 다른 정책의 허용을 재정의하여 요청이 거부됩니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override.gif)


시나리오 1에서는 이 섹션에서 설명한 것처럼 정책 A1이 기본 거부를 반환합니다. 정책 B는 허용을 반환합니다. 이 정책의 정의에 따라 2010년 6월 1일에 도착한 요청을 허용하기 때문입니다. 정책 B의 허용은 정책 A1의 기본 거부를 무시하므로 이 요청은 허용됩니다.

시나리오 2에서는 앞서 이 섹션에서 설명한 것처럼 정책 A2가 명시적 거부를 반환합니다. 역시 정책 B는 허용을 반환합니다. 정책 A2의 명시적 거부가 정책 B의 허용을 무시하므로 요청은 거부됩니다.

# Amazon SNS 액세스 제어의 예제 사례
<a name="sns-access-policy-use-cases"></a>

이 섹션에서는 몇 가지 예를 통해 액세스 제어의 일반적인 사용 사례를 보여줍니다.

## 주제에 대한 AWS 계정 액세스 권한 부여
<a name="sns-grant-aws-account-access-to-topic"></a>

Amazon SNS에 주제가 있고 하나 이상의 AWS 계정 가 해당 주제에 대해 메시지 게시와 같은 특정 작업을 수행하도록 허용하려고 한다고 가정해 보겠습니다. Amazon SNS API 작업 `AddPermission`을 사용하여 이렇게 할 수 있습니다.

`AddPermission` 작업을 사용하면 주제, AWS 계정 ID 목록, 작업 목록, 레이블을 지정할 수 있습니다. 그러면 Amazon SNS에서 자동으로 새 정책 스테이트먼트를 만들어 주제의 액세스 제어 정책에 추가합니다. 정책 스테이트먼트를 직접 작성할 필요가 없습니다. Amazon SNS가 이를 처리합니다. 추후에 정책을 제거해야 하는 경우 `RemovePermission`을 직접적으로 호출하고 권한을 추가할 때 사용된 레이블을 제공하여 제거할 수 있습니다.

예를 들어 주제 arn:aws:sns:us-east-2:444455556666:MyTopic`AddPermission`에서를 호출하고 AWS 계정 ID 1111-2222-3333, `Publish` 작업 및 레이블을 지정하면 `grant-1234-publish` Amazon SNS는 다음 정책 설명을 생성하고 주제의 액세스 제어 정책에 삽입합니다.

```
{
  "Statement": [{
    "Sid": "grant-1234-publish",
    "Effect": "Allow",
    "Principal": {
      "AWS": "111122223333"
    },
    "Action": ["sns:Publish"],
    "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic"
  }]
}
```

이 문이 추가되면 AWS 계정 1111-2222-3333에 주제에 메시지를 게시할 수 있는 권한이 부여됩니다.

**추가 정보:**
+ **사용자 지정 정책 관리:** `AddPermission`은 권한을 부여하는 데 편리하지만, 조건을 추가하거나 특정 IAM 역할 또는 서비스에 권한을 부여하는 등 더 복잡한 시나리오에 대해 주제의 액세스 제어 정책을 수동으로 관리하는 것이 대개 더 유용합니다. `SetTopicAttributes` API를 사용하여 정책 속성을 직접 업데이트하여 이 작업을 수행할 수 있습니다.
+ **보안 모범 사례:** 신뢰할 수 있는 AWS 계정 또는 엔터티만 Amazon SNS 주제에 액세스할 수 있도록 권한을 부여할 때는 주의해야 합니다. 보안을 유지하기 위해 주제에 연결된 정책을 정기적으로 검토하고 감사를 수행하세요.
+ **정책 제한:** Amazon SNS 정책의 크기와 복잡성에는 제한이 있다는 점을 참고하세요. 많은 권한 또는 복잡한 조건을 추가해야 하는 경우 정책이 이러한 제한 범위 내에 있어야 합니다.

## HTTPS로 구독 제한
<a name="sns-limit-subscriptions-to-https"></a>

Amazon SNS 주제에 대한 알림 전송 프로토콜을 HTTPS로 제한하려면 사용자 지정 정책을 만들어야 합니다. Amazon SNS의 `AddPermission` 작업에서는 주제에 대한 액세스 권한을 부여할 때 프로토콜 제한 사항을 지정할 수 없습니다. 따라서 이 제한 사항을 적용하는 정책을 수동으로 쓴 다음 `SetTopicAttributes` 작업을 사용하여 정책을 주제에 적용해야 합니다.

HTTPS에 대한 구독을 제한하는 정책을 만드는 방법은 다음과 같습니다.

1. **정책 쓰기** 정책은 액세스 권한을 부여할 AWS 계정 ID를 지정하고 HTTPS 구독만 허용되는 조건을 적용해야 합니다. 다음은 사용된 프로토콜이 HTTPS인 경우에만 AWS 계정 ID 1111-2222-3333에 주제를 구독할 수 있는 권한을 부여하는 예제 정책입니다.

   ```
   {
     "Statement": [{
       "Sid": "Statement1",
       "Effect": "Allow",
       "Principal": {
         "AWS": "111122223333"
       },
       "Action": ["sns:Subscribe"],
       "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
       "Condition": {
         "StringEquals": {
           "sns:Protocol": "https"
         }
       }
     }]
   }
   ```

1. **정책 적용** Amazon SNS API의 `SetTopicAttributes` 작업을 사용하여 이 정책을 주제에 적용합니다. 주제의 `Policy` 속성을 만든 JSON 정책으로 설정합니다.

   ```
   snsClient.setTopicAttributes(SetTopicAttributesRequest.builder()
           .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic")
           .attributeName("Policy")
           .attributeValue(jsonPolicyString)  // The JSON policy as a string
           .build());
   ```

**추가 정보:**
+ **액세스 제어 사용자 지정** 이 접근 방식을 사용하면 `AddPermission` 작업만으로는 불가능한 구독 프로토콜 제한 사항 등의 보다 세분화된 액세스 제어를 적용할 수 있습니다. 사용자 지정 정책은 프로토콜 적용 또는 IP 주소 제한 등의 특정 조건이 필요한 시나리오에 유연성을 더합니다.
+ **보안 모범 사례** HTTPS 구독을 제한하면 전송 중 데이터가 암호화되어 알림의 보안이 강화됩니다. 주제 정책을 정기적으로 검토하여 보안 및 규정 준수 요구 사항을 충족합니다.
+ **정책 테스트** 프로덕션 환경에서 정책을 적용하기 전에 먼저 개발 환경에서 정책을 테스트하여 예상대로 작동하는지 확인합니다. 이렇게 하면 우발적인 액세스 문제 또는 의도하지 않은 제한을 방지할 수 있습니다.

## Amazon SQS 대기열에 메시지를 게시합니다.
<a name="sns-publish-messages-to-sqs-queue"></a>

Amazon SNS 주제의 메시지를 Amazon SQS 대기열에 게시하려면 Amazon SQS 대기열에 대한 적절한 권한을 구성해야 합니다. Amazon SNS와 Amazon SQS 모두 AWS의 액세스 제어 정책 언어를 사용하지만 Amazon SNS 주제에서 메시지를 전송할 수 있도록 Amazon SQS 대기열에 정책을 명시적으로 설정해야 합니다. Amazon SNS 

`SetQueueAttributes` 작업을 사용하여 Amazon SQS 대기열에 사용자 지정 정책을 적용하여 이를 충족할 수 있습니다. Amazon SNS와 달리 Amazon SQS는 조건이 있는 정책 스테이트먼트를 생성하기 위한 `AddPermission` 작업을 지원하지 않습니다. 따라서 정책을 수동으로 써야 합니다.

다음은 Amazon SNS에 대기열로 메시지를 보낼 수 있는 권한을 부여하는 Amazon SQS 정책의 예제입니다. 이 정책은 Amazon SNS 주제가 아닌 Amazon SQS 대기열과 연결되어 있으니 참고하시기 바랍니다. 지정된 작업은 Amazon SQS 작업이며, 리소스는 대기열의 Amazon 리소스 이름(ARN)입니다. `GetQueueAttributes` 작업을 사용하여 대기열의 ARN을 검색할 수 있습니다.

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

이 정책은 `aws:SourceArn` 조건을 사용하여 SQS 대기열에 보내지는 메시지의 출처에 따라 해당 대기열에 대한 액세스를 제한합니다. 이렇게 하면 지정된 SNS 주제(이 경우 arn:aws:sns:us-east-2:444455556666:MyTopic)에서 온 메시지만 대기열로 전달될 수 있습니다.

**추가 정보:**
+ **대기열 ARN** `GetQueueAttributes` 작업을 사용하여 Amazon SQS 대기열의 적절한 ARN을 검색해야 합니다. 이 ARN은 적절한 권한을 설정하는 데 중요합니다.
+ **보안 모범 사례** 정책을 설정할 경우 항상 최소 권한 원칙을 따르세요. Amazon SQS 대기열과 상호 작용하는 데 필요한 권한만 Amazon SNS 주제에 부여하고 정책을 정기적으로 검토하여 최신 상태이고 안전한지 확인합니다.
+ **Amazon SNS의 기본 정책** Amazon SNS는 다른 AWS 서비스 또는 계정이 새로 생성된 주제에 액세스할 수 있도록 허용하는 기본 정책을 자동으로 부여하지 않습니다. 기본적으로 Amazon SNS 주제는 권한 없이 생성됩니다. 즉, 해당 주제는 비공개이며 해당 주제를 생성한 계정에서만 액세스할 수 있습니다. 다른 AWS 서비스, 계정 또는 보안 주체에 대한 액세스를 활성화하려면 액세스 정책을 명시적으로 정의하고 주제에 연결해야 합니다. 이는 최소 권한 원칙에 따라 기본적으로 의도하지 않은 액세스 권한이 부여되지 않도록 합니다.
+ **테스트 및 검증** 정책을 설정한 후 Amazon SNS 주제에 메시지를 게시하고 Amazon SQS 대기열에 성공적으로 전달되었는지 확인하여 통합을 테스트합니다. 이렇게 하면 정책이 올바르게 구성되었는지 확인하는 데 도움이 됩니다.

## Amazon S3 이벤트 알림을 주제에 게시하도록 허용
<a name="sns-allow-s3-bucket-to-publish-to-topic"></a>

다른의 Amazon S3 버킷이 Amazon SNS 주제에 이벤트 알림을 게시 AWS 계정 하도록 허용하려면 그에 따라 주제의 액세스 정책을 구성해야 합니다. 여기에는 특정 AWS 계정 에서 Amazon S3 서비스에 권한을 부여하는 사용자 지정 정책을 쓴 다음, 이 정책을 Amazon SNS 주제에 적용하는 작업이 포함됩니다.

설정 방법은 다음과 같습니다.

1. **정책 쓰기** 정책을 통해 Amazon SNS 주제에 게시하는 데 필요한 권한을 Amazon S3 서비스(s3.amazonaws.com)에 부여해야 합니다. `SourceAccount` 조건을 사용하여 Amazon S3 버킷을 소유 AWS 계정한 지정된 만 주제에 알림을 게시할 수 있도록 합니다.

   다음은 정책의 예입니다.

   ```
   {
     "Statement": [{
       "Effect": "Allow",
        "Principal": { 
         "Service": "s3.amazonaws.com" 
       },
       "Action": "sns:Publish",
       "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic",
       "Condition": {
         "StringEquals": {
           "AWS:SourceAccount": "444455556666"
         }       
       }
     }]
   }
   ```
   + **주제 소유자** - 111122223333은 Amazon SNS 주제를 소유한 AWS 계정 ID입니다.
   + **Amazon S3 버킷 소유자 **- 444455556666은 Amazon S3 버킷 전송 알림을 소유한 AWS 계정 ID입니다.

1. **정책 적용** `SetTopicAttributes` 작업을 사용하여 Amazon SNS 주제에 이 정책을 설정합니다. 이렇게 하면 주제의 액세스 제어가 업데이트되어 사용자 지정 정책에 지정된 권한이 포함됩니다.

   ```
   snsClient.setTopicAttributes(SetTopicAttributesRequest.builder()
           .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic")
           .attributeName("Policy")
           .attributeValue(jsonPolicyString)  // The JSON policy as a string
           .build());
   ```

**추가 정보:**
+ **`SourceAccount` 조건 사용** `SourceAccount` 조건은이 경우 지정된 AWS 계정 (444455556666)에서 시작된 이벤트만 Amazon SNS 주제를 트리거할 수 있도록 합니다. 이는 비승인 계정이 주제로 알림을 보내지 못하도록 하는 보안 조치입니다.
+ **`SourceAccount`를 지원하는 기타 서비스** `SourceAccount` 조건은 다음 서비스에서 지원됩니다. 발신 계정을 기반으로 Amazon SNS 주제에 대한 액세스를 제한하려는 경우 이 조건을 사용하는 것이 중요합니다.
  + Amazon API Gateway
  + Amazon CloudWatch
  + Amazon DevOps Guru
  + Amazon EventBridge
  + Amazon GameLift Servers
  + Amazon Pinpoint SMS 및 음성 API
  + Amazon RDS
  + Amazon Redshift
  + Amazon Glacier
  + Amazon SES
  + Amazon Simple Storage Service
  + AWS CodeCommit
  + Directory Service
  + AWS Lambda
  + AWS Systems Manager Incident Manager
+ **테스트 및 검증** 정책을 적용한 후 Amazon S3 버킷에서 이벤트를 트리거하고 Amazon SNS 주제에 성공적으로 게시되었는지 확인하여 설정을 테스트합니다. 이렇게 하면 정책이 올바르게 구성되었는지 확인하는 데 도움이 됩니다.
+ **보안 모범 사례** Amazon SNS 주제 정책을 정기적으로 검토 및 감사하여 보안 요구 사항을 준수하는지 확인합니다. 보안 작업을 유지하려면 신뢰할 수 있는 계정 및 서비스로만 액세스를 제한하는 것이 중요합니다.

## Amazon SES가 다른 계정이 소유한 주제에 게시하도록 허용
<a name="sns-allow-specified-service-to-publish-to-topic"></a>

다른 AWS 서비스 이 소유한 주제에 게시하도록 허용할 수 있습니다 AWS 계정. 111122223333 계정에 로그인하고 Amazon SES 를 연 다음 이메일을 생성했다고 가정합니다. 444455556666 계정이 소유한 Amazon SNS 주제에 이 이메일에 대한 알림을 게시하려면 다음과 같은 정책을 생성해야 합니다. 이 작업을 수행하려면 보안 주체(다른 서비스)와 각 리소스의 소유권에 대한 정보를 제공해야 합니다.. 이 `Resource` 문은 주제 소유자의 계정 ID인 444455556666을 포함하는 주제 ARN을 제공합니다. 이 `"aws:SourceOwner": "111122223333"` 문은 계정이 해당 이메일을 소유하도록 지정합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "ses.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
      "Condition": {
        "StringEquals": {
          "aws:SourceOwner": "111122223333"
        }
      }
    }
  ]
}
```

------

Amazon SNS에 이벤트를 게시할 때 다음 서비스가 `aws:SourceOwner`를 지원합니다.
+ Amazon API Gateway
+ Amazon CloudWatch
+ Amazon DevOps Guru
+ Amazon GameLift Servers
+ Amazon Pinpoint SMS 및 음성 API
+ Amazon RDS
+ Amazon Redshift
+ Amazon SES
+ AWS CodeCommit
+ Directory Service
+ AWS Lambda
+ AWS Systems Manager Incident Manager

## `aws:SourceAccount`과 `aws:SourceOwner` 비교
<a name="source-account-versus-source-owner"></a>

**중요**  
`aws:SourceOwner`는 더 이상 사용되지 않으며 새 서비스는 `aws:SourceArn` 및 `aws:SourceAccount`를 통해서만 Amazon SNS와 통합할 수 있습니다. Amazon SNS는 현재 `aws:SourceOwner`를 지원하는 기존 서비스에 대해 이전 버전과의 호환성을 여전히 유지합니다.

`aws:SourceAccount` 및 `aws:SourceOwner` 조건 키는 Amazon SNS 주제에 게시할 때 일부 AWS 서비스 에서 각각 설정됩니다. 지원되는 경우 값은 서비스를 대신하여 데이터를 게시하는 12자리 AWS 계정 ID가 됩니다. 일부 서비스는 하나를 지원하고 일부는 다르게 지원합니다.
+ Amazon S3 알림의 사용 방식`aws:SourceAccount`과 해당 조건을 지원하는 AWS 서비스 목록은 [Amazon S3 이벤트 알림을 주제에 게시하도록 허용](#sns-allow-s3-bucket-to-publish-to-topic) 섹션을 참조하세요.
+ Amazon SES가 `aws:SourceOwner`를 사용하는 [Amazon SES가 다른 계정이 소유한 주제에 게시하도록 허용](#sns-allow-specified-service-to-publish-to-topic) 방법과 해당 조건을 지원하는 AWS 서비스 목록은 섹션을 참조하세요.

## 의 조직 내 계정이 다른 계정의 주제에 게시 AWS Organizations 하도록 허용
<a name="sns-allow-organization-to-publish-to-topic-in-another-account"></a>

이 AWS Organizations 서비스는 결제를 중앙에서 관리하고, 액세스 및 보안을 제어하고,에서 리소스를 공유하는 데 도움이 됩니다 AWS 계정.

[Organizations 콘솔](https://console.aws.amazon.com/organizations/)에서 조직 ID를 찾을 수 있습니다. 자세한 정보는 [관리 계정에서 조직 세부 정보 보기](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_org)를 참조하세요.

이 예제에서는 조직의 모든가 계정 AWS 계정 의 Amazon SNS 주제에 게시할 `myOrgId` 수 `MyTopic` 있습니다`444455556666`. 이 정책은 `aws:PrincipalOrgID` 전역 조건 키를 사용하여 조직 ID 값을 확인합니다.

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "myOrgId"
                }
            }
        }
    ]
}
```

## 모든 CloudWatch 경보가 다른 계정의 주제에 게시할 수 있도록 허용
<a name="sns-allow-cloudwatch-alarm-to-publish-to-topic-in-another-account"></a>

다음 단계에 따라 서로 다른 AWS 계정에서 CloudWatch 경보를 사용하여 Amazon SNS 주제를 간접 호출합니다. 이 예제에서는 두 개의 계정을 사용합니다.
+ **계정 A**는 CloudWatch 경보를 생성하는 데 사용됩니다.
+ **계정 B**는 SNS 주제를 생성하는 데 사용됩니다.

**계정 B에서 SNS 주제 생성**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **토픽**을 선택한 다음, **토픽 생성**을 선택합니다.

1. 주제 유형으로 **표준**을 선택한 다음 주제 이름을 생성합니다.

1. **주제 생성**을 선택한 다음 주제의 **ARN**을 복사합니다.

1. 탐색 창에서 **구독**을 선택하고 나서 **구독 생성**을 선택합니다.

1. 주제 ARN 섹션에서 **주제 ARN**을 추가하고 **이메일**을 프로토콜로 선택한 다음 **이메일 주소를 입력**합니다.

1. **구독 생성을**을 선택하여 **구독을 확인**할 이메일을 확인합니다.

**계정 A에서 CloudWatch 경보 생성**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보**를 선택한 다음 **경보 생성**을 선택합니다.

1. 아직 경보를 생성하지 않았다면 지금 생성합니다. 그렇지 않으면 **지표**를 선택한 다음 임곗값 및 비교 파라미터에 대한 세부 정보를 제공합니다.

1. **작업 구성**의 **알림**에서 **주제 ARN 사용을 선택하여 다른 계정에 알림**을 선택한 뒤 계정 B의 **주제 ARN**을 입력합니다.

1. 경보의 이름을 생성한 다음 **경보 생성**을 선택합니다.

**계정 B에서 SNS 주제의 액세스 정책 업데이트**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **주제**를 선택한 후 주제를 선택합니다.

1. **편집**을 선택한 후 정책에 다음을 추가합니다.

**참고**  
아래 정책의 예제 값을 사용자의 값으로 바꿉니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_policy_ID",
    "Statement": [
        {
            "Sid": "__default_statement_ID",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "SNS:GetTopicAttributes",
                "SNS:SetTopicAttributes",
                "SNS:AddPermission",
                "SNS:RemovePermission",
                "SNS:DeleteTopic",
                "SNS:Subscribe",
                "SNS:ListSubscriptionsByTopic",
                "SNS:Publish"
            ],
            "Resource": "arn:aws:cloudwatch:us-west-1:111122223333:alarm:",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cloudwatch:us-west-1:111122223333:alarm:"
                }
            }
        }
    ]
}
```

------

**경보 테스트**

경보를 테스트하려면 지표 데이터 포인트를 기반으로 경보 임곗값을 변경하거나 경보 상태를 수동으로 변경합니다. 경보 임곗값 또는 경보 상태를 변경하면 이메일 알림이 수신됩니다.

**로컬 Amazon SNS 주제 사용 및 메시지 전달을 위한 해결 방법**

다음 단계에 따라 CloudWatch 경보에 대해 교차 계정 Amazon SNS 알림을 활성화합니다.

1. **CloudWatch 경보**(111122223333)와 동일한 계정에 [**Amazon SNS 주제**](sns-create-topic.md)를 생성합니다.

1. [**Lambda 함수**](lambda-console.md) 또는 [Amazon EventBridge 규칙](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-s3-object-created-tutorial.html)을 해당 Amazon SNS 주제에 구독합니다.

1. 그러면 Lambda 함수 또는 EventBridge 규칙이 대상 계정(444455556666)의 Amazon SNS 주제에 메시지를 게시할 수 있습니다.

## 특정 VPC 엔드포인트에서만 Amazon SNS 주제에 게시할 수 있도록 제한
<a name="sns-restrict-publication-only-from-specified-vpc-endpoint"></a>

이 경우 계정 444455556666의 주제는 ID `vpce-1ab2c34d`의 VPC 엔드포인트에서만 게시할 수 있습니다.

```
{
  "Statement": [{
    "Effect": "Deny",
    "Principal": "*",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
    "Condition": {
      "StringNotEquals": {
        "aws:sourceVpce": "vpce-1ab2c34d"
      }
    }
  }]
}
```

# Amazon SNS에서 IAM을 사용하는 방법
<a name="security_iam_service-with-iam"></a>

IAM을 사용하여 Amazon SNS에 대한 액세스를 관리하기 전에 Amazon SNS에서 사용할 수 있는 IAM 기능에 대해 알아봅니다.






**Amazon SNS와 함께 사용할 수 있는 IAM 기능**  

| IAM 특성 | Amazon SNS 지원 | 
| --- | --- | 
|  [자격 증명 기반 정책](security-iam.md#security_iam_service-with-iam-id-based-policies)  |   예  | 
|  [리소스 기반 정책](security-iam.md#security_iam_service-with-iam-resource-based-policies)  |  예  | 
|  [정책 작업](security-iam.md#security_iam_service-with-iam-id-based-policies-actions)  |   예  | 
|  [정책 리소스](security-iam.md#security_iam_service-with-iam-id-based-policies-resources)  |   예  | 
|  [정책 조건 키(서비스별)](security-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   예  | 
|  [ACL](security-iam.md#security_iam_service-with-iam-acls)  |   아니요   | 
|  [ABAC(정책 내 태그)](security-iam.md#security_iam_service-with-iam-tags)  |   부분적  | 
|  [임시 자격 증명](security-iam.md#security_iam_service-with-iam-roles-tempcreds)  |   예  | 
|  [엔터티 권한](security-iam.md#security_iam_service-with-iam-principal-permissions)  |   예  | 
|  [서비스 역할](security-iam.md#security_iam_service-with-iam-roles-service)  |   예  | 
|  [서비스 연결 역할](security-iam.md#security_iam_service-with-iam-roles-service-linked)  |   아니요   | 

Amazon SNS 및 기타 AWS 서비스에서 대부분의 IAM 기능을 사용하는 방법을 전체적으로 알아보려면 *IAM 사용 설명서*의 [AWS IAM으로 작업하는 서비스를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 참조하세요.

# AWS 에 대한 관리형 정책 Amazon Simple Notification Service
<a name="security-iam-awsmanpol"></a>



 AWS 관리형 정책은에서 생성하고 관리하는 독립 실행형 정책입니다 AWS. AWS 관리형 정책은 사용자, 그룹 및 역할에 권한 할당을 시작할 수 있도록 많은 일반적인 사용 사례에 대한 권한을 제공하도록 설계되었습니다.

 AWS 관리형 정책은 모든 AWS 고객이 사용할 수 있으므로 특정 사용 사례에 대해 최소 권한을 부여하지 않을 수 있습니다. 사용 사례에 고유한 [고객 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)을 정의하여 권한을 줄이는 것이 좋습니다.

 AWS 관리형 정책에 정의된 권한은 변경할 수 없습니다. 가 관리형 정책에 정의된 권한을 AWS 업데이트하는 AWS 경우 업데이트는 정책이 연결된 모든 보안 주체 자격 증명(사용자, 그룹 및 역할)에 영향을 줍니다. AWS AWS 서비스 는 새가 시작되거나 기존 서비스에 새 API 작업을 사용할 수 있게 될 때 AWS 관리형 정책을 업데이트할 가능성이 높습니다.

자세한 내용은 *IAM 사용자 가이드*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

 





## AWS 관리형 정책: AmazonSNSFullAccess
<a name="security-iam-awsmanpol-AmazonSNSFullAccess"></a>

`AmazonSNSFullAccess`는를 사용하여 Amazon SNS에 대한 전체 액세스를 제공합니다 AWS Management Console. 이 정책에는 Amazon SNS를 사용하여 호출할 AWS 최종 사용자 메시징 SMS 때에 대한 다음과 같은 읽기 및 쓰기 작업도 포함됩니다. 사용자, 그룹, 역할에 이 정책을 연결할 수 있습니다.

** 권한 세부 정보**

다음 권한은 Amazon SNS API 사용 시에만 적용됩니다.
+ `sns:*` - Amazon SNS와 관련된 모든 작업을 수행할 수 있는 전체 권한을 허용합니다. 이 와일드카드(\$1)는 사용자가 모든 가능한 Amazon SNS 작업을 실행할 수 있음을 의미합니다.
+ `sms-voice:DescribeVerifiedDestinationNumbers` - AWS 계정내에서 SMS 메시지 전송이 확인된 전화번호 목록을 검색할 수 있습니다.
+ `sms-voice:CreateVerifiedDestinationNumber` - 내에서 SMS 메시징 서비스에 사용할 새 전화번호를 확인할 수 있습니다 AWS.
+ `sms-voice:SendDestinationNumberVerificationCode` - AWS내에서 SMS 메시징에 대해 확인 중인 전화번호로 확인 코드를 보낼 수 있습니다.
+ `sms-voice:SendTextMessage` - 새 문자 메시지를 만들어 수신자의 전화번호로 보낼 수 있습니다. `SendTextMessage`는 간접적으로 호출할 때마다 한 수신자에게 SMS 메시지만 전송합니다.
+ `sms-voice:DeleteVerifiedDestinationNumber` - 내의 확인된 번호 목록에서 전화번호를 제거할 수 있습니다. AWS 계정
+ `sms-voice:VerifyDestinationNumber` - AWS내에서 SMS 메시징 서비스에 사용할 전화번호에 대한 확인 프로세스를 시작하고 완료할 수 있습니다.
+ `sms-voice:DescribeAccountAttributes` - AWS내에서 SMS 메시징 서비스와 연결된 계정 수준 속성에 대한 자세한 정보를 검색할 수 있습니다.
+ `sms-voice:DescribeSpendLimits` - AWS 계정내에서 SMS 메시징 서비스와 연결된 지출 한도에 대한 정보를 검색할 수 있습니다.
+ `sms-voice:DescribePhoneNumbers` - AWS 계정 내에서 SMS 메시징 서비스와 연결된 전화번호에 대한 자세한 정보를 검색할 수 있습니다.
+ `sms-voice:SetTextMessageSpendLimitOverride` - 내에서 SMS 문자 메시지에 대한 지출 한도를 설정하거나 재정의할 수 있습니다. AWS 계정
+ `sms-voice:DescribeOptedOutNumbers` - AWS 계정에서 SMS 메시지 수신을 옵트아웃한 전화번호 목록을 검색할 수 있습니다.
+ `sms-voice:DeleteOptedOutNumber` - 내의 옵트아웃된 번호 목록에서 전화번호를 제거할 수 있습니다. AWS 계정

**`AmazonSNSFullAccess` 예제 정책**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SNSFullAccess",
            "Effect": "Allow",
            "Action": "sns:*",
            "Resource": "*"
        },
        {
            "Sid": "SMSAccessViaSNS",
            "Effect": "Allow",
            "Action": [
                "sms-voice:DescribeVerifiedDestinationNumbers",
                "sms-voice:CreateVerifiedDestinationNumber",
                "sms-voice:SendDestinationNumberVerificationCode",
                "sms-voice:SendTextMessage",
                "sms-voice:DeleteVerifiedDestinationNumber",
                "sms-voice:VerifyDestinationNumber",
                "sms-voice:DescribeAccountAttributes",
                "sms-voice:DescribeSpendLimits",
                "sms-voice:DescribePhoneNumbers",
                "sms-voice:SetTextMessageSpendLimitOverride",
                "sms-voice:DescribeOptedOutNumbers",
                "sms-voice:DeleteOptedOutNumber"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "sns.amazonaws.com"
                }
            }
        }
    ]
}
```

------

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*에서 [AmazonSNSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSNSFullAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonSNSReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonSNSReadOnlyAccess"></a>

`AmazonSNSReadOnlyAccess`는 AWS Management Console을 사용하여 Amazon SNS에 대한 읽기 전용 액세스를 제공합니다. 이 정책에는 Amazon SNS를 사용하여 호출할 AWS 최종 사용자 메시징 SMS 때에 대한 다음과 같은 읽기 전용 작업도 포함됩니다. 사용자, 그룹, 역할에 이 정책을 연결할 수 있습니다.

** 권한 세부 정보**

다음 권한은 Amazon SNS API 사용 시에만 적용됩니다.
+ `sns:GetTopicAttributes` - Amazon SNS 주제의 속성을 검색할 수 있습니다. 여기에는 주제의 ARN(Amazon 리소스 이름), 구독자 목록, 전송 정책, 액세스 제어 정책, 주제와 연결된 기타 메타데이터와 같은 정보가 포함됩니다.
+ `sns:List*` - Amazon SNS 리소스에서 `List`로 시작하는 모든 작업을 수행할 수 있습니다. 여기에는 다음과 같이 Amazon SNS와 관련된 다양한 요소를 나열할 수 있는 권한이 포함됩니다.
  + `sns:ListTopics` - AWS 계정에서 모든 Amazon SNS 주제 목록을 검색할 수 있습니다.
  + `sns:ListSubscriptions` - Amazon SNS 주제에 대한 모든 구독 목록을 검색할 수 있습니다.
  + `sns:ListSubscriptionsByTopic` - 특정 Amazon SNS 주제에 대한 모든 구독을 나열할 수 있습니다.
  + `sns:ListPlatformApplications` - 모바일 푸시 알림에 만들어진 모든 플랫폼 애플리케이션을 나열할 수 있습니다.
  + `sns:ListEndpointsByPlatformApplication` - 플랫폼 애플리케이션과 연결된 모든 엔드포인트를 나열할 수 있습니다.
+ `sns:CheckIfPhoneNumberIsOptedOut` - 특정 전화번호가 Amazon SNS를 통해 SMS 메시지 수신을 옵트아웃했는지 확인할 수 있습니다.
+ `sns:GetEndpointAttributes` - Amazon SNS 플랫폼 애플리케이션과 연결된 엔드포인트의 속성을 검색할 수 있습니다. 여기에는 엔드포인트의 사용 상태, 사용자 지정 사용자 데이터, 엔드포인트와 연결된 기타 메타데이터와 같은 속성이 포함될 수 있습니다.
+ `sns:GetDataProtectionPolicy` - Amazon SNS 주제와 연결된 데이터 보호 정책을 검색할 수 있습니다.
+ `sns:GetPlatformApplicationAttributes` - Amazon SNS 플랫폼 애플리케이션의 속성을 검색할 수 있습니다. 플랫폼 애플리케이션은 Amazon SNS에서 Apple Push Notification Service(APNS) 또는 Firebase Cloud Messaging(FCM)과 같은 서비스를 통해 모바일 디바이스에 푸시 알림을 전송하는 데 사용됩니다.
+ `sns:GetSMSAttributes` - AWS 계정에 대한 기본 SMS 설정을 검색할 수 있습니다.
+ `sns:GetSMSSandboxAccountStatus` - AWS 계정에 대한 SMS 샌드박스의 현재 상태를 검색할 수 있습니다.
+ `sns:GetSubscriptionAttributes` - Amazon SNS 주제에 대한 특정 구독의 속성을 검색할 수 있습니다.
+ `sms-voice:DescribeVerifiedDestinationNumbers` - 내에서 SMS 메시지 전송이 확인된 전화번호 목록을 보거나 검색할 수 있습니다. AWS 계정
+ `sms-voice:DescribeAccountAttributes` - AWS내에서 SMS 메시징 서비스와 관련된 계정 수준 속성에 대한 정보를 보거나 검색할 수 있습니다.
+ `sms-voice:DescribeSpendLimits` - AWS 계정내 SMS 메시징 서비스와 연결된 지출 한도에 대한 정보를 보거나 검색할 수 있습니다.
+ `sms-voice:DescribePhoneNumbers` - AWS 계정내에서 SMS 메시징 서비스에 사용되는 전화번호에 대한 정보를 보거나 검색할 수 있습니다.
+ `sms-voice:DescribeOptedOutNumbers` - AWS 계정에서 SMS 메시지 수신을 옵트아웃한 전화번호 목록을 보거나 검색할 수 있습니다.

**`AmazonSNSReadOnlyAccess` 예제 정책**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SNSReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "sns:GetTopicAttributes",
                "sns:List*",
                "sns:CheckIfPhoneNumberIsOptedOut",
                "sns:GetEndpointAttributes",
                "sns:GetDataProtectionPolicy",
                "sns:GetPlatformApplicationAttributes",
                "sns:GetSMSAttributes",
                "sns:GetSMSSandboxAccountStatus",
                "sns:GetSubscriptionAttributes"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SMSAccessViaSNS",
            "Effect": "Allow",
            "Action": [
                "sms-voice:DescribeVerifiedDestinationNumbers",
                "sms-voice:DescribeAccountAttributes",
                "sms-voice:DescribeSpendLimits",
                "sms-voice:DescribePhoneNumbers",
                "sms-voice:DescribeOptedOutNumbers"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "sns.amazonaws.com"
                }
            }
        }
    ]
}
```

------

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*에서 [AmazonSNSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSNSFullAccess.html)를 참조하세요.

## AWS 관리형 정책에 대한 Amazon SNS 업데이트
<a name="security-iam-awsmanpol-updates"></a>



이 서비스가 이러한 변경 사항을 추적하기 시작한 이후부터 Amazon SNS의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 Amazon SNS 문서 기록 페이지에서 RSS 피드를 구독하세요.




| 변경 | 설명 | Date | 
| --- | --- | --- | 
|   [AmazonSNSFullAccess](#security-iam-awsmanpol-AmazonSNSFullAccess) - 기존 정책에 대한 업데이트  |  Amazon SNS에는 AWS Management Console을 사용하여 Amazon SNS에 대한 전체 액세스를 허용하는 새 권한이 추가되었습니다.  | 09/24/2024 | 
|  [AmazonSNSReadOnlyAccess](#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) – 기존 정책 업데이트  |  Amazon SNS에는 AWS Management Console을 사용하여 Amazon SNS에 대한 읽기 전용 액세스를 허용하는 새 권한이 추가되었습니다.  | 09/24/2024 | 
|  Amazon SNS에서 변경 사항 추적 시작  |  Amazon SNS가 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 08/27/2024 | 

## Amazon SNS의 정책 작업
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**정책 작업 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

JSON 정책의 `Action`요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 작업을 설명합니다. 연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에 작업을 포함하세요.



Amazon SNS 작업의 목록을 보려면 *서비스 권한 부여 참조*의 [Amazon Simple Notification Service에서 정의한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)을 참조하세요.

Amazon SNS의 정책 작업은 작업 앞에 다음 접두사를 사용합니다.

```
sns
```

단일 문에서 여러 작업을 지정하려면 쉼표로 구분합니다.

```
"Action": [
      "sns:action1",
      "sns:action2"
         ]
```





Amazon SNS 자격 증명 기반 정책 예제를 보려면 [Amazon Simple Notification Service의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

## Amazon SNS의 정책 리소스
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**정책 리소스 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Resource` JSON 정책 요소는 작업이 적용되는 하나 이상의 객체를 지정합니다. 모범 사례에 따라 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)을 사용하여 리소스를 지정합니다. 리소스 수준 권한을 지원하지 않는 작업의 경우, 와일드카드(\$1)를 사용하여 해당 문이 모든 리소스에 적용됨을 나타냅니다.

```
"Resource": "*"
```

Amazon SNS 리소스 유형 및 해당 ARN의 목록을 보려면 *서비스 권한 부여 참조*의 [Amazon Simple Notification Service에서 정의한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)을 참조하세요. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 [Amazon Simple Notification Service에서 정의한 리소스](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)를 참조하세요.





Amazon SNS 자격 증명 기반 정책 예제를 보려면 [Amazon Simple Notification Service의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

## Amazon SNS의 정책 조건 키
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**서비스별 정책 조건 키 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Condition` 요소는 정의된 기준에 따라 문이 실행되는 시기를 지정합니다. 같음(equals) 또는 미만(less than)과 같은 [조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.

Amazon SNS 조건 키 목록을 보려면 *서비스 권한 부여 참조*의 [Amazon Simple Notification Service에 사용되는 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)를 참조하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 [Amazon Simple Notification Service에서 정의한 리소스](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)를 참조하세요.

Amazon SNS 자격 증명 기반 정책 예제를 보려면 [Amazon Simple Notification Service의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

## Amazon SNS의 ACL
<a name="security_iam_service-with-iam-acls"></a>

**ACL 지원:** 아니요 

액세스 제어 목록(ACL)은 어떤 보안 주체(계정 멤버, 사용자 또는 역할)가 리소스에 액세스할 수 있는 권한을 가지고 있는지를 제어합니다. ACL은 JSON 정책 문서 형식을 사용하지 않지만 리소스 기반 정책과 유사합니다.

## Amazon SNS의 ABAC
<a name="security_iam_service-with-iam-tags"></a>

**ABAC 지원(정책의 태그):** 부분적

속성 기반 액세스 제어(ABAC)는 태그라고 불리는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. IAM 엔터티 및 AWS 리소스에 태그를 연결한 다음 보안 주체의 태그가 리소스의 태그와 일치할 때 작업을 허용하는 ABAC 정책을 설계할 수 있습니다.

태그에 근거하여 액세스를 제어하려면 `aws:ResourceTag/key-name`, `aws:RequestTag/key-name`또는 `aws:TagKeys`조건 키를 사용하여 정책의 [조건 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에 태그 정보를 제공합니다.

서비스가 모든 리소스 유형에 대해 세 가지 조건 키를 모두 지원하는 경우, 값은 서비스에 대해 **예**입니다. 서비스가 일부 리소스 유형에 대해서만 세 가지 조건 키를 모두 지원하는 경우, 값은 **부분적**입니다.

ABAC에 대한 자세한 내용은 *IAM 사용 설명서*의 [ABAC 권한 부여를 통한 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)를 참조하세요. ABAC 설정 단계가 포함된 자습서를 보려면 *IAM 사용 설명서*의 [속성 기반 액세스 제어(ABAC) 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)을 참조하세요.

## Amazon SNS에서 임시 자격 증명 사용
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**임시 자격 증명 지원:** 예

임시 자격 증명은 AWS 리소스에 대한 단기 액세스를 제공하며 페더레이션 또는 전환 역할을 사용할 때 자동으로 생성됩니다. 장기 액세스 키를 사용하는 대신 임시 자격 증명을 동적으로 생성하는 것이 AWS 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 및 [IAM으로 작업하는AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 섹션을 참조하세요.

## Amazon SNS에 대한 교차 서비스 보안 주체 권한
<a name="security_iam_service-with-iam-principal-permissions"></a>

**전달 액세스 세션(FAS) 지원:** 예

 전달 액세스 세션(FAS)은를 호출하는 보안 주체의 권한을 다운스트림 서비스에 AWS 서비스 대한 요청과 AWS 서비스함께 사용합니다. FAS 요청 시 정책 세부 정보는 [전달 액세스 세션](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)을 참조하세요.

## Amazon SNS의 서비스 역할
<a name="security_iam_service-with-iam-roles-service"></a>

**서비스 역할 지원:** 예

 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스 AWS에 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**주의**  
서비스 역할에 대한 권한을 변경하면 Amazon SNS 기능이 중단될 수 있습니다. Amazon SNS에서 관련 지침을 제공하는 경우에만 서비스 역할을 편집합니다.

## Amazon SNS의 서비스 연결 역할
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**서비스 연결 역할 지원:** 아니요 

 서비스 연결 역할은에 연결된 서비스 역할의 한 유형입니다 AWS 서비스. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 연결 역할은에 표시 AWS 계정 되며 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집은 할 수 없습니다.

서비스 연결 역할 생성 또는 관리에 대한 자세한 내용은 [IAM으로 작업하는AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하세요. **서비스 연결 역할** 열에서 `Yes`가 포함된 서비스를 테이블에서 찾습니다. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예(Yes)** 링크를 선택합니다.

# Amazon Simple Notification Service의 자격 증명 기반 정책 예
<a name="security_iam_id-based-policy-examples"></a>

기본적으로 사용자 및 역할은 Amazon SNS 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 사용자에게 사용자가 필요한 리소스에서 작업을 수행할 권한을 부여하려면 IAM 관리자가 IAM 정책을 생성하면 됩니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하세요.

각 리소스 유형에 대한 ARN 형식을 포함하여 Amazon SNS에서 정의한 작업 및 리소스 유형에 대한 자세한 내용은 *서비스 권한 부여 참조*에서 [Amazon Simple Notification Service에 대한 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)를 참조하세요.

## 정책 모범 사례
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID 기반 정책에 따라 계정에서 사용자가 Amazon SNS 리소스를 생성, 액세스 또는 삭제할 수 있는지 여부가 결정됩니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ ** AWS 관리형 정책을 시작하고 최소 권한으로 전환 -** 사용자 및 워크로드에 권한 부여를 시작하려면 많은 일반적인 사용 사례에 대한 권한을 부여하는 *AWS 관리형 정책을* 사용합니다. 에서 사용할 수 있습니다 AWS 계정. 사용 사례에 맞는 AWS 고객 관리형 정책을 정의하여 권한을 추가로 줄이는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 또는 [AWS 직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.
+ **최소 권한 적용** – IAM 정책을 사용하여 권한을 설정하는 경우, 작업을 수행하는 데 필요한 권한만 부여합니다. 이렇게 하려면 *최소 권한*으로 알려진 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의합니다. IAM을 사용하여 권한을 적용하는 방법에 대한 자세한 정보는 *IAM 사용 설명서*에 있는 [IAM의 정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)을 참조하세요.
+ **IAM 정책의 조건을 사용하여 액세스 추가 제한** – 정책에 조건을 추가하여 작업 및 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어, SSL을 사용하여 모든 요청을 전송해야 한다고 지정하는 정책 조건을 작성할 수 있습니다. AWS 서비스와 같은 특정를 통해 사용되는 경우 조건을 사용하여 서비스 작업에 대한 액세스 권한을 부여할 수도 있습니다 CloudFormation. 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.
+ **IAM Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 100개 이상의 정책 확인 항목과 실행 가능한 추천을 제공하여 안전하고 기능적인 정책을 작성하도록 돕습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM Access Analyzer에서 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.
+ **다중 인증(MFA) 필요 -**에서 IAM 사용자 또는 루트 사용자가 필요한 시나리오가 있는 경우 추가 보안을 위해 MFA를 AWS 계정켭니다. API 작업을 직접적으로 호출할 때 MFA가 필요하면 정책에 MFA 조건을 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [MFA를 통한 보안 API 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)를 참조하세요.

IAM의 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## Amazon SNS 콘솔 사용
<a name="security_iam_id-based-policy-examples-console"></a>

Amazon Simple Notification Service 콘솔에 액세스하려면 최소한의 권한 집합이 있어야 합니다. 이러한 권한은에서 Amazon SNS 리소스에 대한 세부 정보를 나열하고 볼 수 있도록 허용해야 합니다 AWS 계정. 최소 필수 권한보다 더 제한적인 ID 기반 정책을 생성하는 경우, 콘솔이 해당 정책에 연결된 엔티티(사용자 또는 역할)에 대해 의도대로 작동하지 않습니다.

 AWS CLI 또는 AWS API만 호출하는 사용자에게는 최소 콘솔 권한을 허용할 필요가 없습니다. 대신, 수행하려는 API 작업과 일치하는 작업에만 액세스할 수 있도록 합니다.

사용자와 역할이 여전히 Amazon SNS 콘솔을 사용할 수 있도록 하려면 Amazon SNS `ConsoleAccess` 또는 `ReadOnly` AWS 관리형 정책도 엔터티에 연결합니다. 자세한 내용은 *IAM 사용 설명서*의 [사용자에게 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)를 참조하세요.

## 기타 정책 유형
<a name="security_iam_access-manage-other-policies"></a>

AWS 는 보다 일반적인 정책 유형에서 부여한 최대 권한을 설정할 수 있는 추가 정책 유형을 지원합니다.
+ **권한 경계** - ID 기반 정책에서 IAM 엔터티에 부여할 수 있는 최대 권한을 설정합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 엔터티의 권한 범위](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** - AWS Organizations내 조직 또는 조직 단위에 대한 최대 권한을 지정합니다. 자세한 내용은AWS Organizations 사용 설명서의 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.**
+ **리소스 제어 정책(RCP)** – 계정의 리소스에 사용할 수 있는 최대 권한을 설정합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ **세션 정책** – 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

## 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies"></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 에서 여러 정책 유형이 관련될 때 요청을 허용할지 여부를 AWS 결정하는 방법을 알아보려면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

## 사용자가 자신의 고유한 권한을 볼 수 있도록 허용
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

이 예제는 IAM 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여 줍니다. 이 정책에는 콘솔에서 또는 AWS CLI 또는 AWS API를 사용하여 프로그래밍 방식으로이 작업을 완료할 수 있는 권한이 포함됩니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## Amazon SNS의 자격 증명 기반 정책
<a name="security_iam_service-with-iam-id-based-policies"></a>

**ID 기반 정책 지원:** 예

ID 기반 정책은 IAM 사용자, 사용자 그룹 또는 역할과 같은 ID에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 사용자 및 역할이 어떤 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

IAM ID 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. JSON 정책에서 사용할 수 있는 모든 요소에 대해 알아보려면 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)를 참조하세요.

### Amazon SNS의 자격 증명 기반 정책 예
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Amazon SNS 자격 증명 기반 정책 예제를 보려면 [Amazon Simple Notification Service의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

## Amazon SNS 내의 리소스 기반 정책
<a name="security_iam_service-with-iam-resource-based-policies"></a>


|  |  | 
| --- |--- |
|  리소스 기반 정책 지원  |  예  | 

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 리소스 기반 정책의 예제는 IAM *역할 신뢰 정책*과 Amazon S3 *버킷 정책*입니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 정책이 연결된 리소스의 경우 정책은 지정된 보안 주체가 해당 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 정의합니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다. 보안 주체에는 계정, 사용자, 역할, 페더레이션 사용자 또는이 포함될 수 있습니다 AWS 서비스.

교차 계정 액세스를 활성화하려는 경우, 전체 계정이나 다른 계정의 IAM 개체를 리소스 기반 정책의 보안 주체로 지정할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM에서 교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

# Amazon SNS로 자격 증명 기반 정책 사용
<a name="sns-using-identity-based-policies"></a>

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

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

Amazon SNS 작업 및 리소스에 대한 정책의 예는 [Amazon SNS에 대한 정책 예제](#sns-example-policies)에서 확인하세요.

## IAM 및 Amazon SNS 정책을 함께 사용
<a name="iam-and-sns-policies"></a>

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

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

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

![\[IAM 정책과 Amazon SNS 정책을 비교하여 두 정책 모두 Bob과 Susan이라는 두 사용자에게 동등한 권한을 부여하여 AWS 계정에서 특정 Amazon SNS 주제를 구독할 수 있도록 합니다. 강조 표시된 주요 차이점은 Amazon SNS 정책이 여러의 사용자에게 권한을 부여할 수 있지만 AWS 계정 IAM 정책은 부여할 수 없다는 것입니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/SNS_EquivalentPolicies.png)


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

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

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

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

![\[IAM 정책과 Amazon SNS 정책이 모두 사용자 Bob에게 적용되는 방법을 보여줍니다. IAM 정책은 Bob이의 모든 주제를 구독할 수 있도록 허용 AWS 계정하고 Amazon SNS 정책은 "topic_xyz"라는 특정 주제에 메시지를 게시할 수 있는 권한을 부여합니다. 다이어그램은 IAM 정책에서 부여한 일반 권한과 특정 주제에 대해 Amazon SNS 정책에서 부여한 특정 권한 간의 차이점을 강조 표시합니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/SNS_UnionOfPolicies.png)

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

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

![\[모든 주제에 대해 '게시' 작업을 거부하는 IAM 정책을 추가하는 것이 사용자 Bob이 특정 주제 'topic_xyz'에 게시할 수 있도록 허용한 기존 Amazon SNS 정책을 재정의하는 방법임을 보여주는 그림입니다. IAM 거부 정책은 Amazon SNS 정책보다 우선 적용되므로 Bob이 'topic_xyz'를 포함한 모든 주제에 게시하는 것을 효과적으로 방지합니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/SNS_DenyOverride.png)


Amazon SNS 작업 및 리소스에 대한 정책의 예는 [Amazon SNS에 대한 정책 예제](#sns-example-policies)에서 확인하세요.

## Amazon SNS 리소스 ARN 형식
<a name="sns-arn-format"></a>

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

```
arn:aws:sns:region:account_ID:topic_name
```

ARN에 대한 자세한 내용을 확인하려면 *IAM 사용 설명서*의 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_ARNs)로 이동하세요.

**Example**  
다음은 us-east-2 리전의 MyTopic이라는 주제에 대한 ARN으로, AWS 계정 123456789012에 속합니다.  

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

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

```
arn:aws:sns:*:123456789012:MyTopic
```

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

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

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

## Amazon SNS API 작업
<a name="sns-api-actions"></a>

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

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

## Amazon SNS 정책 키
<a name="sns-policy-keys"></a>

Amazon SNS는 다음과 같은 AWS 광범위한 정책 키와 일부 서비스별 키를 구현합니다.

각각에서 지원하는 조건 키 목록은 *IAM 사용 설명서*의에 [사용되는 작업, 리소스 및 조건 키를 AWS 서비스](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) AWS 서비스참조하세요. 여러에서 사용할 수 있는 조건 키 목록은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) AWS 서비스참조하세요.

Amazon SNS는 다음과 같은 서비스별 키를 사용합니다. `Subscribe` 요청에 대한 액세스를 제한하는 정책에서 이 키를 사용합니다.
+ **sns:endpoint—** `Subscribe` 요청 또는 이전에 확인된 구독의 URL, 이메일 주소 또는 ARN입니다. 특정 엔드포인트(예: \$1@yourcompany.com)에 대한 액세스를 제한하려면 문자열 조건과 함께 사용합니다([Amazon SNS에 대한 정책 예제](#sns-example-policies) 참조).
+ **sns:protocol—** `Subscribe` 요청 또는 이전에 확인한 구독의 `protocol` 값입니다. 특정 전송 프로토콜(예: https)에 대한 게시를 제한하려면 문자열 조건과 함께 사용합니다([Amazon SNS에 대한 정책 예제](#sns-example-policies) 참조).

## Amazon SNS에 대한 정책 예제
<a name="sns-example-policies"></a>

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

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

**Example 1: 어떤 그룹에서 주제를 만들고 관리하도록 허용**  
여기서는 `CreateTopic`, `ListTopics`, `SetTopicAttributes`, `DeleteTopic`에 대한 액세스 권한을 부여하는 정책을 만듭니다.  

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

**Example 2: IT 그룹에서 특정 주제에 메시지를 게시하는 것을 허용**  
여기서는 IT를 위한 그룹을 만들고 관심 있는 특정 주제에 대해 `Publish`에 액세스할 수 있는 권한을 부여하는 정책을 할당합니다.  

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

**Example 3:의 사용자에게 주제를 구독할 수 있는 AWS 계정 권한 부여**  
여기서는 `Subscribe` 작업에 대한 액세스 권한을 부여하는 정책을 만듭니다. 이를 위해 `sns:Protocol` 및 `sns:Endpoint` 정책 키에 대한 문자열 일치 조건을 사용합니다.  

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

**Example 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"
    }
  ]
}
```

## 이메일 엔드포인트에 대한 Amazon SNS 정책
<a name="sns-email-endpoints"></a>

Amazon SNS는 선행 및 후행 공백을 제거하고, 모든 문자를 소문자로 변환하고, 특수 문자 및 이스케이프 시퀀스를 정규화하여 엔드포인트 액세스 정책의 이메일 주소를 정규화합니다. 따라서 구독 요청의 적절한 일치를 보장하려면 정책 정의에 소문자 이메일 주소를 사용해야 합니다.

예제 정책:

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "user.name@example.com"
        }
    }
}
```

다음 이메일 주소는 위의 조건과 일치합니다.
+ `user.name@example.com`
+ `USER.NAME@EXAMPLE.COM`
+ `User.N\ame@Example.com`

## HTTP/HTTPs 엔드포인트에 대한 Amazon SNS 정책
<a name="sns-http-https-endpoints"></a>

Amazon SNS는 포트, 경로, 쿼리 파라미터 및 조각을 정확히 보존하면서 스키마와 호스트 이름을 소문자로 변환하여 엔드포인트 액세스 정책에서 HTTP/HTTPs 엔드포인트를 정규화합니다. 따라서 구독 요청의 적절한 일치를 보장하려면 정책 정의에 소문자 스키마 및 호스트 이름을 사용해야 합니다.

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "https://example.com:443/path?A=B"
        }
    }
}
```

다음 HTTP/HTTPs는 위 조건에 일치합니다.
+ `HTTPS://EXAMPLE.COM:443/path?A=B`
+ `HTTPS://example.com:443/path?A=B`
+ `HTTPS://ExAmPlE.cOm:443/path?A=B`

# 사용자 지정 Amazon SNS IAM 정책 관리
<a name="sns-sms-custom-policies"></a>

사용자 지정 IAM 정책을 사용하면 개별 IAM 사용자, 그룹 또는 역할에 대한 권한을 지정하여 특정 AWS 리소스 및 작업에 대한 액세스 권한을 부여하거나 제한할 수 있습니다. Amazon SNS 리소스를 관리할 때 사용자 지정 IAM 정책을 사용하면 조직의 보안 및 운영 요구 사항에 따라 액세스 권한을 맞춤화할 수 있습니다.

다음 단계를 사용하여 Amazon SNS에 대한 사용자 지정 IAM 정책 관리:

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택합니다.

1. 새 사용자 지정 IAM 정책을 생성하려면 **정책 생성**을 선택한 후 **SNS**를 선택합니다. 기존 정책을 편집하려면 목록에서 정책을 선택하고 **정책 편집**을 선택합니다.

1. 정책 편집기에서 Amazon SNS 리소스에 액세스하기 위한 **권한**을 정의합니다. 특정 요구 사항에 따라 **작업**, **리소스**, **조건**을 지정할 수 있습니다.

1. Amazon SNS 작업에 대한 권한을 부여하려면 IAM 정책에 `sns:Publish`, `sns:Subscribe`, `sns:DeleteTopic` 등 관련 Amazon SNS 작업을 포함합니다. 권한이 적용되는 Amazon SNS 주제의 ARN(Amazon 리소스 이름)을 정의합니다.

1. 정책을 연결해야 하는 IAM **사용자**, **그룹** 또는 **역할**을 지정합니다. 정책을 IAM 사용자 또는 그룹에 직접 연결하거나 AWS 서비스 또는 애플리케이션에서 사용하는 IAM 역할과 연결할 수 있습니다.

1. IAM 정책 구성을 검토하여 액세스 제어 요구 사항에 맞는지 확인합니다. 확인되면 정책 변경 사항을 **저장**합니다.

1. **사용자 지정 IAM 정책**을 AWS 계정내 관련 IAM 사용자, 그룹 또는 역할에 연결합니다. 이렇게 하면 Amazon SNS 리소스를 관리하기 위한 정책에 정의된 권한이 부여됩니다.

# Amazon SNS에 대한 임시 보안 자격 증명 사용
<a name="sns-using-temporary-credentials"></a>

AWS Identity and Access Management (IAM)를 사용하면 AWS 리소스에 액세스해야 하는 사용자 및 애플리케이션에 임시 보안 자격 증명을 부여할 수 있습니다. 이러한 임시 보안 자격 증명은 주로 IAM 역할 및 SAML과 OpenID Connect(OIDC) 등의 업계 표준 프로토콜을 통한 페더레이션 액세스에 사용됩니다.

 AWS 리소스에 대한 액세스를 효과적으로 관리하려면 다음 주요 개념을 이해해야 합니다.
+ **IAM 역할** - 역할은 AWS 리소스에 대한 액세스를 위임하는 데 사용됩니다. 역할은 Amazon EC2 인스턴스, Lambda 함수, 다른 AWS 계정의 사용자와 같은 엔터티에서 맡을 수 있습니다.
+ **페더레이션 사용자** - SAML 또는 OIDC를 사용하여 외부 ID 제공업체(idP)를 통해 인증된 사용자입니다. 페더레이션 액세스는 인간 사용자에게 권장되며 IAM 역할은 소프트웨어 애플리케이션에 사용되어야 합니다.
+ **Roles Anywhere** - AWS 액세스가 필요한 외부 애플리케이션의 경우 IAM Roles Anywhere를 사용하여 장기 자격 증명을 생성하지 않고도 액세스를 안전하게 관리할 수 있습니다.

Amazon SNS에 요청할 때 이 임시 보안 자격 증명을 사용할 수 있습니다. SDK와 API 라이브러리는 요청 인증 시 이 자격 증명을 사용하여 필요한 서명 값을 계산합니다. 자격 증명이 만료된 요청은 Amazon SNS에서 거부됩니다.

임시 보안 자격 증명에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 역할 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) 및 [외부 인증 사용자에게 액세스 제공(ID 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)을 참조하세요.

**Example HTTPS 요청 예제**  
다음 예제에서는 AWS Security Token Service (STS)에서 가져온 임시 보안 자격 증명을 사용하여 Amazon SNS 요청을 인증하는 방법을 보여줍니다.  

```
https://sns.us-east-2.amazonaws.com/
?Action=CreateTopic
&Name=My-Topic
&SignatureVersion=4
&SignatureMethod=AWS4-HMAC-SHA256
&Timestamp=2023-07-05T12:00:00Z
&X-Amz-Security-Token=SecurityTokenValue
&X-Amz-Date=20230705T120000Z
&X-Amz-Credential=<your-access-key-id>/20230705/us-east-2/sns/aws4_request
&X-Amz-SignedHeaders=host
&X-Amz-Signature=<signature-value>
```

**요청 인증 단계**

1. **임시 보안 자격 증명 획득** - AWS STS 를 사용하여 역할을 맡거나 페더레이션 사용자 자격 증명을 확보합니다. 그러면 액세스 키 ID, 시크릿 액세스 키, 보안 토큰이 제공됩니다.

1. **요청 구성** - Amazon SNS 작업에 필요한 파라미터(예: CreateTopic)를 포함하고 보안 통신을 위해 HTTPS를 사용해야 합니다.

1. **요청 서명** - AWS 서명 버전 4 프로세스를 사용하여 요청에 서명합니다. 여기에는 표준 요청 작성, 서명 문자열 작성, 서명 계산이 포함됩니다. AWS 서명 버전 4에 대한 자세한 내용은 *Amazon EBS 사용 설명서*의 [서명 버전 4 서명 사용을](https://docs.aws.amazon.com/ebs/latest/userguide/ebsapis-using-sigv4.html) 참조하세요.

1. **요청 전송** - 요청 헤더에 X-Amz-Security-Token을 포함하여 임시 보안 자격 증명을 Amazon SNS에 전달합니다.

# Amazon SNS API 권한: 작업 및 리소스 참조
<a name="sns-access-policy-language-api-permissions-reference"></a>

다음 목록은 액세스 제어의 Amazon SNS 구현에 대한 정보를 제공합니다.
+ 각각의 정책은 하나의 주제에만 적용(규제 작성 시 다른 주제에 적용하는 문구를 포함하지 마세요)해야 합니다.
+ 각각의 정책에는 고유한 규제가 있어야 합니다. `Id` 
+ 정책의 각 문구에는 고유한 문구가 있어야 합니다. `sid` 

## 정책 할당량
<a name="sns-policy-quotas"></a>

다음 표에는 정책 정보에 대한 최대 할당량이 나열되어 있습니다.


| 이름 | 최대 할당량 | 
| --- | --- | 
|  바이트  |  30kb  | 
|  Statement  |  100  | 
|  Principal  |  1\$1200(0은 유효하지 않음)  | 
|  Resource  |  1(0은 유효하지 않습니다. 값은 정책 주제의 ARN과 일치해야 합니다)  | 

## 유효한 Amazon SNS 정책 작업
<a name="sns-valid-policy-actions"></a>

Amazon SNS는 다음의 표에 표시된 작업을 지원합니다.


| 작업 | 설명 | 
| --- | --- | 
| sns:AddPermission | 주제 정책에 권한을 추가할 권한을 부여합니다. | 
| sns:DeleteTopic | 주제를 삭제할 권한을 부여합니다. | 
| sns:GetDataProtectionPolicy | 주제의 데이터 보호 정책을 검색할 수 있는 권한을 부여합니다. | 
| sns:GetTopicAttributes  | 모든 주제 속성을 수신할 권한을 부여합니다. | 
| sns:ListSubscriptionsByTopic | 특정 주제에 대한 모든 구독을 검색할 권한을 부여합니다. | 
| sns:ListTagsForResource | 지정된 주제에 추가된 모든 태그를 나열할 수 있는 권한을 부여합니다. | 
| sns:Publish  | 주제 또는 엔드포인트에 게시 및 배치 게시 모두에 대한 권한을 부여합니다. 자세한 정보는 Amazon Simple Notification Service API 참조의 [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) 및 [PublishBatch](https://docs.aws.amazon.com/sns/latest/api/API_BatchPublish.html)를 참조하세요. | 
| sns:PutDataProtectionPolicy | 주제의 데이터 보호 정책을 설정할 수 있는 권한을 부여합니다. | 
| sns:RemovePermission  | 주제 정책에서 모든 권한을 제거할 권한을 부여합니다. | 
| sns:SetTopicAttributes  | 주제의 속성을 설정할 권한을 부여합니다. | 
| sns:Subscribe  | 주제를 구독할 권한을 부여합니다. | 

## 서비스별 키
<a name="sns-service-specific-keys"></a>

Amazon SNS는 다음과 같은 서비스별 키를 사용합니다. `Subscribe` 요청에 대한 액세스를 제한하는 정책에서 이러한 키를 사용할 수 있습니다.
+ **sns:endpoint—** `Subscribe` 요청 또는 이전에 확인된 구독의 URL, 이메일 주소 또는 ARN입니다. 특정 엔드포인트(예: \$1@example.com)에 대한 액세스를 제한하려면 문자열 조건과 함께 사용합니다([Amazon SNS에 대한 정책 예제](sns-using-identity-based-policies.md#sns-example-policies) 참조).
+ **sns:protocol—** `Subscribe` 요청 또는 이전에 확인한 구독의 `protocol` 값입니다. 특정 전송 프로토콜(예: https)에 대한 게시를 제한하려면 문자열 조건과 함께 사용합니다([Amazon SNS에 대한 정책 예제](sns-using-identity-based-policies.md#sns-example-policies) 참조).

**중요**  
sns:Endpoint로 액세스를 규제하는 정책 사용 시 DNS 문제가 향후 엔드포인트 이름 확인에 영향을 미칠 수 있습니다.

# Amazon Simple Notification Service ID 및 액세스 문제 해결
<a name="security_iam_troubleshoot"></a>

다음 정보를 사용하여 Amazon SNS 및 IAM으로 작업할 때 발생할 수 있는 일반적인 문제를 진단하고 수정할 수 있습니다.

## Amazon SNS에서 작업을 수행할 권한이 없음
<a name="security_iam_troubleshoot-no-permissions"></a>

작업을 수행할 수 있는 권한이 없다는 오류가 수신되면 작업을 수행할 수 있도록 정책을 업데이트해야 합니다.

다음 예제 오류는 `mateojackson` 사용자가 콘솔을 사용하여 가상 `my-example-widget` 리소스에 대한 세부 정보를 보려고 하지만 가상 `sns:GetWidget` 권한이 없을 때 발생합니다.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: sns:GetWidget on resource: my-example-widget
```

이 경우 Mateo의 정책은 `sns:GetWidget` 작업을 사용하여 `my-example-widget` 리소스에 액세스하도록 허용하도록 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

## iam:PassRole을 수행하도록 인증되지 않음
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` 작업을 수행할 수 있는 권한이 없다는 오류가 수신되면 Amazon SNS에 역할을 전달할 수 있도록 정책을 업데이트해야 합니다.

일부 AWS 서비스 에서는 새 서비스 역할 또는 서비스 연결 역할을 생성하는 대신 기존 역할을 해당 서비스에 전달할 수 있습니다. 이렇게 하려면 역할을 서비스에 전달할 권한이 있어야 합니다.

다음 예제 오류는 `marymajor`라는 IAM 사용자가 콘솔을 사용하여 Amazon SNS에서 태스크를 수행하려고 하는 경우에 발생합니다. 하지만 작업을 수행하려면 서비스 역할이 부여한 권한이 서비스에 있어야 합니다. Mary는 서비스에 역할을 전달할 권한이 없습니다.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

이 경우, Mary가 `iam:PassRole`작업을 수행할 수 있도록 Mary의 정책을 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

## 내 외부의 사람이 내 Amazon SNS 리소스 AWS 계정 에 액세스하도록 허용하고 싶습니다.
<a name="security_iam_troubleshoot-cross-account-access"></a>

다른 계정의 사용자 또는 조직 외부의 사람이 리소스에 액세스할 때 사용할 수 있는 역할을 생성할 수 있습니다. 역할을 수임할 신뢰할 수 있는 사람을 지정할 수 있습니다. 리소스 기반 정책 또는 액세스 제어 목록(ACL)을 지원하는 서비스의 경우, 이러한 정책을 사용하여 다른 사람에게 리소스에 대한 액세스 권한을 부여할 수 있습니다.

자세한 내용은 다음을 참조하세요.
+ Amazon SNS에서 이러한 기능을 지원하는지 여부를 알아보려면 [Amazon SNS에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 섹션을 참조하세요.
+ 소유 AWS 계정 한의 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 [IAM 사용 설명서의 소유한 다른의 IAM 사용자에게 액세스 권한 제공을 참조 AWS 계정 하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html). ** 
+ 타사에 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [타사가 AWS 계정 소유한에 대한 액세스 권한 제공을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) AWS 계정참조하세요.
+ ID 페더레이션을 통해 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [외부에서 인증된 사용자에게 액세스 권한 제공(ID 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)을 참조하세요.
+ 크로스 계정 액세스에 대한 역할과 리소스 기반 정책 사용의 차이점을 알아보려면 *IAM 사용 설명서*의 [IAM의 크로스 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.