1. 소개
네트워크 방화벽 정책
방화벽은 안전한 클라우드 환경을 위한 기본 구성요소입니다. 이전에는 VPC 방화벽을 변경하지 않고 조직 및 폴더 수준에서 방화벽 정책을 도입했습니다. 이 버전에서는 방화벽 정책 구조를 VPC 수준까지 확장하고 현재 방화벽 정책 지원을 여러 가지로 개선하여 Google Cloud의 리소스 계층 구조 전반에서 통합된 방화벽 지원을 제공하고 안전하고 유연하며 확장 가능한 방식으로 방화벽 정책 제어를 관리할 때 일관된 사용자 환경을 제공할 예정입니다.
네트워크 방화벽 정책은 방화벽 규칙의 컨테이너 역할을 합니다. 네트워크 방화벽 정책에 정의된 규칙은 정책이 VPC 네트워크와 연결될 때까지 어디에도 적용되지 않습니다. 각 VPC 네트워크에는 하나의 네트워크 방화벽 정책을 연결할 수 있습니다. 네트워크 방화벽 정책은 방화벽 규칙에서 IAM 제어 태그 (또는 태그)를 지원합니다. 이는 현재 네트워크 태그를 대체하며 워크로드에 ID를 제공하는 데 사용할 수 있습니다.
네트워크 간에 네트워크 방화벽 정책을 공유하고 IAM 적용 태그와 통합하면 방화벽의 구성 및 관리가 크게 간소화됩니다.
네트워크 방화벽 정책이 도입됨에 따라 이제 Google Cloud의 방화벽 정책은 다음 구성요소로 구성됩니다.
- 계층식 방화벽 정책
- VPC 방화벽 규칙
- 네트워크 방화벽 정책 ( 전역 및 리전)
계층식 방화벽 정책은 리소스 계층 구조 내의 조직 및 폴더 노드에서 지원되는 반면 VPC 방화벽 규칙과 네트워크 방화벽 정책은 VPC 수준에서 적용됩니다. VPC 방화벽 규칙과 네트워크 방화벽 정책의 큰 차이점은 VPC 방화벽 규칙은 단일 VPC 네트워크에만 적용할 수 있는 반면 네트워크 방화벽 정책은 일괄 업데이트와 같은 다른 이점과 함께 단일 VPC 또는 VPC 그룹에 연결할 수 있다는 것입니다.
마지막으로 모든 VPC 네트워크에 포함된 묵시적 방화벽 규칙도 있습니다.
- 작업이 허용이고 대상이 0.0.0.0/0인 이그레스 규칙
- 작업이 거부이고 소스가 0.0.0.0/0인 인그레스 규칙
기본적으로 시행 순서는 다음 다이어그램에 나와 있습니다.

VPC 방화벽 규칙과 전역 네트워크 방화벽 정책 간의 적용 순서는 바꿀 수 있습니다. 고객은 언제든지 gcloud 명령어를 사용하여 시행 순서를 지정할 수 있습니다.
태그
새로운 네트워크 방화벽 정책 규칙에 통합된 태그는 Google Cloud 리소스 계층 구조의 조직 수준에서 정의된 키-값 쌍 리소스입니다. 이러한 태그에는 이름에서 알 수 있듯이 태그에서 누가 어떤 작업을 할 수 있는지 지정하는 IAM 액세스 제어가 포함되어 있습니다. 예를 들어 IAM 권한을 사용하면 태그에 값을 할당할 수 있는 주 구성원과 리소스에 태그를 연결할 수 있는 주 구성원을 지정할 수 있습니다. 태그가 리소스에 적용되면 네트워크 방화벽 규칙에서 이를 사용하여 트래픽을 허용하거나 거부할 수 있습니다.
태그는 Google Cloud의 상속 리소스 모델을 따르므로 태그와 해당 값은 상위 요소에서 계층 구조를 통해 전달됩니다. 따라서 한 위치에서 태그를 만든 다음 리소스 계층 구조 전체에서 다른 폴더와 프로젝트에서 사용할 수 있습니다. 태그 및 액세스 제한에 대한 자세한 내용은 이 페이지를 참고하세요.
태그는 네트워크 태그와 혼동해서는 안 됩니다. 네트워크 태그는 Compute Engine 인스턴스에 추가할 수 있는 문자열로, 인스턴스와 연결되어 인스턴스가 폐기되면 사라집니다. VPC 방화벽 규칙에는 네트워크 태그가 포함될 수 있지만 클라우드 리소스로 간주되지 않으므로 IAM 액세스 제어가 적용되지 않습니다.
이 문서에서는 태그와 IAM 관리 태그가 같은 의미로 사용됩니다.
빌드할 항목
이 Codelab은 두 부분으로 구성되어 있습니다. 첫 번째 부분에서는 단일 VPC 네트워크를 사용하여 네트워크 방화벽 정책과 태그를 보여주고, 두 번째 부분에서는 아래 다이어그램에 따라 피어링된 VPC 네트워크에서 태그를 사용하는 방법을 보여줍니다. 따라서 이 Codelab에서는 단일 프로젝트와 여러 VPC 네트워크를 만들 수 있는 기능이 필요합니다.

학습할 내용
- 네트워크 방화벽 정책을 만드는 방법
- 네트워크 방화벽 정책으로 태그를 만들고 사용하는 방법
- VPC 네트워크 피어링을 통해 태그를 사용하는 방법
필요한 항목
- Google Cloud 프로젝트
- 인스턴스 배포 및 네트워킹 구성요소 구성에 관한 지식
- VPC 방화벽 구성에 관한 지식
2. 시작하기 전에
변수 만들기/업데이트
이 Codelab에서는 Cloud Shell에서 gcloud 구성 구현을 지원하기 위해 $변수를 사용합니다.
Cloud Shell 내에서 다음을 실행합니다.
gcloud config set project [project-id] export project_id=`gcloud config list --format="value(core.project)"` export org_id=[org] export region=us-central1 export zone=us-central1-a export prefix=fwpolicy
3. VPC 네트워크 및 서브넷 만들기
VPC 네트워크
fwpolicy-vpc1을 만듭니다.
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
서브넷
선택한 리전에 해당 서브넷을 만듭니다.
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
fwpolicy-pc1의 Cloud Router 및 Cloud NAT 게이트웨이를 만듭니다.
gcloud compute routers create $prefix-vpc1-cr \ --region=$region --network=$prefix-vpc1 gcloud compute routers nats create $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
4. 인스턴스 만들기
아직 IAP 설정의 일부로 정의되지 않은 경우 IAP 범위에서 인그레스 SSH 트래픽을 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc1 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
fwpolicy-vpc1 클라이언트 및 웹 서버 인스턴스를 만듭니다.
gcloud compute instances create $prefix-vpc1-www \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone \
--metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
gcloud compute instances create $prefix-vpc1-client \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone
VPC 방화벽 규칙이 정의되어 있지 않고 (이 섹션의 시작 부분에 따라 IAP를 구성할 때 생성되었어야 하는 SSH 허용 규칙 제외) 기본적으로 모든 인그레스 트래픽이 거부되므로 클라이언트 인스턴스가 해당 웹 서버에 액세스할 수 없습니다. 요청이 타임아웃되는지 확인하려면 새 창을 열고 fwpolicy-vpc1-client 인스턴스에 SSH 세션을 시작하고 웹 서버를 컬링해 보세요.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
예상 출력:
curl: (28) Connection timed out after 2001 milliseconds
선택적으로 Cloud Shell을 통해 fwpolicy-vpc1에 정의된 VPC 방화벽 규칙이 없는지 확인합니다.
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. 전역 네트워크 방화벽 정책
전역 네트워크 방화벽 정책을 만듭니다.
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
웹 트래픽을 허용하는 규칙을 추가합니다.
gcloud compute network-firewall-policies rules create 500 \
--action allow \
--description "allow-web" \
--layer4-configs tcp:80,tcp:443 \
--firewall-policy $prefix-example \
--src-ip-ranges 10.0.0.0/16 \
--global-firewall-policy --enable-logging
네트워크 방화벽 정책을 설명하고 규칙이 성공적으로 added되었는지 확인합니다.
gcloud compute network-firewall-policies describe \
$prefix-example --global
예상 출력 (출력의 시작 부분까지 위로 스크롤합니다. 암시적 규칙도 표시됨):
creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
priority: 500
ruleTupleCount: 5
...
네트워크 방화벽 정책을 fwpolicy-vpc1에 연결합니다.
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-example \
--network $prefix-vpc1 \
--name $prefix-vpc1-association \
--global-firewall-policy
fwpolicy-vpc1 네트워크에 성공적으로 적용되었는지 확인합니다.
gcloud compute networks get-effective-firewalls $prefix-vpc1
예상 출력 (우선 적용되는 계층식 방화벽 정책이 있는 경우 관련 규칙이 상단에 표시됨):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
fwpolicy-vpc1 웹 서버에도 성공적으로 적용되었는지 확인합니다.
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
예상 출력은 이전 명령어 (fwpolicy-vpc1 유효 방화벽)와 비슷합니다.
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
vpc1-client SSH 세션으로 다시 전환하고 다시 컬을 시도합니다 (아래 명령어는 fwpolicy이 접두사로 사용되었다고 가정합니다. 다른 이름을 사용한 경우 curl 명령어를 적절히 조정하세요).
user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2 Page on vpc1-www in network vpc1 zone us-central1-a
Cloud Shell에서 네트워크 방화벽 정책이 fwpolicy-vpc1에 적용되었는지 확인합니다.
gcloud compute network-firewall-policies describe \ $prefix-example --global
예상 출력 (출력의 시작 부분까지 위로 스크롤):
--- associations: - attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1 name: fwpolicy-vpc1-association ...
6. IAM 적용 태그
태그는 조직, 폴더 또는 프로젝트에 연결할 수 있는 키-값 쌍입니다. 자세한 내용은 태그 만들기 및 관리 및 필요한 권한을 참고하세요.
tagAdmin 역할을 사용하면 새 태그를 만들고, 기존 태그를 업데이트 및 삭제할 수 있습니다. 조직 관리자가 이 역할을 부여할 수 있습니다. Cloud Shell에서 IAM 정책을 업데이트하여 사용자에게 tagAdmin 역할을 추가합니다. 권한 참조 페이지를 사용하여 각 사전 정의된 역할에 포함된 권한을 확인하세요.
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
아래 명령어를 실행하여 resourcemanager.tagAdmin 역할이 있는 사용자를 확인합니다.
gcloud organizations get-iam-policy $org_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagAdmin
새 태그 키를 만듭니다.
gcloud resource-manager tags keys create tags-vpc1 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc1
예상 출력:
Waiting for TagKey [tags-vpc1] to be created...done. createTime: '2022-09-23T20:49:01.162228Z' etag: PwvmFuHO4wK1y6c5Ut2n5w== name: tagKeys/622132302133 namespacedName: ORGANIZATION_ID/tags-vpc1 parent: organizations/ORGANIZATION_ID purpose: GCE_FIREWALL purposeData: network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383 shortName: tags-vpc1 updateTime: '2022-09-23T20:49:03.873776Z'
새 태그 값 만들기:
gcloud resource-manager tags values create web-servers \ --parent=$org_id/tags-vpc1 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc1
태그 값이 성공적으로 생성되었는지 확인합니다.
gcloud resource-manager tags values list \ --parent=$org_id/tags-vpc1
예상 출력:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
Cloud Shell에서 기존 네트워크 방화벽 정책 규칙을 설명하여 태그가 사용되지 않는지 확인합니다.
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
예상 출력:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
priority: 500
ruleTupleCount: 5
Cloud Shell에서 vpc1-tags/web-clients 태그 키의 트래픽만 허용하도록 규칙을 업데이트하고 vpc1-tags/web-servers 태그 키가 있는 인스턴스에 규칙을 설치합니다.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-secure-tags $org_id/tags-vpc1/web-clients \
--target-secure-tags $org_id/tags-vpc1/web-servers \
--global-firewall-policy
Cloud Shell에서 기존 네트워크 방화벽 정책 규칙을 설명하여 태그가 성공적으로 적용되었고 EFFECTIVE로 보고되는지 확인합니다.
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
예상 출력:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
Cloud Shell에서 규칙이 vpc1에 적용되었는지 확인합니다.
gcloud compute networks get-effective-firewalls $prefix-vpc1
예상 출력:
network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
네트워크 방화벽 정책이 VPC 네트워크에 계속 연결되어 있지만 태그가 인스턴스에 추가되지 않았으므로 웹 트래픽을 허용하는 규칙이 웹 서버에 더 이상 적용되지 않는지 확인합니다.
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
예상 출력 (우선순위가 500인 방화벽 규칙은 표시되지 않음):
network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
특정 태그 및 사용자에게 태그 사용자 역할 부여 권한 참조 페이지를 사용하여 각 사전 정의된 역할에 포함된 권한을 확인하세요.
gcloud resource-manager tags keys add-iam-policy-binding \ $org_id/tags-vpc1 \ --member user:[email] --role roles/resourcemanager.tagUser gcloud projects add-iam-policy-binding $project_id \ --member user:[email] --role roles/resourcemanager.tagUser
역할이 성공적으로 추가되었는지 확인합니다.
gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1 gcloud projects get-iam-policy $project_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagUser
예상 출력:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
fwpolicy-vpc1-www 인스턴스에 태그를 적용합니다.
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-servers \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
예상 출력:
Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34 9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done. done: true metadata: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata name: operations/rctb.us-central1-a.6144808968019372877 response: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683 parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502 tagValue: tagValues/349564376683
바인딩을 확인합니다.
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
예상 출력:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
유효 방화벽 규칙을 다시 확인합니다.
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
예상 출력:
network-firewall-policy fwpolicy-example 490 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
fwpolicy-vpc1-client SSH 세션 탭으로 다시 전환하고 curl을 시도합니다.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
연결할 수 있었나요?
이를 확인하려면 Cloud Shell을 통해 소스 CIDR 기준을 삭제하도록 규칙을 업데이트하세요.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-ip-ranges "" \
--global-firewall-policy
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
fwpolicy-vpc1-client SSH 세션 탭으로 다시 전환하고 다시 시도합니다.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
이번에는 fwpolicy-vpc1-client에 태그가 추가되지 않았으므로 연결이 타임아웃되어야 합니다. Cloud Shell에서 추가하고 다시 시도하세요.
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client
fwpolicy-vpc1-client SSH 세션 탭으로 다시 전환하고 다시 시도하면 이제 성공할 것입니다.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. VPC 네트워크 피어링을 통한 IAM 적용 태그
Cloud Shell에서 새 VPC, 서브넷, 클라이언트를 만들고 네트워크 간에 VPC 네트워크 피어링을 설정합니다.
gcloud compute networks create $prefix-vpc2 --subnet-mode=custom
gcloud compute networks subnets create $prefix-vpc2-subnet \
--range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region
gcloud compute instances create $prefix-vpc2-client \
--subnet=$prefix-vpc2-subnet --no-address --zone $zone
gcloud compute networks peerings create vpc1-to-vpc2 \
--network=$prefix-vpc1 \
--peer-project $project_id \
--peer-network $prefix-vpc2
gcloud compute networks peerings create vpc2-to-vpc1 \
--network=$prefix-vpc2 \
--peer-project $project_id \
--peer-network $prefix-vpc1
아직 IAP 설정의 일부로 정의되지 않은 경우 IAP 범위에서 인그레스 SSH 트래픽을 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc2 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
태그는 조직 전체 객체이지만 태그 키는 특정 VPC에 연결되어 있으므로 서로 다른 네트워크의 인스턴스에는 적용할 수 없습니다. 따라서 vpc2에 적용할 수 있는 새 태그 키와 값을 만들어야 합니다.
gcloud resource-manager tags keys create tags-vpc2 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc2 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc2
fwpolicy-vpc2-client 인스턴스에 새 태그를 적용합니다.
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc2/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
원하는 경우 fwpolicy-vpc2-client의 바인딩을 나열합니다.
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
예상 출력:
namespacedTagKey: ORGANIZATION_ID/tags-vpc2 namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients tagKey: tagKeys/916316350251 tagValue: tagValues/633150043992
Cloud Shell에서 기존 네트워크 방화벽 정책 규칙을 설명하여 새 태그가 사용되지 않는지 확인합니다.
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
예상 출력:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
피어링된 VPC 네트워크의 태그를 허용하도록 기존 방화벽 규칙을 업데이트합니다.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
--global-firewall-policy
방화벽 규칙을 설명하여 규칙이 성공적으로 적용되었으며 EFFECTIVE로 보고되는지 확인합니다.
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
예상 출력:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
- name: tagValues/633150043992
state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
아래 gcloud 명령어를 통해 fwpolicy-vpc1-www의 IP를 확인합니다.
gcloud compute instances list --filter=vpc1-www
SSH를 통해 fwpolicy-vpc2-client에 연결하고 fwpolicy-vpc1의 IP를 컬하려고 시도합니다.
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
fwpolicy-vpc1-www 서버에 연결할 수 있어야 합니다. 다음 섹션으로 이동하여 정리 단계를 확인하세요.
8. 정리 단계
Cloud Shell에서 인스턴스, Cloud NAT, Cloud Router를 삭제합니다.
gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region gcloud -q compute routers delete $prefix-vpc1-cr --region=$region
전역 네트워크 방화벽 정책 및 태그를 삭제합니다.
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc2/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc2
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-servers
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc1
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy $prefix-example \
--name $prefix-vpc1-association \
--global-firewall-policy
gcloud -q compute network-firewall-policies delete \
$prefix-example --global
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2
tagAdmin 및 tagUsers 역할이 변경된 경우 다음 단계를 따르세요.
gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagUser
마지막으로 VPC 네트워크 피어링, 서브넷, VPC 네트워크를 삭제합니다.
gcloud -q compute networks peerings delete vpc1-to-vpc2 \
--network $prefix-vpc1
gcloud -q compute networks peerings delete vpc2-to-vpc1 \
--network $prefix-vpc2
gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
--region $region
gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
--region $region
gcloud -q compute networks delete $prefix-vpc1
gcloud -q compute networks delete $prefix-vpc2
9. 축하합니다.
수고하셨습니다. 태그 구성으로 전역 네트워크 방화벽 정책을 구성하고 검증했습니다.