본문 바로가기

AWS

AWS Lambda IP 확인하는 방법 - 외부 서비스 ACL 관련

시나리오

새 서비스(이하 AddressAPI)가 새롭게 만들어지는 상황, 이 서비스는 ACL(Access Control List)을 사용하여 접속을 관리함. 

우리 팀의 Lambda가 AddressAP를 사용하기 위해 해당 팀에 소통에 필요한 IP를 전달해야 한다.

 

 

해결 방안 1.  Lambda 실행 중에 자신의 IP를 확보하기.

import urllib.request


def lambda_handler(event, context):
    data = urllib.request.urlopen("https://checkip.amazonaws.com") # 현재 Instance의 IP를 반환
    ip = data.read()
    print(ip)
    return ip

 

이렇게 해보면 어떨까? 

 

아래 사진에서 확인할 수 있듯이 해당 람다의 IP를 확인할 수 있다.

그런데 문제는 시간이 좀 지나고 나면 IP가 변한다는 것. 

고정적인 IP를 확보할 수 없다면 ACL에 등록할 수 없으니 이 방법은 사용할 수 없다.

 

 

해결 방안 2.  NAT gateway 사용하기

Lambda 상세페이지에는 IP가 표시되지 않는다. 그러면 어떻게 해야할지 천천히 찾아보자.

AWS Console > Lambda > Configuration

 

Lambda 상세페이지에 들어가면 Configuration 탭이 있다. 여기서 VPC를 보면 No VPC Configuration 으로 특별히 네트워크 구성이 이뤄져있지 않다.

1. VPC, Subnets, Security Groups 을 추가한다. 

 

2. Subnet 을 클릭하여 상세 내용을 볼 수 있게 이동한다.

Subnet > Route Table

3. 0.0.0.0/0 행의 Target(igw-067xxxxx)을 확인한다.
internet gateway로 되어있는 것이 보인다.  

 

4. NAT(Network Address Translation) gateway를 생성한다. 

VPC > NAT gateways > Create NAT Gateway

연결할 Subnet을 고른 후 Connectivity type은 Public, 그리고 Elastic IP allocation ID에는 Elastic IP를 지정(없을 시 생성)한다.

고정된 IP를 갖기 위해서이다.

VPC > NAT gateways : 생성 후 상세페이지

생성 후 상세페이지를 보면 고정된 IP를 확인할 수 있다. 

 

VPC > Route Tables > rtb-xxxx > Edit routes

Route Tables에 들어가서 routes를 방금 생성한 NAT로 변경한다. 

 

VPC > Route Tables > 상세페이지

하단 부 Routes의 0.0.0.0/0의 타겟이 위에서 생성한 NAT가 되어 있는 것을 확인한다.

 

VPC > NAT gateways

해당 NAT gateway의 Primary public IPv4를 ACL에 넣을 값으로 전달해주면 된다.

 

본 예제에서는 NAT gateway, Route table가 없었기에 처음부터 만들었다.

 

정리하자면 아래 순서대로 확인하여 Lambda가 사용하는 NAT gateway의 고정 IP 값을 알아낼 수 있다.

 

결론

NAT gateway를 사용하면 Outbound 통신 시 고정 IP로 통신이 가능해진다.

 

아래 순서대로 확인 가능함.

1. Lambda가 실행되고 있는 VPC의 subnet 확인
2. Subnet의 route table 확인
3. Route table의 NAT gateway(0.0.0.0/0) 확인
4. NAT gateway의 Primary Public IPv4를 확인