1. Giới thiệu
Chính sách tường lửa mạng
Tường lửa là thành phần cơ bản để tạo môi trường đám mây an toàn. Trước đây, chúng tôi đã giới thiệu chính sách tường lửa ở cấp tổ chức và thư mục, đồng thời giữ nguyên tường lửa VPC. Trong phiên bản này, chúng tôi sẽ mở rộng cấu trúc chính sách tường lửa xuống cấp VPC và bổ sung một số điểm cải tiến cho tính năng hỗ trợ chính sách tường lửa hiện tại để cung cấp tính năng hỗ trợ tường lửa thống nhất trên toàn bộ hệ thống phân cấp tài nguyên của Google Cloud và trải nghiệm người dùng nhất quán trong việc quản lý quyền kiểm soát chính sách tường lửa theo cách an toàn, linh hoạt và có khả năng mở rộng.
Chính sách tường lửa mạng hoạt động như một bộ chứa cho các quy tắc tường lửa. Các quy tắc được xác định trong chính sách tường lửa mạng sẽ không được thực thi ở bất kỳ đâu cho đến khi chính sách đó được liên kết với một mạng VPC. Mỗi mạng VPC có thể được liên kết với một chính sách tường lửa mạng. Chính sách tường lửa mạng hỗ trợ Thẻ được quản lý bằng IAM (hoặc chỉ Thẻ) trong các quy tắc tường lửa. Các thẻ này thay thế thẻ mạng hiện tại và có thể dùng để cung cấp danh tính cho khối lượng công việc.
Việc chia sẻ chính sách tường lửa mạng trên các mạng và tích hợp với Thẻ được quản lý bằng IAM giúp đơn giản hoá đáng kể việc định cấu hình và quản lý tường lửa.
Với việc giới thiệu chính sách tường lửa mạng, chính sách tường lửa của Google Cloud hiện bao gồm các thành phần sau:
- Chính sách tường lửa phân cấp
- Quy tắc tường lửa VPC
- Chính sách tường lửa mạng ( Toàn cầu và Khu vực)
Chính sách tường lửa phân cấp được hỗ trợ ở các nút tổ chức và thư mục trong hệ thống phân cấp tài nguyên, trong khi các quy tắc tường lửa VPC và chính sách tường lửa mạng được áp dụng ở cấp VPC. Điểm khác biệt lớn giữa quy tắc tường lửa VPC và chính sách tường lửa mạng là quy tắc tường lửa VPC chỉ có thể áp dụng cho một mạng VPC, trong khi chính sách tường lửa mạng có thể được gắn vào một VPC hoặc nhóm VPC, cùng với các lợi ích khác như cập nhật theo lô.
Cuối cùng, chúng ta cũng có các quy tắc tường lửa ngầm định đi kèm với mọi mạng VPC:
- Một quy tắc gửi có hành động là cho phép, đích đến là 0.0.0.0/0
- Một quy tắc nhận có hành động là từ chối, nguồn là 0.0.0.0/0
Theo mặc định, trình tự thực thi được hiển thị trong sơ đồ sau:

Xin lưu ý rằng bạn có thể hoán đổi thứ tự thực thi giữa quy tắc tường lửa VPC và chính sách tường lửa mạng toàn cầu. Khách hàng có thể chỉ định thứ tự thực thi bất cứ lúc nào bằng lệnh gcloud.
Thẻ (từ khoá)
Thẻ mới được tích hợp trong các quy tắc chính sách tường lửa mạng là tài nguyên cặp khoá-giá trị được xác định ở cấp tổ chức của hệ thống phân cấp tài nguyên Google Cloud. Thẻ như vậy chứa quyền kiểm soát quyền truy cập IAM, như tên cho thấy, quyền này chỉ định người có thể làm gì trên thẻ. Ví dụ: quyền IAM cho phép một người chỉ định những thực thể chính nào có thể gán giá trị cho thẻ và những thực thể chính nào có thể gắn thẻ vào tài nguyên. Sau khi Thẻ được áp dụng cho một tài nguyên, các quy tắc tường lửa mạng có thể sử dụng thẻ đó để cho phép và từ chối lưu lượng truy cập.
Thẻ tuân thủ mô hình tài nguyên kế thừa của Google Cloud, nghĩa là thẻ và giá trị của thẻ được truyền xuống trên toàn bộ hệ thống phân cấp từ phần tử mẹ. Do đó, thẻ có thể được tạo ở một nơi rồi được các thư mục và dự án khác sử dụng trong toàn bộ hệ thống phân cấp tài nguyên. Hãy truy cập vào trang này để biết thêm thông tin chi tiết về thẻ và hạn chế quyền truy cập.
Bạn không nên nhầm lẫn thẻ với thẻ mạng. Thẻ mạng là các chuỗi có thể được thêm vào các thực thể Compute Engine. Các thẻ này được liên kết với thực thể và biến mất khi thực thể ngừng hoạt động. Quy tắc tường lửa VPC có thể bao gồm thẻ mạng, nhưng vì không được coi là tài nguyên đám mây nên không chịu sự kiểm soát quyền truy cập IAM.
Xin lưu ý rằng Thẻ và Thẻ được quản lý bằng IAM đang được sử dụng thay thế cho nhau trong tài liệu này.
Sản phẩm bạn sẽ tạo ra
Lớp học lập trình này có 2 phần – phần đầu tiên minh hoạ chính sách tường lửa mạng và Thẻ bằng một mạng VPC, còn phần thứ hai sẽ cho biết cách sử dụng Thẻ trên các mạng VPC kết nối ngang hàng theo sơ đồ bên dưới. Do đó, lớp học lập trình này yêu cầu một dự án và khả năng tạo nhiều mạng VPC.

Kiến thức bạn sẽ học được
- Cách tạo chính sách tường lửa mạng
- Cách tạo và sử dụng Thẻ với chính sách tường lửa mạng
- Cách sử dụng Thẻ qua Kết nối ngang hàng mạng VPC
Bạn cần có
- Dự án Google Cloud
- Kiến thức về cách triển khai thực thể và định cấu hình các thành phần mạng
- Kiến thức về cách định cấu hình tường lửa VPC
2. Trước khi bắt đầu
Tạo/cập nhật biến
Lớp học lập trình này sử dụng $variables để hỗ trợ việc triển khai cấu hình gcloud trong Cloud Shell.
Trong Cloud Shell, hãy thực hiện như sau:
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. Tạo mạng và mạng con VPC
Mạng VPC
Tạo fwpolicy-vpc1:
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
Mạng con
Tạo các mạng con tương ứng trong khu vực đã chọn:
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
Tạo Cloud Router và cổng Cloud NAT cho fwpolicy-pc1:
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. Tạo thực thể
Tạo quy tắc tường lửa cho phép lưu lượng truy cập SSH nhận từ dải IAP trong trường hợp bạn chưa xác định quy tắc này như một phần của quá trình thiết lập IAP:
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
Tạo thực thể máy chủ web và ứng dụng 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
Vì không có quy tắc tường lửa VPC nào được xác định (ngoài quy tắc cho phép SSH phải được tạo khi định cấu hình IAP theo phần đầu của phần này) và theo mặc định, tất cả lưu lượng truy cập nhận đều bị từ chối, nên các thực thể ứng dụng sẽ không thể truy cập vào các máy chủ web tương ứng. Để xác minh rằng yêu cầu sẽ hết thời gian chờ, hãy mở một cửa sổ mới và bắt đầu phiên SSH đến thực thể fwpolicy-vpc1-client rồi thử curl máy chủ web:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Kết quả đầu ra dự kiến:
curl: (28) Connection timed out after 2001 milliseconds
Bạn có thể xác minh rằng không có quy tắc tường lửa VPC nào được xác định cho fwpolicy-vpc1 thông qua Cloud Shell:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. Chính sách tường lửa mạng toàn cầu
Tạo chính sách tường lửa mạng toàn cầu:
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
Thêm quy tắc cho phép lưu lượng truy cập web:
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
Mô tả chính sách tường lửa mạng và xác minh rằng quy tắc đã được added thành công:
gcloud compute network-firewall-policies describe \
$prefix-example --global
Kết quả đầu ra dự kiến (cuộn lên đầu kết quả đầu ra; lưu ý rằng các quy tắc ngầm định cũng được hiển thị):
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
...
Liên kết chính sách tường lửa mạng với fwpolicy-vpc1:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-example \
--network $prefix-vpc1 \
--name $prefix-vpc1-association \
--global-firewall-policy
Xác thực rằng chính sách này đã được áp dụng thành công cho mạng fwpolicy-vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Kết quả đầu ra dự kiến (lưu ý rằng nếu có các chính sách tường lửa phân cấp được ưu tiên, thì các quy tắc liên quan sẽ được hiển thị ở trên cùng):
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
Xác thực rằng chính sách này cũng đã được áp dụng thành công cho máy chủ web fwpolicy-vpc1:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Kết quả đầu ra dự kiến tương tự như lệnh trước đó (tường lửa hiệu quả 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
Chuyển lại phiên SSH vpc1-client và thử curl lại (lưu ý rằng lệnh bên dưới giả định rằng fwpolicy được dùng làm tiền tố; vui lòng điều chỉnh lệnh curl cho phù hợp nếu bạn dùng tên khác):
user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2 Page on vpc1-www in network vpc1 zone us-central1-a
Từ Cloud Shell, hãy xác thực rằng chính sách tường lửa mạng được áp dụng cho fwpolicy-vpc1:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Kết quả đầu ra dự kiến (di chuyển lên đầu kết quả đầu ra):
--- associations: - attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1 name: fwpolicy-vpc1-association ...
6. Thẻ được quản lý bằng IAM
Thẻ là cặp khoá-giá trị có thể gắn với một tổ chức, thư mục hoặc dự án. Xem bài viết Tạo và quản lý thẻ và các quyền bắt buộc để biết thêm thông tin chi tiết.
Vai trò tagAdmin cho phép bạn tạo thẻ mới, cập nhật và xoá thẻ hiện có. Quản trị viên tổ chức có thể cấp vai trò này. Từ Cloud Shell, hãy cập nhật Chính sách IAM để thêm vai trò tagAdmin vào người dùng của bạn. Sử dụng trang tham khảo về quyền để xem những quyền nào được đưa vào từng vai trò được xác định trước.
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
Chạy lệnh bên dưới để xác minh những người dùng có vai trò resourcemanager.tagAdmin:
gcloud organizations get-iam-policy $org_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagAdmin
Tạo Khoá thẻ mới:
gcloud resource-manager tags keys create tags-vpc1 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc1
Kết quả đầu ra dự kiến:
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'
Tạo giá trị thẻ mới:
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
Xác thực rằng các giá trị thẻ đã được tạo thành công:
gcloud resource-manager tags values list \ --parent=$org_id/tags-vpc1
Kết quả đầu ra dự kiến:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
Từ Cloud Shell, hãy mô tả quy tắc chính sách tường lửa mạng hiện có để xác nhận rằng thẻ không được sử dụng:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Kết quả đầu ra dự kiến:
---
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
Từ Cloud Shell, hãy cập nhật quy tắc để chỉ cho phép lưu lượng truy cập từ khoá thẻ vpc1-tags/web-clients và cài đặt quy tắc trên các thực thể có khoá thẻ 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
Từ Cloud Shell, hãy mô tả quy tắc chính sách tường lửa mạng hiện có để xác nhận rằng thẻ đã được áp dụng thành công và được báo cáo là EFFECTIVE:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Kết quả đầu ra dự kiến:
---
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
Từ Cloud Shell, hãy xác minh rằng quy tắc đã được áp dụng cho vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Kết quả đầu ra dự kiến:
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
Xác minh rằng mặc dù chính sách tường lửa mạng vẫn được liên kết với mạng VPC, nhưng quy tắc cho phép lưu lượng truy cập web không còn được áp dụng cho máy chủ web nữa, vì Thẻ không được thêm vào các thực thể:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Kết quả đầu ra dự kiến (lưu ý rằng quy tắc tường lửa có mức độ ưu tiên 500 không được hiển thị):
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
Cấp vai trò Người dùng thẻ cho thẻ và người dùng cụ thể. Sử dụng trang tham khảo về quyền để xem những quyền nào được đưa vào từng vai trò được xác định trước.
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
Xác minh rằng vai trò đã được thêm thành công:
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
Kết quả đầu ra dự kiến:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
Áp dụng thẻ cho thực thể 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
Kết quả đầu ra dự kiến:
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
Xác minh các liên kết:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
Kết quả đầu ra dự kiến:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
Xác minh lại các quy tắc tường lửa hiệu quả:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Kết quả đầu ra dự kiến:
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
Chuyển lại thẻ phiên SSH fwpolicy-vpc1-client và thử curl:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Bạn có kết nối được không?
Để xác minh điều đó, hãy cập nhật quy tắc để xoá tiêu chí CIDR nguồn thông qua Cloud Shell.
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
Chuyển lại thẻ phiên SSH fwpolicy-vpc1-client rồi thử lại:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Lần này, kết nối sẽ hết thời gian chờ vì thẻ không được thêm vào fwpolicy-vpc1-client. Từ Cloud Shell, hãy thêm thẻ đó rồi thử lại.
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
Chuyển lại thẻ phiên SSH fwpolicy-vpc1-client rồi thử lại. Lần này, thao tác sẽ thành công.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. Thẻ được quản lý bằng IAM qua Kết nối ngang hàng mạng VPC
Từ Cloud Shell, hãy tạo VPC, mạng con và ứng dụng mới, đồng thời thiết lập Kết nối ngang hàng mạng VPC giữa các mạng:
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
Tạo quy tắc tường lửa cho phép lưu lượng truy cập SSH nhận từ dải IAP trong trường hợp bạn chưa xác định quy tắc này như một phần của quá trình thiết lập IAP:
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
Mặc dù Thẻ là đối tượng trên toàn tổ chức, nhưng khoá thẻ được liên kết với một VPC cụ thể và do đó không thể áp dụng cho các thực thể trong các mạng khác nhau. Do đó, bạn phải tạo khoá và giá trị thẻ mới áp dụng cho 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
Áp dụng thẻ mới cho thực thể 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
Bạn có thể liệt kê các liên kết của 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
Kết quả đầu ra dự kiến:
namespacedTagKey: ORGANIZATION_ID/tags-vpc2 namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients tagKey: tagKeys/916316350251 tagValue: tagValues/633150043992
Từ Cloud Shell, hãy mô tả quy tắc chính sách tường lửa mạng hiện có để xác nhận rằng thẻ mới không được sử dụng:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Kết quả đầu ra dự kiến:
---
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
Cập nhật quy tắc tường lửa hiện có để cho phép các thẻ từ mạng VPC kết nối ngang hàng:
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
Mô tả quy tắc tường lửa để đảm bảo quy tắc đó đã được áp dụng thành công và được báo cáo là EFFECTIVE:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Kết quả đầu ra dự kiến:
---
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
Tìm IP của fwpolicy-vpc1-www thông qua lệnh gcloud bên dưới:
gcloud compute instances list --filter=vpc1-www
Kết nối với fwpolicy-vpc2-client thông qua SSH và thử curl IP của fwpolicy-vpc1:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
Bạn sẽ có thể kết nối với máy chủ fwpolicy-vpc1-www. Chuyển sang phần tiếp theo để biết các bước dọn dẹp.
8. Các bước dọn dẹp
Từ Cloud Shell, hãy xoá các thực thể, Cloud NAT và 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
Xoá chính sách tường lửa mạng toàn cầu và Thẻ:
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
Thực hiện các bước bên dưới nếu vai trò tagAdmin và tagUsers bị thay đổi:
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
Cuối cùng, hãy xoá Kết nối ngang hàng mạng VPC, mạng con và mạng 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. Xin chúc mừng!
Xin chúc mừng! Bạn đã định cấu hình và xác thực thành công chính sách tường lửa mạng toàn cầu với cấu hình Thẻ.