편집AWS API 게이트웨이 .NET에 핵심 웹 API
내가 지금은 서버에 인증서를 설치하고 별도로 클라이언트 인증서의 유효성을 검사 할 필요가 있음을 알고 있습니다. 내가 https://github.com/xavierjohn/ClientCertificateMiddleware
찾고 있어요 나는 인증서 중 하나이어야한다 생각 CA의 AWS의 DOCO에 나열된 - http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-supported-certificate-authorities-for-http-endpoints.html
이 인증서는 API 게이트웨이 인스턴스에 대한 HTTPS 연결을 설정 할 수 있으며 그것은 함께 통과 유효성을 검사 할 수있는 클라이언트 인증서.
ORIGINAL POST 나는 새로운 microservices 환경을 구성하려고 나는 몇 가지 문제에 봉착했습니다. 여기
내가 달성하기 위해 노력하고있어입니다 :- 각도의 웹 사이트가 API 게이트웨이를 통해 백엔드 API에 연결 (URL :
gateway.company.com.au
) 게이트웨이는 4 단계로 구성되어 - API - DEV, UAT, PreProd PROD
- API 게이트웨이의 리소스는 네트워크 부하 분산 장치를 통한 백 엔드 서비스에 대한 HTTP 프록시입니다. 30,000, 30,001, 즉 등이
- 네트워크 부하 분산
services.company.com.au
- AWS ECS의 DNS를 가지고 UAT에 대한 DEV, 31000, 31000 등을 위해 대한 고정 표시기 용기를 호스팅 : 각 단계의 각 서비스는 할당 된 다른 포트를 얻을 것이다 백엔드 서비스 이러한 서비스는 .NET Core 2.0 웹 API 프로젝트입니다.
- ECS 작업 정의는 사용할 컨테이너 이미지를 지정하며 포트 매핑이 구성되어 있습니다. - 호스트 포트 : 0 컨테이너 포트 : 4430. 호스트 포트 0은 ECS에 의해 동적으로 할당됩니다.
- 네트워크 부하 분산 장치에는 각 마이크로 서비스 포트에 대한 수신기가 있으며 요청을 대상 그룹에 전달합니다. 각 환경에 대한 각 서비스에 대한 대상 그룹이 있습니다.
- 대상 그룹은 ECS 클러스터 모두 EC2 인스턴스를 포함하고, 포트는 동적 ECS 의해 할당 이 포트는 다음 클라이언트를 방지하기 위해
4430의 용기 포트 ECS/도커로 매핑된다
services.company.com.au
을 직접 호출 할 때 API 게이트웨이는 클라이언트 인증서로 구성됩니다. 다음과 같이 내 웹 API에서 , 나는 웹 호스트를 짓고 있어요 : .UseKestrel(options =>
{
options.Listen(new IPEndPoint(IPAddress.Any, 4430), listenOptions =>
{
const string certBody = "-----BEGIN CERTIFICATE----- Copied from API Gateway Client certificate -----END CERTIFICATE-----";
var cert = new X509Certificate2(Encoding.UTF8.GetBytes(certBody));
var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions
{
ClientCertificateMode = ClientCertificateMode.AllowCertificate,
SslProtocols = System.Security.Authentication.SslProtocols.Tls,
ServerCertificate = cert
};
listenOptions.UseHttps(httpsConnectionAdapterOptions);
});
})
내 DockerFile이다 : 나는 시도하고 서비스에 액세스하는 우체부를 사용하는 경우
FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80 443
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "microservice.company.com.au.dll"]
, 내가 얻을 a 504 Gateway timeout
.CloudWatch에서 로그를 보여줍니다
- API 게이트웨이
- 응용 프로그램로드 밸런서 - 경로 기반 라우팅 오른쪽 컨테이너 에 지시하는 : 나는 다음과 같은 구조 작업을 얻을 수있었습니다
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Sending request to http://microservice.company.com.au:30000/service
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Execution failed due to an internal error
(e4d594b7-c8f3-11e7-8458-ef6f94e65b64) Method completed with status: 504
아쉽게도 API 게이트웨이가 공용로드 균형 조정기에만 액세스 할 수 있으므로 응용 프로그램로드 균형 조정기의 DNS에 서비스가 열려 있습니다.
어디서 실패했는지는 확실치 않지만 클라이언트 인증서를 사용하여 SSL을 종료하려면 .NET Core/Kestrel을 올바르게 구성하지 않았을 것으로 생각됩니다. 경우이 전체 아키텍처와 관련
, 그것은 일을 더 쉽게 만들 것입니다 :
- 공공 응용 프로그램로드 밸런서가 SSL 연결을 종료하는 API 게이트웨이의 클라이언트 인증서를 사용하여 HTTPS 리스너를 사용할 수 게이트웨이는
어떤 조언, 제안 사항이 고려 될 프록시로하지만 순간에 람다를 사용하지 않고 내부 부하 분산 장치에 연결할 수
더 많은 정보를 알고 싶습니다. 질문을 업데이트 할 것입니다.