Compute Engine에서 Public NAT 사용
이 페이지에서는 Compute Engine VM 인스턴스에 네트워크 주소 변환 서비스를 제공하는 Public NAT 게이트웨이의 데모를 보여줍니다. 시작하기 전에 Public NAT 개요를 읽어보세요.
기본 요건
Public NAT를 설정하기 전에 다음을 수행해야 합니다.
IAM 권한 가져오기
roles/compute.networkAdmin 역할은 Cloud Router에서 NAT 게이트웨이를 만들고, NAT IP 주소를 예약 및 할당하고, 트래픽이 NAT 게이트웨이의 네트워크 주소 변환을 사용해야 하는 서브네트워크(서브넷)를 지정할 수 있는 권한을 부여합니다.
Google Cloud 설정
시작하기 전에 Google Cloud에서 다음 항목을 설정합니다.
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
예
다음은 샘플 Public NAT 게이트웨이 및 Public NAT 게이트웨이를 사용하는 샘플 Compute Engine VM을 보여주는 포괄적인 예시입니다.
1단계: VPC 네트워크 및 서브넷 만들기
네트워크와 서브넷이 이미 있으면 이 단계를 건너뛸 수 있습니다.
Console
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
custom-network1
의 이름을 입력합니다.서브넷에서 서브넷 생성 모드를 커스텀으로 설정합니다.
새 서브넷에
subnet-us-east-192
의 이름을 입력합니다.리전에서 us-east4를 선택합니다.
IP 주소 범위를
192.168.1.0/24
로 입력합니다.완료를 클릭한 후 만들기를 클릭합니다.
gcloud
프로젝트에서 새 커스텀 모드 VPC 네트워크를 만듭니다.
gcloud compute networks create custom-network1 \ --subnet-mode custom
첫 번째 지역의 서브넷 프리픽스를 지정합니다. 이 예시에서는
192.168.1.0/24
를 리전us-east4
에 할당합니다.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
Terraform
Terraform 모듈을 사용하여 커스텀 Virtual Private Cloud(VPC) 네트워크 및 서브넷을 만들 수 있습니다.
2단계: 외부 IP 주소 없이 VM 인스턴스 만들기
Console
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
인스턴스에 대해 이름을
nat-test-1
로 지정합니다.리전을 us-east4로 설정합니다.
영역을 us-east4-c로 설정합니다.
관리, 보안, 디스크, 네트워킹, 단독 테넌시 링크를 클릭합니다.
네트워킹 탭을 클릭합니다.
네트워크 인터페이스에서 VM의 기본 인터페이스에 대해
수정을 클릭합니다.- 네트워크를
custom-network1
로 설정합니다. - 서브네트워크를
subnet-us-east-192
로 설정합니다. - 외부 IP를 None으로 설정합니다.
- 완료를 클릭합니다.
- 네트워크를
만들기를 클릭하여 인스턴스를 만들고 시작합니다.
gcloud
gcloud compute instances create nat-test-1 \ --image-family debian-9 \ --image-project debian-cloud \ --network custom-network1 \ --subnet subnet-us-east-192 \ --zone us-east4-c \ --no-address
Terraform
Terraform 리소스를 사용하여 VM 인스턴스를 만들 수 있습니다.
3단계: SSH 연결을 허용하는 방화벽 규칙 만들기
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭합니다.
allow-ssh
의 이름을 입력합니다.네트워크를
custom-network1
로 지정합니다.트래픽 방향을 인그레스로 설정합니다.
일치 시 작업을 허용으로 설정합니다.
대상을 네트워크의 모든 인스턴스로 설정합니다.
소스 필터를 IPv4 범위로 설정합니다.
소스 IP 범위를
35.235.240.0/20
으로 설정합니다.프로토콜 및 포트를 지정된 프로토콜 및 포트로 설정합니다.
tcp 체크박스를 선택하고 포트
22
를 입력합니다.만들기를 클릭합니다.
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Terraform 리소스를 사용하여 방화벽 규칙을 만들 수 있습니다.
4단계: 테스트 인스턴스에 대한 IAP SSH 권한 만들기
이후 단계에서 IAP(Identity-Aware Proxy)를 사용하여 테스트 인스턴스에 연결합니다.
Console
Google Cloud 콘솔에서 IAP(Identity-Aware Proxy) 페이지로 이동합니다.
SSH 및 TCP 리소스 탭을 선택합니다.
리소스에 대한 구성원 권한을 업데이트하려면 모든 터널 리소스 > us-east4-c > nat-test-1 옆의 체크박스를 선택합니다.
오른쪽 창에서 구성원 추가를 클릭합니다.
사용자, 그룹, 서비스 계정에 리소스에 대한 액세스 권한을 부여하려면 새 구성원 필드에 해당 사용자의 이메일 주소를 지정합니다.
이 기능을 테스트만 할 경우 자신의 이메일 주소를 입력할 수 있습니다.
구성원에게 Cloud IAP의 TCP 전달 기능을 통해 리소스에 대한 액세스 권한을 부여하려면 역할 드롭다운 목록에서 Cloud IAP > IAP 보안 터널 사용자을 선택합니다.
'Save(저장)'를 클릭합니다.
gcloud
이 명령어는 IAP를 사용하여 프로젝트의 모든 VM 인스턴스에 SSH 액세스 권한을 부여합니다. IAP를 사용하여 개별 VM에 SSH 액세스 권한을 부여하려면 Google Cloud 콘솔 안내를 따르세요.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=MEMBER_INFO \ --role=roles/iap.tunnelResourceAccessor
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.MEMBER_INFO
: 구성원type:email
쌍을 쉼표로 구분한 목록입니다. 예:- 개별 사용자의 경우:
user:test-user@example.com
- 그룹의 경우:
group:admins@example.com
- 서비스 계정의 경우:
serviceAccount:test123@example.domain.com
- 개별 사용자의 경우:
Terraform
Terraform 리소스를 사용하여 테스트 인스턴스의 IAP SSH 권한을 만들 수 있습니다.
5단계: nat-test-1
에 로그인하고 인터넷에 연결할 수 없는지 확인
Console
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
nat-test-1
의 경우 연결 열에서 SSH 드롭다운 화살표를 클릭한 다음 브라우저 창에서 열기를 선택합니다.VM의 명령어 프롬프트에서
curl example.com
을 입력하고 Enter 키를 누릅니다.결과가 표시되지 않습니다. 결과가 표시되면 외부 IP 주소를 사용해서
nat-test-1
을 만들었거나 다른 문제가 있을 수 있습니다. 문제를 해결하려면 VM이 Cloud NAT 없이 예기치 않게 인터넷에 연결할 수 있음을 참조하세요.명령어를 종료하려면
Ctrl+C
를 입력해야 할 수 있습니다.
gcloud
로컬 호스트에 Compute Engine SSH 키를 추가합니다.
ssh-add ~/.ssh/google_compute_engine
nat-test-1
에 연결하고 명령어를 실행합니다.gcloud compute ssh nat-test-1 \ --zone us-east4-c \ --command "curl example.com" \ --tunnel-through-iap
결과가 표시되지 않습니다. 결과가 표시되면 외부 IP 주소를 사용해서
nat-test-1
을 만들었거나 다른 문제가 있을 수 있습니다. 문제를 해결하려면 VM이 Cloud NAT 없이 예기치 않게 인터넷에 연결할 수 있음을 참조하세요.명령어를 종료하려면
Ctrl+C
를 입력해야 할 수 있습니다.
6단계: Cloud Router를 사용하여 NAT 구성 만들기
Public NAT를 사용하는 인스턴스와 동일한 리전에 Cloud Router를 만들어야 합니다. Cloud Router는 VM에 NAT 정보를 배치하기 위해서만 사용됩니다. 실제 NAT 게이트웨이의 일부로는 사용되지 않습니다.
이 구성을 사용하면 리전 내 모든 인스턴스가 전체 기본 및 별칭 IP 범위에서 Public NAT를 사용할 수 있습니다. 또한 외부 IP 주소가 NAT 게이트웨이에 자동으로 할당됩니다. 더 많은 옵션은 Google Cloud CLI 문서를 참조하세요.
않습니다.Console
Google Cloud Console에서 Cloud NAT 페이지로 이동합니다.
시작하기 또는 NAT 게이트웨이 만들기를 클릭합니다.
게이트웨이 이름을
nat-config
로 입력합니다.VPC 네트워크를
custom-network1
로 설정합니다.리전을 us-east4로 설정합니다.
Cloud Router에서 새 라우터 만들기를 선택합니다.
nat-router
의 이름을 입력합니다.- 만들기를 클릭합니다.
만들기를 클릭합니다.
gcloud
Cloud Router를 만듭니다.
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
라우터에 구성을 추가합니다.
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Terraform
Terraform 리소스를 사용하여 Cloud Router를 만들 수 있습니다.
Terraform 모듈을 사용하여 NAT 구성을 만들 수 있습니다.
7단계: 인터넷에 다시 연결 시도
NAT 구성이 VM에 적용되는 데 최대 3분이 걸릴 수 있으므로 최소 1분 정도 기다린 후 인터넷에 액세스를 다시 시도합니다.
Console
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
nat-test-1
의 경우 연결 열에서 SSH 드롭다운 화살표를 클릭한 다음 브라우저 창에서 열기를 선택합니다.VM의 명령어 프롬프트에서
curl example.com
을 입력하고 Enter 키를 누릅니다.
gcloud
nat-test-1
에 연결하고 명령어를 실행합니다.
gcloud compute ssh nat-test-1 \ --zone us-east4-c \ --command "curl example.com" \ --tunnel-through-iap
다음 콘텐츠가 포함된 출력이 표시됩니다.
<html> <head> <title>Example Domain</title> ... ... ... </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You can use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
다음 단계
- Public NAT 게이트웨이 설정
- Google Kubernetes Engine(GKE) 설정 예시 만들기