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

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

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

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

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

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

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

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

{ "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 계정

추가 정보:

  • 사용자 지정 정책 관리: 권한을 부여하는 데는 편리하지만 AddPermission 조건을 추가하거나 특정 역할 또는 서비스에 권한을 부여하는 등 더 복잡한 시나리오에서는 주제의 액세스 제어 정책을 수동으로 관리하는 것이 유용한 경우가 많습니다. IAM 를 사용하여 정책 속성을 직접 업데이트하면 이 작업을 수행할 수 있습니다. SetTopicAttributes API

  • 보안 모범 사례: 신뢰할 수 있는 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. 정책을 적용하십시오. SNSAPIAmazon의 SetTopicAttributes 작업을 사용하여 이 정책을 주제에 적용하십시오. 생성한 JSON 정책으로 주제 Policy 속성을 설정합니다.

    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 대기열에 올바른 권한을 구성해야 합니다. SNSAmazon과 Amazon 모두 해당 액세스 제어 정책 언어를 SQS AWS사용하지만 Amazon 주제에서 메시지를 보낼 수 있도록 Amazon SQS 대기열에 정책을 명시적으로 설정해야 합니다. SNS

SetQueueAttributes작업을 사용하여 Amazon SQS 대기열에 사용자 지정 정책을 적용하면 이를 달성할 수 있습니다. SNSAmazon과 달리 Amazon은 조건이 포함된 정책 설명을 생성하는 AddPermission 작업을 SQS 지원하지 않습니다. 따라서 정책을 수동으로 작성해야 합니다.

다음은 대기열로 메시지를 전송할 SNS 권한을 Amazon에 부여하는 Amazon SQS 정책의 예입니다. 이 정책은 Amazon SNS 주제가 아니라 Amazon SQS 대기열과 연결되어 있다는 점에 유의하십시오. 지정된 SQS 작업은 Amazon 작업이고, 리소스는 대기열의 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 SNS 주제에 Amazon SQS 대기열과 상호 작용하는 데 필요한 권한만 부여하고 정책을 정기적으로 검토하여 정책이 안전한지 up-to-date 확인하십시오.

  • 아마존의 기본 정책SNS. 일부 오해와 달리 SNS Amazon은 새로 만든 주제에 AWS 서비스 대한 다른 사용자의 액세스를 허용하는 기본 정책을 자동으로 부여하지 않습니다. Amazon SNS 주제에 대한 액세스를 제어하는 정책을 명시적으로 정의하고 첨부해야 합니다.

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

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

다른 Amazon S3 버킷이 Amazon SNS 주제에 이벤트 알림을 AWS 계정 게시하도록 허용하려면 해당 주제의 액세스 정책을 적절하게 구성해야 합니다. 여기에는 특정 AWS 계정 Amazon S3 서비스에 권한을 부여하는 사용자 지정 정책을 작성한 다음 이 정책을 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은 아마존 주제를 AWS 계정 소유한 ID입니다. SNS

    • Amazon S3 버킷 소유자 — 444455556666은 알림을 보내는 Amazon AWS 계정 S3 버킷을 소유한 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 주제에 대한 액세스를 제한하려면 이 조건을 사용하는 것이 중요합니다.

    • 아마존 API 게이트웨이

    • 아마존 CloudWatch

    • 아마존 DevOps 전문가

    • 아마존 ElastiCache

    • 아마존 EventBridge

    • 아마존 GameLift

    • 아마존 핀포인트 앤 보이스 SMS API

    • 아마존 RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • 아마존 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 설명서는 주제를 제공하며ARN, 여기에는 주제 소유자 444455556666의 계정 ID가 포함됩니다. 이 "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" } } } ] }

SNSAmazon에 이벤트를 게시할 때 다음 서비스가 지원됩니다aws:SourceOwner.

  • 아마존 API 게이트웨이

  • 아마존 CloudWatch

  • 아마존 DevOps 전문가

  • 아마존 ElastiCache

  • 아마존 GameLift

  • 아마존 핀포인트 앤 보이스 SMS API

  • 아마존 RDS

  • Amazon Redshift

  • 아마존 SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccountaws:SourceOwner 비교

중요

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

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