설명
백엔드가 API Gateway의 호출을 클라이언트 인증서로 확인하도록 설계된 경우, 스테이지에 필요한 인증서가 없으면 해당 인증을 사용할 수 없습니다. ClientCertificateId는 API Gateway에서 HTTPS 백엔드로 보내는 요청의 인증에 관한 설정이며 공개 API의 HTTPS 인증서 설정이 아닙니다.
백엔드가 실제로 인증서를 검증해야 보호가 적용됩니다. 다른 적절한 백엔드 인증 방식이 있다면 모든 API에 이 인증서를 추가할 필요는 없습니다.
잠재적 영향
- 인증서 확인도 다른 인증도 없는 백엔드는 의도하지 않은 직접 호출을 허용할 수 있습니다.
- 인증서가 만료되거나 백엔드 신뢰 설정과 맞지 않으면 정상 요청이 실패할 수 있습니다.
해결 방법
백엔드 인증 요구사항을 확인하세요. API Gateway 클라이언트 인증서를 사용할 경우 인증서를 생성하고 스테이지의 ClientCertificateId에 연결한 뒤 HTTPS 백엔드가 해당 인증서를 검증하도록 구성하세요. 만료 전에 인증서를 교체하고 정상 요청과 승인되지 않은 직접 요청을 시험하세요.
예시
REST API 스테이지의 일부 설정입니다. API와 배포, API Gateway가 생성한 클라이언트 인증서 및 HTTPS 백엔드의 신뢰 설정은 별도로 준비해야 합니다.
변경 전
yaml
Resources:
ProdStage:
Type: AWS::ApiGateway::Stage
Properties:
StageName: Prod
RestApiId: !Ref MyRestApi
DeploymentId: !Ref ApiDeployment
스테이지에 백엔드용 클라이언트 인증서를 지정하지 않습니다. 이것이 공개 API의 HTTPS 비활성화를 의미하지는 않습니다.
변경 후
yaml
Resources:
ProdStage:
Type: AWS::ApiGateway::Stage
Properties:
StageName: Prod
RestApiId: !Ref MyRestApi
DeploymentId: !Ref ApiDeployment
ClientCertificateId: !Ref ClientCertificate
ClientCertificateId로 백엔드 요청에 사용할 인증서를 연결합니다. 백엔드가 인증서를 검증해야 하며, 공개 호출자에 대한 인증은 별도입니다.