AWS ELB 사용시 Client IP를 확인할 수 없는 문제

FGPRJS·2022년 12월 29일
0

문제

C# ForwardedHeader 설정만으로는 Elastic Load Balancer(여기서는 Application Load Balancer에 한하여)에서 Client IP 추적이 안된다.

ASPNET의 예시

//Startup.cs - Configure
app.UseForwardedHeaders(new ForwardedHeadersOptions()
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});                


//Controller 따위에서
var clientIp = this.Request.HttpContext.Connection.RemoteIpAddress.ToString();

Load Balancer를 사용한다면, ForwardedFor 된 IP는 Client IP가 아니고, Load Balancer의 Private IP (172.따위로 시작하는)를 가져와 버리게 된다.


해결 방법

AWS공식 문서를 참조한다.

HTTP/HTTPS 리스너가 있는 Application Load Balancer 및 Classic Load Balancer의 경우 X-Forwarded-For HTTP 헤더에 클라이언트 IP 주소가 캡처됩니다. 이 IP 주소를 기록하도록 웹 서버 액세스 로그를 구성할 수 있습니다.

ELB는 대신 HTTP헤더에 Client IP를 기록해 준다고 한다.

다음과 같이 Header에서 갖고 올 수 있도록 한다.

string clientIp;

if(context.HttpContext.Request.Headers.ContainsKey("X-Forwarded-For"))
{
	clientIp = this.Request.HttpContext.Request.Headers["X-Forwarded-For"];
}
profile
FGPRJS

0개의 댓글