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

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

Amazon SNS 액세스 제어 사례 예

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

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

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

AddPermission 작업을 사용하면 주제, 목록 AWS 계정 IDs, 작업 목록 및 레이블을 지정할 수 있습니다. 그런 SNS 다음 Amazon은 자동으로 새 정책 문을 생성하고 주제의 액세스 제어 정책에 추가합니다. 정책문을 직접 작성할 필요가 없습니다. Amazon이 이 문제를 SNS 처리합니다. 나중에 정책을 제거해야 하는 경우 를 호출RemovePermission하고 권한을 추가할 때 사용한 레이블을 제공하여 제거할 수 있습니다.

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

{ "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 역할 또는 서비스에 권한을 부여하는 등 더 복잡한 시나리오에 대해 주제의 액세스 제어 정책을 수동으로 관리하는 것이 종종 유용합니다. 를 사용하여 정책 속성을 직접 업데이트SetTopicAttributesAPI하여 이 작업을 수행할 수 있습니다.

  • 보안 모범 사례: 신뢰할 수 있는 AWS 계정 또는 엔터티만 Amazon SNS 주제에 액세스할 수 있도록 권한을 부여할 때는 주의해야 합니다. 보안을 유지하기 위해 주제에 연결된 정책을 정기적으로 검토하고 감사하세요.

  • 정책 제한: Amazon SNS 정책의 크기와 복잡성에는 제한이 있다는 점에 유의하세요. 많은 권한 또는 복잡한 조건을 추가해야 하는 경우 정책이 이러한 제한 범위 내에 있는지 확인하세요.

구독 제한 HTTPS

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

구독을 로 제한하는 정책을 생성하는 방법은 HTTPS다음과 같습니다.

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

    { "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" } } }] }
  2. 정책을 적용합니다. Amazon의 SetTopicAttributes 작업을 사용하여 이 정책을 주제에 SNS API 적용합니다. 주제의 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 대기열에 메시지 게시

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

SetQueueAttributes 작업을 사용하여 사용자 지정 정책을 Amazon SQS 대기열에 적용하여 이를 달성할 수 있습니다. Amazon 과 달리 SNSAmazonSQS은 조건부 정책 문을 생성하기 위한 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 주제에 부여하고 정책을 정기적으로 검토하여 안전하고 up-to-date 안전한지 확인합니다.

  • Amazon 의 기본 정책입니다SNS. 일부 오해와 달리 AmazonSNS은 새로 생성된 주제에 대한 다른 AWS 서비스 액세스를 허용하는 기본 정책을 자동으로 부여하지 않습니다. Amazon SNS 주제에 대한 액세스를 제어하려면 정책을 명시적으로 정의하고 연결해야 합니다.

  • 테스트 및 검증. 정책을 설정한 후 Amazon SNS 주제에 메시지를 게시하고 Amazon SQS 대기열에 성공적으로 전달되었는지 확인하여 통합을 테스트합니다. 이렇게 하면 정책이 올바르게 구성되었는지 확인하는 데 도움이 됩니다.

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

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

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

  1. 정책을 작성합니다. 정책은 Amazon S3 서비스(s3.amazonaws.com) Amazon SNS 주제에 게시하는 데 필요한 권한입니다. 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입니다.

  2. 정책을 적용합니다. 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 DevOpsGuru

    • Amazon EventBridge

    • Amazon 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 S3 버킷에서 이벤트를 트리거하고 Amazon SNS 주제에 성공적으로 게시되었는지 확인하여 설정을 테스트합니다. 이렇게 하면 정책이 올바르게 구성되었는지 확인하는 데 도움이 됩니다.

  • 보안 모범 사례. Amazon SNS 주제 정책을 정기적으로 검토하고 감사하여 보안 요구 사항을 준수하는지 확인합니다. 보안 작업을 유지하려면 신뢰할 수 있는 계정 및 서비스로만 액세스를 제한하는 것이 중요합니다.

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

다른 AWS 서비스 가 다른 가 소유한 주제에 게시하도록 허용할 수 있습니다 AWS 계정. 111122223333 계정에 로그인SES하고 Amazon 를 열고 이메일을 생성했다고 가정해 보겠습니다. 444455556666 계정이 소유한 Amazon SNS 주제에 이 이메일에 대한 알림을 게시하려면 다음과 같은 정책을 생성해야 합니다. 이 작업을 수행하려면 보안 주체(다른 서비스)와 각 리소스의 소유권에 대한 정보를 제공해야 합니다.. Resource 문은 주제 소유자 444455556666의 계정 ID를 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

  • Amazon CloudWatch

  • Amazon DevOpsGuru

  • Amazon 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:SourceArn 및 SNS를 통해서만 Amazon과 통합할 수 있습니다aws:SourceAccount. 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가 인 VPC 엔드포인트에서만 게시할 수 있습니다vpce-1ab2c34d.

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