API Gateway 메서드 인증 설정 점검

보호가 필요한 메서드에 호출자 인증과 작업별 접근 권한을 적용하세요.

설명

API Gateway 메서드의 AuthorizationType이 NONE이면 해당 메서드에서 API Gateway의 호출자 인증을 수행하지 않습니다. 보호가 필요한 기능에 다른 접근 통제도 없다면 의도하지 않은 호출자가 데이터를 읽거나 작업을 실행할 수 있습니다.

공개 콘텐츠나 CORS 사전 요청을 위한 무인증 메서드는 정상적인 용도일 수 있습니다. 리소스 정책과 백엔드의 인증·인가도 실제 접근에 영향을 주며, OPTIONS 응답 자체는 다른 메서드를 보호하지 않습니다.

잠재적 영향

  • 민감한 데이터 조회나 변경 기능이 필요한 권한 없이 호출될 수 있습니다.
  • 공개 호출의 남용으로 백엔드 부하나 비용이 늘어날 수 있습니다.

해결 방법

각 메서드의 공개 필요성을 확인하고 보호할 메서드에는 AWS_IAM, Cognito 또는 Lambda 권한 부여자 등 적절한 인증을 구성하세요. 인증된 호출자의 작업·리소스 권한도 제한하세요. 변경을 실제 스테이지에 배포하고 승인된 호출은 성공하며 승인되지 않은 호출은 거부되는지 시험하세요.

예시

서로 다른 메서드를 보여 주는 발췌입니다. API와 통합 설정은 생략했습니다. 뒤의 OPTIONS 예제는 앞의 GET 메서드에 인증을 추가하는 변경이 아닙니다.

변경 전

yaml
Resources:
  MockMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      RestApiId: !Ref MyApi
      ResourceId: !GetAtt MyApi.RootResourceId
      HttpMethod: GET
      AuthorizationType: NONE

GET 메서드가 API Gateway 인증을 사용하지 않습니다. 이 메서드가 제공하는 기능과 다른 접근 통제를 검토하세요.

변경 후

yaml
Resources:
  CorsOptionsMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      RestApiId: !Ref MyApi
      ResourceId: !GetAtt MyApi.RootResourceId
      HttpMethod: OPTIONS
      AuthorizationType: NONE

OPTIONS 메서드도 인증 없이 호출할 수 있도록 설정합니다. CORS 사전 요청 처리에 사용할 수 있지만 GET 메서드를 제거하거나 보호하지는 않습니다.

참조