API Gateway 인증 구성 점검

보호할 API 경로에 적절한 인증을 연결하고 실제 권한 검사를 확인하세요.

설명

보호가 필요한 API에 유효한 인증·인가가 없으면 의도하지 않은 호출자가 기능을 사용할 수 있습니다. Authorizer 리소스가 없더라도 IAM 인증이나 다른 접근 통제가 적용될 수 있으므로 API의 목적과 실제 메서드·경로 구성을 확인해야 합니다.

권한 부여자를 선언하는 것만으로 경로에 인증이 적용되지는 않습니다. API 유형에 맞게 연결해야 하며 WebSocket API의 Lambda 권한 부여자는 $connect 경로에서만 사용할 수 있습니다.

잠재적 영향

  • 인증이 필요한 작업이 확인되지 않은 호출자에게 허용될 수 있습니다.
  • 연결 시 인증하더라도 메시지별 권한을 확인하지 않으면 허용 범위를 벗어난 작업이 실행될 수 있습니다.

해결 방법

API 유형과 호출자에 맞는 인증 방식을 선택하고 보호할 메서드나 경로에 연결하세요. WebSocket API에서는 Lambda 권한 부여자를 $connect 경로의 CUSTOM 인증과 AuthorizerId에 연결하고 Lambda 호출 권한을 준비하세요. 연결 이후의 작업 권한도 애플리케이션에서 확인하고 허용·거부 사례를 시험하세요.

예시

WebSocket API와 권한 부여자 정의의 발췌입니다. Lambda ARN을 실제 함수로 바꾸고 호출 권한과 $connect 경로를 별도로 구성하세요. 쿼리 문자열의 토큰이 로그에 노출되지 않도록 하고 WSS 연결을 사용하세요.

변경 전

yaml
Resources:
  DevWebSocket:
    Type: AWS::ApiGatewayV2::Api
    Properties:
      Name: dev-websocket
      ProtocolType: WEBSOCKET
      RouteSelectionExpression: $request.body.action

API 정의만 있으며 인증 경로 설정은 포함하지 않습니다. 공개 이용 의도와 실제 경로의 인증 구성을 확인하세요.

변경 후

yaml
Resources:
  DevWebSocket:
    Type: AWS::ApiGatewayV2::Api
    Properties:
      Name: dev-websocket
      ProtocolType: WEBSOCKET
      RouteSelectionExpression: $request.body.action

  DevAuthorizer:
    Type: AWS::ApiGatewayV2::Authorizer
    Properties:
      Name: request-authorizer
      ApiId: !Ref DevWebSocket
      AuthorizerType: REQUEST
      IdentitySource:
        - route.request.querystring.token
      AuthorizerUri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:auth/invocations

REQUEST 권한 부여자를 추가합니다. 이 선언만으로 인증이 활성화되지는 않으며 $connect 경로에 연결해야 합니다.

참조