요즘 클라우드 서비스를 이용하면 누구나 서비스를 배포할 수 있는 시대가 되었습니다.
하지만 세부 사항을 잘 알지 못한다면, 특히 네트워크 쪽을 신경쓰지 않는다면 다양한 위협에 노출될 수 있습니다.
특히 퍼블릭 클라우드(AWS, Azure, GCP 등등 공공에게 비용을 받아 제공하는 서비스)는 예상치 못한 Billing이 날라오기도 하고, 보안 위협도 있습니다. 단순히 테스트, 개발용임에도 불구하구요.
때문에 안전한 개발과 배포를 위하여 반.드.시. VPC 설정이 필수입니다. 그리고 이건 제가 지금 진행하는 GCP 뿐 아니라 AWS, Azure 등 모든 퍼블릭 클라우드도 비슷한 과정이기에 한 번 익혀놓으시면 비슷한 과정이니 이것을 참고하시면 됩니다.
GCP는 참고로 처음 가입하면 현재 300달러의 크레딧을 주니 부담갖지 말고 해보셔도 됩니다.
만약 크레딧 이용 기간이 끝났다고 해도 그냥 하셔도 요금이 거의 나오지 않을테니 걱정하지 마세요.
부담갖지 말고 한번 가보시죠!
GCP는 프로젝트 단위로 VPC 설정이 가능하기 때문에(물론 shared VPC로 조직 단위에서도 공유 가능) 저는 일단 프로젝트를 새로 만들어 진행하겠습니다.
1. 콘솔창에서 프로젝트 선택.

2. 프로젝트 만들기.

3. 프로젝트 이름 설정 후 만들기.

4. 이후, 만든 프로젝트에서 콘솔 검색창에서 vpc 입력 후 vpc 네트워크 선택

5-1. 데이터를 로드할 수 없다고 하고, 계속 등을 누르면 API 사용 권한이 나올 수 있는데, 이건 걱정하지 말고 "계속" 누르세요.

5-2. Compute Engine API 사용 누르기 (사용자 입장에서 가상의 컴퓨터(VM 인스턴스)를 사용할 수 있게 해주는 권한을 승인한 것이라고 보시면 됩니다.)

6. 다시 VPC 네트워크로 돌아가서 "VPC 네트워크 만들기" 클릭.

7. 이름, 설명 등을 작성한 이후 아래에 서브넷 생성 모드 "커스텀" 선택되어 있으면 서브넷을 아래와 같이 설정.

- 리전: 서브넷을 생성할 지역 (서울, 대한민국이 asia-northeast3입니다)
- IPv4: 보통 일반 컴퓨터에 할당해주는 IP 범위.
- IPv6: IoT 디바이스 등 다양한 기기에 할당해주는 IP 범위.
- IPv4 범위: CIDR 표기법으로 나타낸 주소 범위. 10.0.1.0/24이므로 이론상 10.0.1.0 ~ 10.0.1.255까지 총 256개의 인스턴스를 띄울 수 있지만 앞 뒤 각각 2개는 GCP 차원에서 예약한 IPv4 범위이므로 총 252개의 인스턴스 사용 가능.
참고: https://cloud.google.com/vpc/docs/subnets?hl=ko#manually_created_subnet_ip_ranges
서브넷 | VPC | Google Cloud
의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 서브넷 Virtual Private Cloud(VPC) 네트워크는 전역 리소스입니다. 각 VPC 네트워크는 서브넷이라는 하
cloud.google.com
8. 일단 방화벽 규칙 중 인그레스, allow-ssh (tcp:22)만 체크.

9. 이후 만들기.
10. "Cloud Router"를 검색한 후, Create Router로 생성.
11. 네트워크는 아까 생성한 vpc, 리전은 해당하는 서브넷 쪽 리전(asia-northeast3)으로 설정.
그 외는 건드릴 필요 없습니다.

12. 이후, "Cloud NAT"를 검색 후 다음과 같이 생성.
NAT 유형을 "공개"로 해야 합니다.
"네트워크"와 "리전"도 Cloud Router 때와 동일하게 설정해주시고, "Cloud Router"는 방금 만든 것으로 설정해주세요.
"네트워크 서비스 계층"은 "표준"으로 했습니다.

13. 생성 완료 후 "Cloud Router"에서 "Cloud NAT 게이트웨이"가 잘 연결되었는지 확인(잘 되었으면 자동 연동됩니다).

14. VPC에서 만든 vpc에 들어가서 "방화벽" -> "방화벽 규칙 추가"
규칙 추가 전에 확인해보면 처음 설정한 allow-ssh 말고도 allow-http, allow-https가 자동으로 설정된 것을 보실 수 있습니다.
인그레스는 사용자의 VPC로 들어오는 수신 방향에서의 방화벽을, 이그레스는 사용자의 VPC에서 외부 송신하는 방향에서의 방화벽을 말합니다.

때문에 인그레스는 모두 되어있으니 이그레스(송신)를 설정할 것이고, 송신은 모든 것이 가능하다고 설정할 것이기에 allow-all로 해줍니다.
"대상"은 "네트워크의 모든 인스턴스", "IPv4 범위는 0.0.0.0/0"으로 전체를 나타냅니다.
"소스(우리 내부에서 발신하는) 필터"는 일단 private subnet 범위인 "IPv4의 10.0.1.0/24"로 진행하여도 되고, 그냥 "없음"으로 진행해도 됩니다.
"프로토콜 및 포트"는 "모두 허용"으로 하고 이제 "만들기" 클릭.

14. compute engine에서 VM 인스턴스 만들기
"compute engine"을 검색한 후 클릭한 다음, "VM 인스턴스 만들기"를 눌러
"리전"은 "asia-northeast3", "영역"은 "a".
"머신 구성"에서 "e2-micro"로 설정하세요(프리티어이기도 하고, 가장 저렴합니다).

아래로 스크롤하다 "부팅 디스크"에서 "변경" 클릭 후, "버전"은 Ubuntu, 20.04 LTS, "크기"는 "20GB"로 설정하세요.

아래로 스크롤하다 "방화벽"에서 HTTP, HTTPS 트래픽을 허용하세요.

이제 저희가 만든 VPC를 연동할 때입니다.
"고급 옵션"에서 "네트워킹" 중 "네트워크 인터페이스를 default에서 "만들었던 것"으로 교체하세요.

그리고 반.드.시. "외부 IPv4 주소"를 "없음"으로 해주세요(직접 VM 인스턴스를 서버로 사용한다면 보안 사고의 위협이 매우 커집니다).

이후, "완료"를 누르고 "만들기"를 누르면 끝!
이제 생성이 완료되었으면 아래와 같이 "SSH 연결"을 눌러 Cloud Shell로 해당 VM 인스턴스와 연결하세요.

외부 주소가 없는 것도 확인할 수 있습니다.
이후 ping google.com을 하면 정상적으로 인터넷 연결이 되었다는 것을 알 수 있습니다.

끝!... 내기전에 방금 만든 VM 인스턴스를 잊지말고 삭제하세요.

그리고 만약 해당 프로젝트를 계속 사용하지 않는다면 "IAM" 검색한 후, "리소스 관리"에 들어가서 프로젝트 삭제까지 잊지마세요!


지금까지 안전하게 퍼블릭 클라우드를 사용하기 위한 첫 걸음인 VPC를 설정하는 방법을 알아봤습니다.
여기서 끝이 아니라, 당연히 금액적인 부분도 알아야합니다.
https://cloud.google.com/vpc/pricing?hl=ko
가격 책정 | Virtual Private Cloud | Google Cloud
VPC 가격 책정 검토
cloud.google.com
VPC 내부의 경우 같은 리전에서의 서비스 네트워크 비용은 몇가지 서비스를 제외하고는 무료입니다(구글 서비스의 경우 외부임에도 무료일 수 있습니다 ex. 유튜브).
단 아래 3가지는 비용이 발생합니다.
1. 외부에서 내부로 인바운드시에 Cloud NAT 같은 경우에는 비용이 부과됩니다.
2. 또한, 내부에서 외부로 아웃바운드 시에도 비용이 부과됩니다.
3. 마지막으로 VPC 내부 다른 리전 사이에서 네트워크 비용이 발생합니다.
자세한 것은 위에 가격 책정을 살펴보시면 됩니다.
다음에는 외부 IP가 없는데, 어떻게 실제 배포를 할 수 있는지 알아보겠습니다.
감사합니다
'Data Engineering > Cloud' 카테고리의 다른 글
| [세션발표] 티끌모아 GPU, GCP에서 GPU 모델 서빙하기(RetroFest 2024 후기) (2) | 2025.01.05 |
|---|---|
| [GCP] 티끌모아 GPU, 구글 클라우드에서의 GPU 모델 서빙기 (feat. BATCH) (0) | 2024.11.06 |
| [GCP] Cloud Functions: 서버리스 함수형 서비스 (1) (5) | 2024.08.14 |