Chính sách tường lửa mạng toàn cầu với Thẻ

1. Giới thiệu

Chính sách về tường lửa mạng

Tường lửa là các khối xây dựng cơ bản cho một môi trường đám mây an toàn. Trước đây, chúng tôi đã ra mắt chính sách về tường lửa ở cấp tổ chức và thư mục, đồng thời giữ nguyên tường lửa củ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 đến cấp VPC và thực hiện một số điểm cải tiến đối với dịch vụ hỗ trợ chính sách tường lửa hiện tại để cung cấp một dịch vụ hỗ trợ tường lửa hợp nhất trên toàn bộ hệ thống phân cấp tài nguyên của Google Cloud và mang đến trải nghiệm nhất quán cho người dùng trong việc quản lý hoạt động kiểm soát chính sách tường lửa một cách bảo mật, linh hoạt và có thể mở rộng.

Chính sách tường lửa mạng hoạt động như một vùng 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 không được thực thi ở bất cứ đâu cho đến khi chính sách này đượ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ẻ do IAM quản lý (hoặc chỉ Thẻ) trong các quy tắc về tường lửa. Các quy tắc này thay thế các 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 giữa các mạng và việc tích hợp với Thẻ do IAM quản lý giúp đơn giản hoá đáng kể việc định cấu hình và quản lý tường lửa.

Cùng với sự ra mắt của chính sách về tường lửa mạng, các chính sách về tường lửa của Google Cloud giờ đây bao gồm các thành phần sau:

  1. Chính sách về tường lửa phân cấp
  2. Quy tắc về tường lửa của VPC
  3. Chính sách về tường lửa mạng ( Toàn cầuKhu vực)

Chính sách tường lửa phân cấp được hỗ trợ tại các nút tổ chức và nút thư mục trong hệ thống phân cấp tài nguyên, trong khi các quy tắc về tường lửa của VPC và chính sách về tường lửa mạng được áp dụng ở cấp VPC. Một điểm khác biệt lớn giữa các quy tắc về tường lửa của VPC và chính sách về tường lửa của VPC là các quy tắc về tường lửa của VPC chỉ có thể được áp dụng cho một mạng VPC, trong khi các chính sách về tường lửa mạng có thể được gắn vào một VPC hoặc một nhóm VPC, bên cạnh những lợi ích khác như việc cập nhật theo lô.

Cuối cùng, chúng tôi cũng có các quy tắc ngụ ý về tường lửa đi kèm với mọi mạng VPC:

  • Một quy tắc đầu ra có tác vụ là allow, đích đến là 0.0.0.0/0
  • Một quy tắc nhập vào có hành động bị từ chối, nguồn là 0.0.0.0/0

Theo mặc định, trình tự thực thi được thể hiện trong sơ đồ sau đây:

abae4597af782b2b.png

Xin lưu ý rằng thứ tự thực thi giữa các quy tắc về tường lửa của VPC và chính sách về tường lửa mạng toàn cầu có thể được hoán đổi. Khách hàng có thể chỉ định lệnh thực thi bất cứ lúc nào bằng lệnh gcloud.

Thẻ từ khóa

Thẻ được tích hợp trong quy tắc chính sách về tường lửa mạng mới là các tài nguyên cặp khoá-giá trị được xác định ở cấp tổ chức trong hệ thống phân cấp tài nguyên của Google Cloud. Như chính tên gọi, một Thẻ như vậy chứa chức năng kiểm soát quyền truy cập IAM để xác định ai có thể làm gì trên thẻ. Ví dụ: quyền IAM cho phép chỉ định những thành phần chính có thể gán giá trị cho các thẻ và thành phần chính nào có thể đính kèm thẻ vào tài nguyên. Sau khi áp dụng Thẻ cho một tài nguyên, các quy tắc tường lửa mạng có thể 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, tức là thẻ và giá trị của thẻ được chuyển từ thành phần mẹ sang hệ phân cấp. Do đó, các thẻ có thể được tạo ở một nơi, sau đó đượ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à quy định hạn chế về quyền truy cập.

Không nên nhầm lẫn thẻ với thẻ mạng, thẻ sau là các chuỗi có thể thêm vào các phiên bản Compute Engine; chúng được liên kết với thực thể đó và biến mất khi thực thể đó ngừng hoạt động. Các quy tắc tường lửa của VPC có thể bao gồm thẻ mạng, nhưng vì không được xem là tài nguyên đám mây nên không phải tuân theo chế độ kiểm soát quyền truy cập IAM.

Xin lưu ý rằng Thẻ và Thẻ được quản lý qua 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ó hai phần – phần đầu tiên minh hoạ chính sách về tường lửa mạng và phần Thẻ sử dụng một mạng VPC đơn lẻ, còn phần thứ hai giới thiệu cách sử dụng Thẻ trên các mạng VPC ngang hàng theo sơ đồ dưới đây. Do đó, lớp học lập trình này yêu cầu một dự án duy nhất và khả năng tạo nhiều mạng lưới VPC.

b9acf9823df8be04.jpeg

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ẻ có chính sách về tường lửa mạng
  • Cách sử dụng thẻ qua tính năng kết nối ngang hàng mạng VPC

Bạn cần có

  • Dự án Google Cloud
  • Có kiến thức về cách triển khai thực thể và định cấu hình thành phần mạng
  • Kiến thức về 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.

Bên 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 VPC và mạng con

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 vùng đã chọn:

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

NAT của đám mây

Tạo Bộ định tuyến đám mây và cổng NAT trên đám mây 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 một quy tắc tường lửa cho phép lưu lượng truy cập SSH vào từ phạm vi IAP trong trường hợp phạm vi này chưa được xác định trong 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 các phiên bản ứng dụng và máy chủ web 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 được tạo khi định cấu hình IAP ở phần đầu của phần này) và theo mặc định, tất cả lưu lượng truy cập vào đều bị từ chối, nên các phiên bản ứng dụng khách 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ở cửa sổ mới và bắt đầu phiên SSH cho phiên bản fwpolicy-vpc1-client và thử cuộn 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

(Không bắt buộc) 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 về tường lửa mạng toàn cầu

Tạo chính sách tường lửa cho 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 về tường lửa mạng và xác minh rằng quy tắc này đã thành công added:

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Kết quả dự kiến (cuộn lên đầu kết quả; lưu ý rằng các quy tắc ngầm ẩn 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 mã đã được áp dụng thành công cho mạng fwpolicy-vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Kết quả 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

Kiểm tra để đảm bảo rằng mã này đã được áp dụng thành công trên máy chủ web fwpolicy-vpc1:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Kết quả dự kiến sẽ tương tự như lệnh trước (tường lửa có hiệu lực 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

Quay lại phiên SSH của máy khách vpc1 và thử cuộn 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 tương ứng nếu 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

Trên Cloud Shell, hãy xác thực rằng bạn đã áp dụng chính sách tường lửa mạng cho fwpolicy-vpc1:

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Đầu ra dự kiến (cuộn lên đầu kết quả):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. Thẻ chịu sự quản lý của IAM

Thẻ là một cặp khoá-giá trị có thể đính kèm vào một tổ chức, thư mục hoặc dự án. Hãy xem bài viết Tạo và quản lý thẻ cũng như các quyền cần thiết để biết thêm thông tin.

Vai trò TagAdmin cho phép bạn tạo thẻ mới, cập nhật và xoá các thẻ hiện có. Quản trị viên tổ chức có thể cấp vai trò này. Trên Cloud Shell, hãy cập nhật chính sách IAM để thêm vai trò Quản trị viên thẻ cho người dùng. Sử dụng trang tài liệu tham khảo về quyền để xem những quyền nào có trong từng vai trò đã 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

Trên Cloud Shell, hãy mô tả quy tắc chính sách về tường lửa mạng hiện có để xác nhận rằng các thẻ hiện không được 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-Tag/web-clients và cài đặt quy tắc trên các thực thể bằng khoá thẻ vpc1-Tag/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

Trên Cloud Shell, hãy mô tả quy tắc chính sách về tường lửa mạng hiện có để xác nhận rằng các thẻ đã được áp dụng thành công và được báo cáo là HIỆU QUẢ:

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 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ả dự kiến (lưu ý rằng quy tắc tường lửa có mức độ ưu tiên 500 sẽ 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 tài liệu tham khảo về quyền để xem những quyền nào có trong từng vai trò đã 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 phiên bản 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 có hiệu lực:

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

Quay lại thẻ phiên SSH fwpolicy-vpc1-client và thử cuộn:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Bạn có thể kết nối 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

Quay 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 phải hết thời gian chờ vì thẻ chưa được thêm vào fwpolicy-vpc1-client. Trên Cloud Shell, hãy thêm vào 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

Hãy quay lại thẻ phiên SSH fwpolicy-vpc1-client rồi thử lại. Thao tác này hiện đã thành công.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. Các thẻ chịu sự quản lý của IAM qua kết nối ngang hàng mạng VPC

Trên Cloud Shell, hãy tạo một đám mây riêng ảo (VPC), mạng con và ứng dụng khách mới, rồi thiết lập tính năng Kết nối ngang hàng mạng đám mây riêng ảo (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 một quy tắc tường lửa cho phép lưu lượng truy cập SSH vào từ phạm vi IAP trong trường hợp phạm vi này chưa được xác định trong 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 khoá này cho các thực thể trong các mạng khác nhau. Do đó, bạn bắt buộc phải tạo giá trị và khoá 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 phiên bản 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

Liệt kê các liên kết của fwpolicy-vpc2-client (không bắt buộc):

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

Trên Cloud Shell, hãy mô tả quy tắc chính sách về tường lửa mạng hiện có để xác nhận rằng các thẻ mới hiện không được 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 tại để cho phép các thẻ từ mạng VPC 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à HIỆU QUẢ:

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 hiểu 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à cố gắng cuộn IP của fwpolicy-vpc1:

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

Bạn 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

Trong 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

Hãy thực hiện các bước bên dưới nếu vai trò TagAdmin và tagUsers đã 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, 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 cho mạng toàn cầu bằng cấu hình Thẻ.