설명
보호가 필요한 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 경로에 연결해야 합니다.