Principal이 와일드카드이거나 없는 SNS 토픽 정책

SNS 토픽 정책의 주체와 작업 범위를 명확히 지정하고, 서비스 연동 조건을 검토하여 원치 않는 메시지 발행과 접근을 제한합니다.

설명

SNS 토픽 정책의 Principal: "*"은 주체를 특정 계정이나 역할로 제한하지 않습니다. 적절한 조건 없이 필요한 범위를 넘어 작업을 허용하면, 신뢰하지 않는 주체가 메시지를 발행하거나 그 밖의 허용된 작업을 수행할 수 있습니다. 실제 접근 권한은 작업, 토픽, 조건 및 적용되는 다른 정책에 따라 달라집니다.

토픽 정책에서 접근을 허용하는 구문에는 유효한 Principal과 Effect: Allow가 필요합니다. 허용 구문에서 주체를 생략하는 것은 올바른 접근 제한 방법이 아니며, 생략 자체가 접근을 허용하는 것도 아닙니다.

계정 관련 조건도 의미를 구분해야 합니다. aws:ResourceAccount는 대상 리소스의 소유 계정이며 호출자 계정을 제한하지 않습니다. aws:SourceAccount는 이를 지원하는 AWS 서비스 간 요청에서 출발 리소스의 계정을 제한하는 데 사용하며, 모든 호출자의 계정을 제한하는 일반적인 조건이 아닙니다.

잠재적 영향

  • 실제로 발행 권한이 필요 없는 주체에게 sns:Publish가 허용되면 원하지 않는 메시지가 토픽에 발행될 수 있습니다.
  • 그런 메시지가 구독자나 자동화로 전달되면 잘못된 알림, 처리 오류 또는 추가 비용이 발생할 수 있습니다.
  • 필요한 범위를 넘는 계정 간 권한이 유효하면 의도한 신뢰 범위를 벗어난 접근이 가능할 수 있습니다. 영향은 실제 작업, 리소스 및 요청 조건에 따라 달라집니다.

해결 방법

  • 필요한 AWS 계정, 역할 또는 서비스를 유효한 Principal 형식으로 지정하고, 불필요한 허용 구문을 제거하세요.
  • sns:Publish 등 필요한 작업과 정확한 토픽 ARN을 지정하세요. 서비스 연동에서는 해당 서비스가 지원하는 aws:SourceArn, aws:SourceAccount 등의 조건을 사용하고 연산자와 실제 값을 검증하세요.
  • 정책 전체와 연결된 Topics를 검토하고, 허용해야 할 요청과 거부해야 할 요청을 각각 검증하세요. 필요한 발행자나 서비스 연동이 계속 동작하는지도 확인하세요.

토픽 정책 구성 예시

다음 발췌는 주체 지정 방식을 비교합니다. 두 예시 모두 필수 Topics가 빠져 있고 arn:aws:sns:MyTopic도 리전과 계정 ID가 없는 불완전한 ARN이므로, 그대로 배포할 수 있는 템플릿은 아닙니다.

와일드카드 주체의 발행 허용

yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: ''
Resources:
  snsPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Sid: MyTopicPolicy
            Effect: Allow
            Principal: "*"
            Action:
              - sns:Publish
            Resource: arn:aws:sns:MyTopic

이 구문은 특정 주체나 조건으로 제한하지 않고 sns:Publish를 허용하려는 구성입니다. 누락된 배포 속성을 보완할 때에도 필요한 발행자와 토픽으로 권한을 제한해야 합니다.

미완성 주체 지정

yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: ''
Resources:
  snsPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Sid: MyTopicPolicy
            Effect: Allow
            Principal: "otherPrincipal"
            Action:
              - sns:Publish
            Resource: arn:aws:sns:MyTopic

otherPrincipal은 유효한 AWS 계정이나 역할을 지정한 값이 아닙니다. 의도한 계정, 역할 또는 서비스의 유효한 주체 지정으로 바꾸고, 토픽 ARN과 Topics를 완성한 뒤 전체 정책을 검증하세요.

참조