설명
aws_api_gateway_method.authorization = "NONE"이면 API Gateway는 해당 메서드의 호출자를 인증하지 않습니다. 보호해야 할 기능에 다른 통제도 없다면 의도하지 않은 사용자가 데이터를 읽거나 작업을 수행할 수 있습니다.
공개 콘텐츠나 CORS 사전 요청에는 인증 없는 메서드가 적절할 수 있습니다. 리소스 정책과 백엔드 인증·인가도 접근에 영향을 주며, OPTIONS 응답만으로 다른 메서드가 보호되지는 않습니다.
잠재적 영향
- 무단 호출 허용: 인증 없이 API 기능을 직접 사용할 수 있습니다.
- 데이터 노출 가능: 읽기 API라면 내부 데이터가 외부에 노출될 수 있습니다.
- 백엔드 오남용: 쓰기 API라면 비용 증가나 데이터 변조로 이어질 수 있습니다.
해결 방법
- 메서드의 공개 필요성을 확인하고 보호 대상에는 IAM, Cognito 또는 Lambda Authorizer 등 적절한 인증을 적용하세요.
- 인증된 호출자의 작업 권한도 제한하고 변경 사항을 실제 Stage에 배포하세요.
- 공개 API가 필요한 경우에도 허용 대상, 호출 한도, 감사 로그를 함께 구성하세요.
예시
같은 GET 메서드의 인증 설정을 비교합니다. API, 리소스, 통합, Lambda Authorizer 및 호출 권한은 별도로 구성해야 합니다.
변경 전
hcl
resource "aws_api_gateway_method" "example" {
rest_api_id = aws_api_gateway_rest_api.this.id
resource_id = aws_api_gateway_resource.this.id
http_method = "GET"
authorization = "NONE"
request_parameters = {
"method.request.path.proxy" = true
}
}
변경 후
hcl
resource "aws_api_gateway_method" "example" {
rest_api_id = aws_api_gateway_rest_api.this.id
resource_id = aws_api_gateway_resource.this.id
http_method = "GET"
authorization = "CUSTOM"
authorizer_id = aws_api_gateway_authorizer.this.id
request_parameters = {
"method.request.path.proxy" = true
}
}
설명:
- 변경 전:
GET은 API Gateway의 호출자 인증을 사용하지 않습니다. 리소스 정책과 백엔드 통제도 확인하세요. - 변경 후: 같은
GET에CUSTOM인증과 Authorizer를 연결합니다. 허용된 호출은 성공하고 미허용 호출은 거부되는지 확인하세요.