안녕하세요
최근 고객사에서 특정 IP만 내부 서버에 접근하게 하는 방법에 대해서 궁금해하여 다른 사용자분들도 알고 있으면 좋을 것 같아 이번 시간에는 특정 IP만 내부 서버에 접속하게 하는 방법을 소개하려고 합니다.
대부분의 네이버 클라우드 서비스 환경에서 가용성 높게 구성한다면 다음과 같이 3 티어 아키텍처를 따릅니다.
이때 네이버 클라우드에서는 타 CSP와 다른 몇 가지 특성이 있는데 그 부분을 고려해서 아키텍처를 설계해주셔야 합니다.
NCP에서 Private Subnet에 있는 리소스에 특정 IP에서만 접근하게 하기 위한 방법
외부망과 로드밸런서 사이에는 ACG 적용 불가
로드밸런서에서 리스너 설정을 통해 트래픽을 분기 처리는 가능하지만 로드밸런서에는 ACG를 적용할 수 없기 때문에 외부망과 로드밸런서 사이에는 모두 접근이 허용되어 있습니다.
그림으로 보면 다음과 같이 A 구간에는 NACL을 이용해서 접근 통제가 가능하고 B 구간은 ACG를 이용해서 접근 통제가 가능합니다. 네이버 클라우드에서는 로드밸런서와 서버용 서브넷이 별도이기 때문에 B 구간 역시 NACL을 이용한 접근 제어가 가능하나 로드밸런서를 통해 통신 시 내부 서버에서는 접근 IP가 로드밸런서의 사설 IP와 통신이 이루어지기 때문에 크게 의미는 없습니다.
(1) NACL을 이용한 접근 제어
다음과 같이 VPC - [Network ACL]을 통해 특정 IP만 접근 가능하게 끔 접근을 제어할 수 있습니다. 이렇게 설정하면 기본적으로 80 포트에 대해서 전체 접근이 되지 않지만 특정 IP의 우선순위를 높여 추가하면 접근 가능합니다.
발생 가능한 문제)
1개의 Subnet에 여러 로드밸런서가 생성된 경우
NACL은 서브넷 레벨에서 적용 가능한 접근 제어 수단이기 때문에 다음과 같이 1개의 로드밸런서 전용 서브넷에 여러 개의 로드밸런서가 올라가 있고 해당 로드밸런서에서 특정 IP가 접근 했을 때 로드밸런서 A에서는 허용, 로드밸런서 B에서는 차단해야 할 경우 문제가 생깁니다.
>> 로드밸런서 별로 접근 제어를 할 수 없어서 문제가 발생
다음은 서브넷을 구분하여 각각의 서브넷에 NACL을 적용해주는 방법입니다.
이 방법을 이용하여 로드밸런서 A를 구성한 서브넷에는 특정 IP를 허용하는 정책을 추가하고, 로드밸런서 B를 구성한 서브넷에는 특정 IP를 차단하는 정책을 추가하면 됩니다.
하지만 이 방법은 이미 생성되어 서비스 중인 운영 환경에서 서비스 중단 없이 서비스 연속성을 확보하기 어렵습니다. 미리 서브넷을 포함한 신규 로드밸런서와 설정 등을 진행해야 하고 무엇보다 인프라와 서비스 담당자 입장에서 번거로운 작업이기 때문입니다.
위 처럼 서브넷을 생성할 수 없는 상황이 발생할 수도 있습니다. 예를 들어 외부망과 로드밸런서 사이에 접근 제어 방법을 모른 채 처음부터 로드밸런서 전용 서브넷에 많은 IP를 할당하여 서비스 연속성을 확보하기 위해 로드밸런서 전용 서브넷을 추가로 생성하려고 했더니 IP 주소 풀이 가득 차서 더 이상 리소스를 생성하지 못하는 상태입니다.
>> IP 주소 풀이 가득 차 신규 서브넷을 생성하지 못하는 경우
꼭 NACL을 사용해야 하는데 다음과 같은 문제가 발생한 경우 VPC를 추가적으로 생성하여 VPC Peering을 맺은 후 운영 환경에서 스테이징 환경으로 서비스를 넘긴 후 운영 환경을 다시 구성하여 운영 환경으로 서비스를 넘기는 방법이 있습니다.
하지만 이 방법 역시 쉽지 않고 신규 구성 시 많은 시간이 소요됩니다.
(2) CDN 서비스를 이용한 WhiteList 적용하기
다음은 외부망과 로드밸런서 사이에 CDN을 구성하는 방법입니다.
이 경우 CDN의 기능 중 WhiteList (WhiteList에 적용된 IP만 접근) 기능을 통해 특정 IP를 제어할 수 있습니다. 각각 도메인 별로 CDN Edge를 구성하여 연결한 후 Bypass로 구성해 주시면 NACL을 사용하지 않더라도 접근 제어가 가능합니다. 이 경우 CDN과 네트워크 트래픽에 대한 이중 과금이 발생하는 점은 참고해야 합니다.
*네이버 클라우드에서 로드밸런서에 대한 접근 제어로 가이드하는 Best Practice는 처음 아키텍처를 설계할 때 IP 대역을 넓게 잡고 로드밸런서의 용도 별로 서브넷을 만드는 것입니다.
(3) Public Subnet으로 서버를 이동한 후 공인 IP 할당
다음은 접근 제어가 필요한 서버를 퍼블릭 서브넷으로 이동한 후 공인 IP를 할당하는 방법입니다. 이 경우 ACG를 이용해서 특정 IP로 서버에 대한 직접 접근이 가능하지만 보안상 취약하고 ISMS 등 인증 심사 등에서 문제가 발생하기 때문에 개발 환경에서 테스트 정도로만 사용이 가능한 방법입니다.
(4) VPN과 라우팅 설정을 통한 접근 제어
다음은 VPN을 통한 접근 제어입니다. OpenVPN, IPSecVPN, SSL VPN 등 VPN 터널에 해당 서버에 접근 가능한 정책(Remote IP)과 라우팅을 설정하여 접근 제어하는 방법입니다.
이 방법은 터널을 이용한 사설망 통신으로 위 방법보다 보안상 안전한 연결이 가능하고 로드밸런서를 통해 접근하지 않고 서버에 직접 접근할 수 있습니다. 서버에서는 ACG 통해 접근 제어할 수 있습니다. LB 없이 서버로 직접 접속하는 방법이기 때문에 사용에 주의가 필요합니다.
찾아보면 DX를 이용한 방법, 접근 제어 솔루션을 이용한 방법, 3rd Party를 이용한 방법 등 특정 IP에 대한 접근을 제어하는 방법은 많을 수 있습니다. 결국 중요한 것은 내 환경에서는 어떤 방법이 가장 효율적인지 찾아내는 것이라고 생각합니다.
이 내용을 참고하여 아키텍처를 구성할 때 많은 요소를 고려하여 최적의 아키텍처를 구축하면 좋을 것 같습니다.
빠른 시일 내에 로드밸런서에 ACG 등의 접근 제어가 가능하게 신규 기능이 추가되면 편리해질 것 같습니다.
이번 시간에는 Private Subnet에 특정 IP만 접근 제어할 수 있는 방법을 알아봤습니다.
감사합니다
'Cloud > Naver Cloud' 카테고리의 다른 글
[NCLOUD] Cloud Functions과 Slack을 이용한 나만의 비용 관리 봇 생성하기 (0) | 2024.09.30 |
---|---|
[NCLOUD] 리전 간 지리적 레이턴시 문제를 해결하기 위한 아이디어 (2) | 2024.09.30 |
[Ncloud] CASE로 알아보는 서버 이미지로 복구 시 주의사항을 알아보기 (0) | 2024.08.23 |
[Ncloud] HyperCLOVA X 스킬트레이너 사용 가이드 활용 예제 실습하기 (0) | 2024.08.08 |
[Ncloud] HyperCLOVA X 스킬트레이너에 대해 알아보고 사용 가이드 정리 (0) | 2024.08.08 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!