설명
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로 허용 범위를 좁힙니다. 다른 적용 가능한 정책과 실제 메서드 설정도 함께 확인하세요.