1. 소개
네트워크 방화벽 정책
방화벽은 안전한 클라우드 환경의 기본 구성 요소입니다. 앞서 조직 및 폴더 수준에서 방화벽 정책을 도입한 반면 VPC 방화벽은 변경하지 않았습니다. 이번 버전에서는 방화벽 정책 구조를 VPC 수준까지 확장하고, 현재 방화벽 정책 지원을 몇 가지 개선하여 Google Cloud의 리소스 계층 구조 전반에 걸쳐 통합된 방화벽 지원을 제공하고, 방화벽 정책 제어를 안전하고 유연하며 확장 가능한 방식으로 관리하는 일관된 사용자 환경을 제공합니다.
네트워크 방화벽 정책은 방화벽 규칙의 컨테이너 역할을 합니다. 네트워크 방화벽 정책에 정의된 규칙은 정책이 VPC 네트워크와 연결될 때까지 어디에도 적용되지 않습니다. 각 VPC 네트워크에는 하나의 네트워크 방화벽 정책이 연결될 수 있습니다. 네트워크 방화벽 정책은 방화벽 규칙에서 IAM 관리 태그 (또는 태그만)를 지원합니다. 이 태그는 현재 네트워크 태그를 대체하며 워크로드에 ID를 제공하는 데 사용할 수 있습니다.
네트워크 간에 네트워크 방화벽 정책을 공유하고 IAM 관리 태그와 통합하면 방화벽의 구성과 관리가 크게 간소화됩니다.
네트워크 방화벽 정책이 도입됨에 따라 이제 Google Cloud의 방화벽 정책은 다음과 같은 구성요소로 구성됩니다.
- 계층식 방화벽 정책
- VPC 방화벽 규칙
- 네트워크 방화벽 정책 ( 전역 및 리전)
계층적 방화벽 정책은 리소스 계층 구조 내의 조직 및 폴더 노드에서 지원되지만 VPC 방화벽 규칙 및 네트워크 방화벽 정책은 VPC 수준에서 적용됩니다. VPC 방화벽 규칙과 네트워크 방화벽 정책의 큰 차이점은 VPC 방화벽 규칙은 단일 VPC 네트워크에만 적용할 수 있지만 네트워크 방화벽 정책은 단일 VPC 또는 VPC 그룹에 연결할 수 있다는 점도 있습니다. 특히 일괄 업데이트와 같은 이점이 있습니다.
마지막으로, 모든 VPC 네트워크에 적용되는 묵시적인 방화벽 규칙도 있습니다.
- 작업이 allow인 이그레스 규칙이며 대상은 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에서는 $variables를 사용하여 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 클라이언트 및 web-server 인스턴스를 만듭니다.
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
이 섹션의 시작 부분에 따라 IAP를 구성할 때 만들어야 하는 SSH 허용 규칙 외에는 정의된 VPC 방화벽 규칙이 없으며 기본적으로 모든 인그레스 트래픽이 거부되므로 클라이언트 인스턴스는 각 웹 서버에 액세스할 수 없습니다. 요청 시간이 초과되는지 확인하려면 새 창을 열고 fwpolicy-vpc1-client 인스턴스에 대한 SSH 세션을 시작한 다음 웹 서버의 curl을 시도합니다.
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 유효 방화벽s)와 유사합니다.
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 세션으로 다시 전환하고 curl을 다시 시도합니다. 아래 명령어는 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에 curl을 수행합니다.
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. 축하합니다.
수고하셨습니다. 태그 구성을 사용하여 전역 네트워크 방화벽 정책을 구성하고 검증했습니다.