Amazon SNS 액세스 제어의 예제 사례 - Amazon Simple Notification Service

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

Amazon SNS 액세스 제어의 예제 사례

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

주제에 AWS 계정 대한 액세스 권한 부여

Amazon SNS 시스템에 어떤 주제가 있다고 가정합니다. 가장 간단한 경우는 특정 주제 작업 (예: 게시) 에 대한 하나 이상의 AWS 계정 액세스를 허용하는 것입니다.

Amazon SNS API 작업 AddPermission을 사용하여 이렇게 할 수 있습니다. 주제, AWS 계정 ID 목록, 작업 목록, 레이블을 가져와서 주제의 액세스 제어 정책에 새 설명을 자동으로 생성합니다. 여기서는 사용자가 직접 정책을 작성하지 않습니다. Amazon SNS에서 사용자를 대신하여 새로운 정책 설명을 자동으로 생성하기 때문입니다. 나중에 RemovePermission을 레이블과 함께 호출하여 이 정책 설명을 제거할 수 있습니다.

예를 들어 arn:aws:sns:us-east- 2:444455556666: 주제에 대해 MyTopic ID 1111-2222-3333과 작업 AWS 계정 , 레이블을 사용하여 전화를 AddPermission 걸면 Amazon SNS는 다음과 같은 액세스 제어 정책 설명을 생성하고 삽입합니다. Publish grant-1234-publish

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

이 설명을 추가하면 1111-2222-3333을 보유한 사용자가 주제에 AWS 계정 메시지를 게시할 수 있습니다.

HTTPS로 구독 제한

다음 예제에서는 알림 전송 프로토콜을 HTTPS로 제한합니다.

주제에 대한 정책을 직접 작성하는 방법을 알아야 합니다. Amazon SNS AddPermission 작업에서는 어떤 사람에게 주제에 대한 액세스 권한을 부여할 때 프로토콜 제한을 지정할 수 없기 때문입니다. 여기서는 직접 정책을 작성한 다음 SetTopicAttributes 작업을 사용하여 주제의 Policy 속성을 새로운 정책으로 설정합니다.

다음 전체 정책 예는 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" } } }] }

Amazon SQS 대기열에 메시지를 게시합니다.

이 사용 사례에서는 주제의 메시지를 Amazon SQS 대기열에 게시하려 합니다. Amazon SNS와 마찬가지로 Amazon SQS는 Amazon의 액세스 제어 정책 언어를 사용합니다. Amazon SNS에서 메시지를 전송할 수 있도록 허용하려면 Amazon SQS 작업 SetQueueAttributes을 사용하여 대기열에 대한 정책을 설정해야 합니다.

이 경우에도 정책을 직접 작성하는 방법을 알아야 합니다. Amazon SQS AddPermission 작업은 조건이 있는 정책 문을 생성하지 않기 때문입니다.

참고

아래에 표시된 예는 대기열에 대한 액세스를 제어하는 Amazon SQS 정책이며, 주제에 대한 액세스를 제어하는 Amazon SNS 정책이 아닙니다. 작업은 Amazon SQS 작업이며, 리소스는 대기열의 ARN(Amazon 리소스 이름)입니다. QueueArn 작업으로 대기열의 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 조건을 사용하여 대기열에 보내지는 메시지의 출처에 따라 대기열에 대한 액세스를 제한합니다. 이 정책 유형을 사용하면 사용자의 주제 중 하나에서 나온 메시지에 한해 Amazon SNS에서 대기열에 메시지를 보내는 것을 허용할 수 있습니다. 이 경우 ARN이 arn:aws:sns:us-east- 2:444455556666:인 특정 주제를 지정해야 합니다. MyTopic

앞의 정책은 사용자가 작성하여 특정 대기열에 추가할 수 있는 Amazon SQS 정책의 예입니다. Amazon SNS 및 기타 AWS 서비스에 대한 액세스 권한을 부여합니다. Amazon SNS에서 새로 생성된 모든 주제에 기본 정책을 부여합니다. 기본 정책은 주제에 대한 액세스를 다른 모든 AWS 서비스에 부여합니다. 이 기본 정책은 AWS 서비스가 소유한 AWS 리소스를 대신해서만 주제에 액세스하도록 하는 aws:SourceArn 조건을 사용합니다.

Amazon S3 이벤트 알림을 주제에 게시하도록 허용

이 경우 다른 AWS 계정사람의 Amazon S3 버킷이 주제에 게시할 수 있도록 주제 정책을 구성해야 합니다. Amazon S3의 알림을 게시하는 방법에 대한 자세한 정보는 버킷 이벤트의 알림 설정을 참조하세요.

이 사례에서는 사용자가 직접 정책을 작성한 다음 SetTopicAttributes 작업을 사용하여 주제의 Policy 속성을 새로운 정책으로 설정한다고 가정합니다.

다음 예제 문은 SourceAccount 조건을 사용하여 Amazon S3 소유자 계정만 주제에 액세스할 수 있도록 합니다. 이 예제에서는 주제 소유자가 111122223333이고 Amazon S3 소유자는 444455556666입니다. 이 예제에서는 444455556666이 소유한 모든 Amazon S3 버킷을 게시할 수 있다고 명시하고 있습니다. MyTopic

{ "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" } } }] }

Amazon SNS에 이벤트를 게시할 때 다음 서비스가 aws:SourceAccount를 지원합니다.

  • Amazon API Gateway

  • 아마존 CloudWatch

  • 아마존 DevOps 전문가

  • 아마존 ElastiCache

  • 아마존 EventBridge

  • 아마존 GameLift

  • Amazon Pinpoint SMS 및 음성 API

  • Amazon RDS

  • Amazon Redshift

  • Amazon S3 Glacier

  • Amazon SES

  • Amazon Simple Storage Service(S3)

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

Amazon SES가 다른 계정이 소유한 주제에 게시하도록 허용

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

{ "Version": "2008-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

  • 아마존 CloudWatch

  • 아마존 DevOps 전문가

  • 아마존 ElastiCache

  • 아마존 GameLift

  • Amazon Pinpoint SMS 및 음성 API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccountaws:SourceOwner 비교

중요

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

aws:SourceAccountaws:SourceOwner 조건 키는 Amazon SNS 주제에 게시할 때 일부 AWS 서비스 에서 각각 설정됩니다. 지원되는 경우 값은 서비스를 대신하여 데이터를 게시하는 12자리 AWS 계정 ID가 됩니다. 일부 서비스는 하나를 지원하고 일부는 다르게 지원합니다.

조직의 계정이 다른 계정의 주제에 AWS Organizations 게시할 수 있도록 허용

이 AWS Organizations 서비스를 사용하면 청구를 중앙에서 관리하고, 액세스 및 보안을 제어하고, 조직 전체에서 리소스를 공유할 수 AWS 계정있습니다.

Organizations 콘솔에서 조직 ID를 찾을 수 있습니다. 자세한 정보는 관리 계정에서 조직 세부 정보 보기를 참조하세요.

이 AWS 계정 예시에서는 조직 내 누구나 MyTopic 계정에서 Amazon SNS 주제를 myOrgId 게시할 수 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 경보가 다른 계정의 주제에 게시되도록 허용

이 경우 계정의 모든 CloudWatch 경보를 계정 111122223333 내 Amazon SNS 주제에 게시할 수 있습니다. 444455556666

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

특정 VPC 엔드포인트에서만 Amazon SNS 주제에 게시할 수 있도록 제한

이 경우 계정 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" } } }] }