SQS 큐 정책의 공개 주체 허용 점검

큐를 사용할 주체를 명시하고 필요한 메시지 작업과 접근 조건으로 제한하세요.

설명

SQS 큐 정책의 와일드카드 Principal은 불특정 주체에게 권한을 줄 수 있습니다. 실제 허용 범위는 Action, Resource, 정책 조건과 다른 권한 통제에 달려 있으므로, 공개 주체만 보고 모든 요청이 허용된다고 단정하면 안 됩니다.

IP 조건은 접속 경로를 제한하지만 주체 자체를 특정하지는 않습니다. 승인된 생산자·소비자를 명시하고 저장 시 암호화와 필요한 KMS 권한을 유지하세요. 암호화된 큐는 익명 SendMessage와 ReceiveMessage를 거부합니다.

잠재적 영향

  • 허용된 메시지 작업이 오용되면 불필요한 작업이 큐에 들어가거나 메시지가 유출·삭제될 수 있습니다.
  • 공유 출발지 주소만으로 허용 대상을 구분하면 같은 경로를 쓰는 불필요한 주체도 허용될 수 있습니다.

해결 방법

  • Principal을 필요한 계정·역할·서비스로 제한하고 메시지 작업도 업무에 맞게 줄이세요.
  • 공개 엔드포인트의 IP 조건에는 실제 외부 출발지 주소를 사용하세요. VPC 엔드포인트 경로라면 해당 경로에 맞는 조건을 검토하세요.
  • 큐 정책과 생산자·소비자 및 키 권한을 함께 확인하고 정상 처리와 미승인 접근 거부를 시험하세요.

예시

참조 큐는 별도로 정의하세요. 203.0.113.0/24는 문서용 주소이므로 실제 승인된 외부 출발지 대역으로 바꾸고, 역할 ARN도 실제 값으로 바꾸세요.

변경 전

hcl
resource "aws_sqs_queue_policy" "example" {
  queue_url = aws_sqs_queue.q.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Id": "Queue1_Policy_UUID",
  "Statement": [{
      "Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:*",
      "Resource": "${aws_sqs_queue.q.arn}",
      "Condition" : {
        "IpAddress" : {
            "aws:SourceIp":"203.0.113.0/24"
        }
      }
  }]
}
EOF
}

전체 주체를 허용하지만 IP 조건도 적용됩니다. 따라서 모든 인터넷 주소에 공개된 정책은 아니며, 해당 경로에서 불필요한 주체가 접근할 수 있는지 검토해야 합니다.

변경 후

hcl
resource "aws_sqs_queue_policy" "example" {
  queue_url = aws_sqs_queue.q.id

  policy = <<POLICY
{
   "Version": "2012-10-17",
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:role/queue-client"},
      "Action": "sqs:*",
      "Resource": "${aws_sqs_queue.q.arn}",
      "Condition" : {
         "IpAddress" : {
            "aws:SourceIp":"203.0.113.0/24"
         }
      }
   }]
}
POLICY
}

주체를 지정한 역할로 좁히고 같은 IP 조건을 유지합니다. sqs:*는 여전히 광범위하므로 실제 필요한 메시지 작업만 허용하세요.

참조