[AWS] Lambda Connection Handler
앞선 포스팅에서 Client VPN을 구성하고 연결하는 과정을 진행해봤다. (https://heywantodo.tistory.com/304)
AWS Client VPN은 Client VPN Endpoint를 통해 접속한 Clinet들의 목록을 확인하고, 정책의 업데이트 혹은 의도하지 않은 사용자의 접속이 감지 된 경우 강제 연결 종료를 시킬 수 있는 등의 다양한 관리 기능을 제공한다.
Lambda Connection Handler
Lambda Connection Handler를 이용하여 추가적인 보안 정책 및 VPN 운영 정책을 관리하고 적용할 수 있다.
Handler는 AWS 람다 기능을 통해 구현되며, 사전에 정책들을 검토하고 정책이 통과되었을 경우에만 새 연결을 맺게된다.
예를 들어 지정 시간에만 접속을 허용하는 간단한 정책을 구성하여 적용해보자.
1. Lambda 콘솔에서 정책에 사용 할 함수를 생성해준다.
2. "Author form scratch" 옵션으로 선택하고, 아래와 같이 입력해준다.
참고로 Lambda 함수의 이름은 AWSClientVPN 접두사로 시작해야 Connection Handler로 사용 할 수 있다.
3. 함수를 생성하고, 해당 함수의 handler에 아래의 함수를 붙여넣는다.
import datetime
def is_weekday():
week_index = datetime.datetime.today().weekday()
if week_index < 5:
return True
return False
def lambda_handler(event, context):
allow = False
error_msg = "You are not allowed to connect on a weekend day."
if is_weekday():
allow = True
return {
"allow": allow,
"error-msg-on-failed-posture-compliance": error_msg,
"posture-compliance-statuses": [],
"schema-version": "v1"
}
지정된 시간(주중)에만 연결을 허용하고, 주중이 아닐경우 "You are not allowed to connect on a weekend day"라는 문구를 반환하는 코드다.
+) 미리 정의된 IP pool 대역대에서만 연결을 할 수 있는 코드의 예제는 다음과 같다.
import ipaddress
def is_public_source_ip_valid(public_ip):
if ipaddress.ip_address(public_ip) in ipaddress.ip_network('72.21.0.0/16'):
return True
return False
def lambda_handler(event, context):
public_ip = event['public-ip']
allow = False
error_msg = "Your IP is not allowed to establish a connection. Please contact your administrator."
if is_public_source_ip_valid(public_ip):
allow = True
return {
"allow": allow,
"error-msg-on-failed-posture-compliance": error_msg,
"posture-compliance-statuses": [],
"schema-version": "v1"
}
4. Deploy 버튼을 눌러 변경 사항을 저장 후 VPC 콘솔로 이동하여 Client VPN Endpoint 설정을 변경한다.
정책을 적용할 CVPN-endpoint를 선택하고 Actions > Modify client VPN endpoint를 선택한다.
5. C lient connect handler 메뉴로 이동하여 "Enable client connet handler" 옵션을 On 한 뒤
ARN에서 방금 생성한 함수를 선택한다.
모든 설정을 완료하고, VPN Client에 정책에 반하는 조건으로 접속 시 아래와 같은 에러 메시지가 반환된다.
'💻 CSP > AWS' 카테고리의 다른 글
[AWS] S3 수명 주기 정책 (Life Cycle Rule) (0) | 2024.04.05 |
---|---|
[AWS] ECR 로그인 & 빌드 및 푸쉬 (0) | 2024.03.11 |
[AWS] Transit Gateway (0) | 2024.02.28 |
[AWS] Client VPN (2) (0) | 2024.02.27 |
[AWS] Client VPN (1) (0) | 2024.02.26 |