설명
REST API의 보호 대상 메서드에 유효한 인증과 인가가 없다면 의도하지 않은 호출자가 기능을 사용할 수 있습니다. Authorizer 리소스가 없어도 IAM 인증이나 다른 통제가 적용될 수 있으므로 실제 메서드 설정을 확인해야 합니다.
Lambda 또는 Cognito Authorizer를 선언하는 것만으로 메서드가 보호되지는 않습니다. 해당 REST API를 참조하고 메서드의 authorization과 authorizer_id를 맞게 설정해야 합니다.
잠재적 영향
- 인증 구조 약화: 호출자 검증을 중앙에서 통제하기 어렵습니다.
- 잘못된 공개 범위: 원래 보호해야 할 API가 느슨하게 열릴 수 있습니다.
- 운영 일관성 저하: API마다 다른 인증 방식이 섞여 관리가 복잡해집니다.
해결 방법
- 서비스 목적에 맞는 인증을 선택하세요. Authorizer를 사용한다면 대상 REST API를 참조하는
aws_api_gateway_authorizer를 구성하세요. - Lambda Authorizer는 메서드에
CUSTOM, Cognito는COGNITO_USER_POOLS와 해당authorizer_id를 설정하세요. 필요한 호출 권한도 구성하세요. - Authorizer와 메서드 권한 설정이 함께 동작하는지 배포 전에 검증하세요.
예시
API와 Lambda Authorizer의 연결만 보여 주는 발췌입니다. Lambda, 호출 역할과 메서드 설정은 생략했습니다. 첫 예시에서 참조하는 demo API는 별도 리소스로 가정합니다.
변경 전
hcl
resource "aws_api_gateway_authorizer" "demo" {
name = "demo"
rest_api_id = aws_api_gateway_rest_api.demo.id
authorizer_uri = aws_lambda_function.authorizer.invoke_arn
authorizer_credentials = aws_iam_role.invocation_role.arn
}
resource "aws_api_gateway_rest_api" "demo2" {
name = "auth-demo"
}
변경 후
hcl
resource "aws_api_gateway_authorizer" "demo" {
name = "demo"
rest_api_id = aws_api_gateway_rest_api.demo.id
authorizer_uri = aws_lambda_function.authorizer.invoke_arn
authorizer_credentials = aws_iam_role.invocation_role.arn
}
resource "aws_api_gateway_rest_api" "demo" {
name = "auth-demo"
}
설명:
- 변경 전: Authorizer는 존재하지만 다른 REST API를 참조하고 있어 대상 API를 보호하지 못합니다.
- 변경 후: Authorizer가 표시된 REST API를 참조합니다. 메서드에도 인증 유형과 Authorizer를 연결한 뒤 허용·거부 요청을 검증해야 합니다.