API Gateway REST API 정책의 과도한 접근 범위

REST API 리소스 정책은 필요한 호출 주체, 작업과 API 경로만 허용해야 합니다.

설명

REST API 리소스 정책에서 모든 주체에 광범위한 호출 권한을 부여하면 의도하지 않은 접근이 허용될 수 있습니다. 실제 접근은 메서드 인증, 인가와 다른 적용 가능한 정책에도 달려 있으므로 공개 허용만으로 인증 우회가 성립하지는 않습니다.

잠재적 영향

  • 접근 통제가 함께 허용하면 승인되지 않은 클라이언트가 API를 호출할 수 있습니다.
  • 과도한 호출로 백엔드 기능이 오용되거나 비용과 서비스 부하가 증가할 수 있습니다.

해결 방법

필요한 호출 주체와 execute-api:Invoke만 허용하고, Resource에는 실제 API 실행 ARN과 필요한 스테이지, 메서드, 경로를 지정하세요. 사용 가능한 조건으로 접근을 더 제한하고 메서드 인증과 함께 정상 요청 및 거부되어야 할 요청을 시험하세요.

예시

리소스 정책의 발췌입니다. 참조하는 API는 별도로 구성하고 계정, 사용자, 경로와 IP 주소를 실제 승인된 값으로 바꾸세요. 변경 후의 IAM 사용자 요청에는 AWS_IAM 메서드 인증과 SigV4 서명이 필요합니다.

변경 전

hcl
resource "aws_api_gateway_rest_api_policy" "example" {
  rest_api_id = aws_api_gateway_rest_api.api_gw.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:*",
      "Resource": "${aws_api_gateway_rest_api.api_gw.execution_arn}/*/*/*"
    }
  ]
}
EOF
}

변경 후

hcl
resource "aws_api_gateway_rest_api_policy" "example" {
  rest_api_id = aws_api_gateway_rest_api.api_gw.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": "execute-api:Invoke",
      "Resource": "${aws_api_gateway_rest_api.api_gw.execution_arn}/prod/GET/orders",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "123.123.123.123/32"
        }
      }
    }
  ]
}
EOF
}

변경 후의 정책은 특정 사용자, GET /orders와 소스 IP로 허용 범위를 좁힙니다. 다른 적용 가능한 정책과 실제 메서드 설정도 함께 확인하세요.

참조