1. Giới thiệu
Lớp học lập trình này khám phá Essentials về Tường lửa thế hệ tiếp theo (NGFW) trên đám mây cho Trình cân bằng tải ứng dụng (ALB) nội bộ và Trình cân bằng tải mạng (NLB) proxy bằng cách sử dụng chính sách tường lửa mạng theo khu vực.
Cloud NGFW là một dịch vụ tường lửa được phân phối toàn diện, có khả năng bảo vệ nâng cao trước các mối đe doạ và phân đoạn vi mô để bảo vệ các khối lượng công việc trên Google Cloud. Việc bật Cloud NGFW ở cấp trình cân bằng tải sẽ áp dụng các quy tắc nhất quán của chính sách tường lửa cho mọi lưu lượng truy cập TCP đi vào các trình cân bằng tải nội bộ dựa trên proxy. Việc này giúp đơn giản hoá việc cung cấp trạng thái bảo mật của tổ chức bằng cách tăng cường việc thực thi chính sách cho tất cả các dịch vụ.
Lớp học lập trình này đề cập đến các sản phẩm và tính năng sau đây của Cloud NGFW và trình cân bằng tải trên đám mây:
- Cloud NGFW Essentials
- Chính sách tường lửa mạng theo khu vực
- Trình cân bằng tải ứng dụng nội bộ theo khu vực
- Nhóm thực thể được quản lý (MIG) phụ trợ và nhóm điểm cuối mạng (NEG) Kết nối dịch vụ riêng tư (PSC)
LƯU Ý: Hãy tham khảo tài liệu về Cloud NFGW để biết các tính năng được hỗ trợ mới nhất và những hạn chế của các quy tắc chính sách tường lửa đối với mục tiêu của bộ cân bằng tải.
Kiến thức bạn sẽ học được
- Bật các quy tắc cơ bản của chính sách tường lửa Cloud NGFW nhắm đến trình cân bằng tải
- Bảo vệ dịch vụ trình cân bằng tải nội bộ của người dùng bằng thực thể VM và các dịch vụ phụ trợ PSC
- Kiểm tra quyền truy cập của ứng dụng và xác minh nhật ký tường lửa
Bạn cần có
- Một dự án trên Google Cloud
- Làm quen với các khái niệm về mạng của Google Cloud và cách sử dụng Google Cloud CLI
- Quyền IAM:
roles/compute.instanceAdmin.v1,roles/compute.networkAdmin,roles/compute.securityAdminvàroles/storage.admin
2. Khái niệm
Các cấp độ tính năng của tường lửa
Cloud NGFW có 3 cấp tính năng: Essentials, Standard và Enterprise. Mỗi cấp độ tăng dần đều cung cấp thêm các khả năng lọc và kiểm tra lưu lượng truy cập mạng.
Tóm tắt các tính năng lọc của Cloud NGFW Essentials:
Bậc | Chức năng | Lớp mạng | Ví dụ về các tham số quy tắc |
Essentials | Lọc địa chỉ IP và dải địa chỉ IP | IP |
|
Essentials | Nhóm địa chỉ | IP |
|
Essentials | Lọc giao thức và cổng | TCP |
|
Essentials | Thẻ bảo mật | Metadata |
|
Essentials | Lọc theo loại mạng | IP / siêu dữ liệu |
|
Các quy tắc chuyển tiếp của trình cân bằng tải xác định rõ ràng cổng TCP đích. Tham số --layer4-configs= của quy tắc tường lửa chỉ có thể chỉ định tcp. Giá trị cổng được ngụ ý theo chính quy tắc chuyển tiếp.
Nhóm địa chỉ và loại mạng có thể hữu ích để các quy tắc chính sách tường lửa hiệu quả hơn. Các loại mạng VPC_NETWORKS và INTRA_VPC được hỗ trợ bằng các quy tắc chính sách tường lửa cho bộ cân bằng tải.
LƯU Ý: Các quy tắc chính sách tường lửa cho trình cân bằng tải chỉ hỗ trợ --direction=INGRESS. Các quy tắc này được thiết kế để kiểm soát quyền truy cập vào các dịch vụ do bộ cân bằng tải hiển thị.
Lọc mặt phẳng dữ liệu
Các tính năng Essentials của Cloud NFGW bao gồm các quy tắc cơ bản về tường lửa có trạng thái Lớp 3 (địa chỉ IP) và Lớp 4 (cổng TCP). Tất cả các tính năng quy tắc chính sách tường lửa này đều được thực hiện hiệu quả trong lớp dữ liệu của bộ cân bằng tải mà không cần kiểm tra toàn bộ gói.
Các quy tắc chính sách Essentials của Cloud NGFW nhắm đến các phiên bản VM được thực thi trong cấu trúc mạng VPC phân tán trong mạng vận hành bằng phần mềm cốt lõi của Google Cloud (Andromeda). Các quy tắc lọc gói và chính sách tường lửa được thực thi ở cấp trình điều khiển ảo hoá của từng thực thể VM riêng lẻ, trước khi gói này đến giao diện mạng của thực thể VM.
Các quy tắc chính sách Essentials của Cloud NGFW nhắm đến trình cân bằng tải được thực thi bằng cách sử dụng các công nghệ cơ bản của trình cân bằng tải Google Cloud, cụ thể là cơ sở hạ tầng proxy dịch vụ Envoy. Bằng cách sử dụng cùng một mô hình tài nguyên và cấu trúc quy tắc Cloud NFGW, tính năng lọc gói có trạng thái sẽ được thực thi ngay trong lớp dữ liệu của bộ cân bằng tải dựa trên proxy.
Mục tiêu của trình cân bằng tải
Có một số điểm khác biệt chính giữa các chính sách Cloud NGFW nhắm đến trình cân bằng tải và các chính sách nhắm đến các phiên bản VM.
Bạn có thể áp dụng các quy tắc chính sách tường lửa cho một bộ cân bằng tải bằng cách chỉ định --target-type=INTERNAL_MANAGED_LB cùng với thông tin tham chiếu cụ thể đến quy tắc chuyển tiếp của bộ cân bằng tải --target-forwarding-rules=FR_NAME. Để nhắm đến tất cả các quy tắc chuyển tiếp của trình cân bằng tải trong khu vực mạng VPC (nơi chính sách giới hạn khu vực), bạn nên bỏ qua thông tin tham chiếu cụ thể và chỉ cần gắn cờ --target-type=INTERNAL_MANAGED_LB.
Nếu bạn không đặt tham số --target-type trong cấu hình quy tắc, thì theo mặc định, quy tắc sẽ tự động áp dụng cho tất cả các phiên bản VM và không bộ cân bằng tải.
Mạng lưới lớp học lập trình
Lớp học lập trình này sử dụng một dự án duy nhất có một mạng VPC và các tài nguyên sau:
- Hai mạng con theo khu vực
- Một chính sách tường lửa mạng theo khu vực
- Ba Application Load Balancer nội bộ theo khu vực
- Dịch vụ HTTP
wwwcó hệ thống phụ trợ là nhóm thực thể máy ảo - Dịch vụ HTTP
apicó hệ thống phụ trợ nhóm thực thể máy ảo gcsDịch vụ HTTPS có phần phụ trợ NEG PSC cho các API của Google
- Dịch vụ HTTP
- Hai phiên bản máy ảo để kiểm thử nhiều chính sách cho phép và từ chối
Hình 1. Mạng lớp học lập trình
Các quy tắc của chính sách tường lửa nhắm đến trình cân bằng tải được liên kết với các tài nguyên quy tắc chuyển tiếp của trình cân bằng tải. Bản thân bộ cân bằng tải được tạo thành từ các tài nguyên được xác định riêng lẻ và được định cấu hình cùng nhau để cung cấp một dịch vụ cân bằng tải hoàn chỉnh. Định nghĩa quy tắc chuyển tiếp trực tiếp tham chiếu đến một tài nguyên proxy đích cụ thể được xác định cho quy tắc đó.
Hình 1. Cloud NGFW cho tài nguyên trình cân bằng tải
Bộ lọc Essentials của Cloud NGFW được lập trình vào lớp dữ liệu của bộ cân bằng tải và được triển khai ở lớp dịch vụ proxy mục tiêu đã xác định (tương tự như giao diện phiên bản VM) bằng cách sử dụng cùng một cơ chế tường lửa nhất quán và phân tán để thực thi các chính sách.
3. Thiết lập dự án
Truy cập vào dự án của bạn
Lớp học lập trình này sử dụng một dự án trên đám mây duy nhất trên Google Cloud. Các bước định cấu hình sử dụng CLI gcloud cli và các lệnh shell Linux.
Bắt đầu bằng cách truy cập vào dòng lệnh của dự án trên Google Cloud:
- Cloud Shell tại
shell.cloud.google.com, hoặc - Một Terminal cục bộ đã cài đặt
gcloudCLI
Đặt mã dự án
gcloud config set project YOUR_PROJECT_ID_HERE
Bật dịch vụ API
gcloud services enable \
cloudresourcemanager.googleapis.com \
compute.googleapis.com \
dns.googleapis.com \
networksecurity.googleapis.com \
certificatemanager.googleapis.com
Đặt biến môi trường shell
# set your region preference
export REGION_1="us-west1"
# set your zone preference
export ZONE_1="us-west1-c"
# fetch project info and verify vars set
export PROJECT_ID=$(gcloud config list --format="value(core.project)")
export PROJECT_NO=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
echo ${REGION_1}
echo ${ZONE_1}
echo ${PROJECT_ID}
echo ${PROJECT_NO}
4. Nền tảng mạng
Trong phần này, bạn sẽ triển khai một nền tảng mạng với:
- Mạng VPC toàn cầu và mạng con theo khu vực
- Chính sách tường lửa mạng theo khu vực để bảo mật mạng VPC
- Cloud Router và Cloud NAT cho các máy chủ để tìm nạp gói phần mềm
- Đặt trước địa chỉ IP và bản ghi DNS cho cổng vào của bộ cân bằng tải
Tạo tài nguyên mạng
# create vpc network
gcloud compute networks create vnet-foo --subnet-mode=custom
# create subnet for clients
gcloud compute networks subnets create subnet-foo-1 \
--network=vnet-foo \
--region=${REGION_1} \
--range=10.0.0.0/24 \
--enable-private-ip-google-access
# create subnet for backend servers
gcloud compute networks subnets create subnet-foo-2 \
--network=vnet-foo \
--region=${REGION_1} \
--range=172.16.0.0/24 \
--enable-private-ip-google-access
# create proxy subnet
gcloud compute networks subnets create subnet-foo-3 \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--network=vnet-foo \
--region=${REGION_1} \
--range=172.16.128.0/23
Tạo các thành phần tường lửa
Chính sách cơ bản về tường lửa mạng theo khu vực mà bạn tạo ở đây sẽ được dùng sau này khi thêm các mục tiêu cụ thể của trình cân bằng tải. Chính sách này phải nằm trong cùng khu vực với bộ cân bằng tải.
Tạo nhóm địa chỉ
Bắt đầu bằng cách tạo một nhóm địa chỉ để xác định dải IP của lệnh kiểm tra tình trạng nguồn hỗ trợ chức năng của bộ cân bằng tải. Bạn cần cho phép các dải này để các máy chủ phụ trợ của trình cân bằng tải được coi là hoạt động bình thường. Sau này, bạn cũng sẽ dùng địa chỉ này với các quy tắc chính sách tường lửa nhắm đến trình cân bằng tải.
# create address group
gcloud network-security address-groups create uhc-probes \
--description="health check probes" \
--type=IPv4 \
--capacity=42 \
--location=${REGION_1}
# add ip ranges to address group
gcloud network-security address-groups add-items uhc-probes \
--items=35.191.0.0/16,130.211.0.0/22 \
--location=${REGION_1}
Tạo chính sách tường lửa
# create fw policy
gcloud compute network-firewall-policies create fw-policy-foo-${REGION_1} \
--description="foo fw ${REGION_1}" \
--region=${REGION_1}
# create fw policy rule to allow in iap
gcloud compute network-firewall-policies rules create 1001 \
--description="allow iap for ssh" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp:22 \
--src-ip-ranges=35.235.240.0/20
# create fw policy rule to allow in health checks
gcloud compute network-firewall-policies rules create 1002 \
--description="allow health checks to backends" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp \
--src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes
# create fw policy rule to allow in lb proxies
gcloud compute network-firewall-policies rules create 1003 \
--description="allow lb proxy" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp:80,tcp:443,tcp:8080 \
--src-ip-ranges=172.16.128.0/23
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
--name=fw-policy-association-foo-${REGION_1} \
--firewall-policy=fw-policy-foo-${REGION_1} \
--network=vnet-foo \
--firewall-policy-region=${REGION_1}
Định cấu hình các dịch vụ mạng
Tạo Cloud Router và Cổng NAT
# create router for nat
gcloud compute routers create cr-nat-foo \
--network=vnet-foo \
--asn=16550 \
--region=${REGION_1}
# create nat gateway
gcloud compute routers nats create natgw-foo \
--router=cr-nat-foo \
--region=${REGION_1} \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
Dành riêng địa chỉ IP
# reserve vip for lb www service
gcloud compute addresses create vip-foo-www \
--region=${REGION_1} \
--subnet=subnet-foo-1 \
--addresses=10.0.0.101
# reserve vip for lb api service
gcloud compute addresses create vip-foo-api \
--region=${REGION_1} \
--subnet=subnet-foo-1 \
--addresses=10.0.0.102
# reserve vip for lb gcs service
gcloud compute addresses create vip-foo-gcs \
--region=${REGION_1} \
--subnet=subnet-foo-1 \
--addresses=10.0.0.103
Tạo bản ghi DNS
# create dns zone
gcloud dns managed-zones create zone-foo \
--description="private zone for foo" \
--dns-name=foo.com \
--networks=vnet-foo \
--visibility=private
# create dns record for www service
gcloud dns record-sets create www.foo.com \
--zone=zone-foo \
--type=A \
--ttl=300 \
--rrdatas="10.0.0.101"
# create dns record for api service
gcloud dns record-sets create api.foo.com \
--zone=zone-foo \
--type=A \
--ttl=300 \
--rrdatas="10.0.0.102"
# create dns record for gcs service
gcloud dns record-sets create gcs.foo.com \
--zone=zone-foo \
--type=A \
--ttl=300 \
--rrdatas="10.0.0.103"
Đến đây là kết thúc phần thiết lập mạng. Tiếp theo, chúng ta sẽ chuyển sang định cấu hình trình cân bằng tải.
5. Dịch vụ trình cân bằng tải
Trong phần này, bạn sẽ triển khai các thành phần của trình cân bằng tải (dịch vụ phụ trợ, bản đồ URL, proxy mục tiêu và quy tắc chuyển tiếp) cho 3 dịch vụ:
- Dịch vụ
www(ilb-foo-www) trên cổng80 - Dịch vụ
api(ilb-foo-api) trên cổng8080 - dịch vụ
gcs(ilb-foo-gcs) trên cổng443có chứng chỉ TLS
Cùng với các tài nguyên phụ trợ hỗ trợ:
- Các thực thể máy ảo chạy máy chủ HTTP trong một nhóm thực thể được quản lý
- Nhóm điểm cuối mạng (NEG) Kết nối dịch vụ riêng tư (PSC) cho các API của Google
- Bộ chứa Google Cloud Storage (GCS)
Thiết lập tài nguyên phụ trợ
Tạo máy chủ nhóm thực thể máy ảo
Trình cân bằng tải www sẽ sử dụng các máy chủ phụ trợ của nhóm phiên bản máy ảo đang chạy máy chủ web Apache và đang nghe trên cổng 80.
Trình cân bằng tải api sẽ sử dụng cùng một nhóm thực thể máy ảo đang nghe trên cổng 8080.
# create vm startup config with http server
cat > vm-server-startup.sh << 'OEOF'
#! /bin/bash
set -e
apt-get update
apt-get install apache2 -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone | cut -d/ -f4)"
echo "www served from: $vm_hostname in zone $vm_zone on port 80" | \
tee /var/www/html/index.html
echo "Listen 8080" | tee -a /etc/apache2/ports.conf
mkdir -p /var/www/api
echo "api served from: $vm_hostname in zone $vm_zone on port 8080" | \
tee /var/www/api/index.html
tee /etc/apache2/sites-available/api.conf << EOF
<VirtualHost *:8080>
DocumentRoot /var/www/api
</VirtualHost>
EOF
a2ensite api.conf
systemctl restart apache2
OEOF
# create managed instance group template
gcloud compute instance-templates create mig-template-foo \
--machine-type=e2-micro \
--network=vnet-foo \
--region=${REGION_1} \
--subnet=subnet-foo-2 \
--no-address \
--shielded-secure-boot \
--metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-foo \
--region=${REGION_1} \
--size=2 \
--template=mig-template-foo \
--base-instance-name=service-foo
# create named ports for instance group
gcloud compute instance-groups managed set-named-ports mig-foo \
--named-ports=www-port:80,api-port:8080 \
--region=${REGION_1}
Tạo bộ chứa lưu trữ
Bộ cân bằng tải gcs sẽ sử dụng phần phụ trợ PSC NEG để kết nối thông qua giao diện người dùng Google API với bộ chứa Cloud Storage.
# create random bucket name
export BUCKET=$(openssl rand -hex 12)
echo ${BUCKET}
LƯU Ý: Các biến môi trường sẽ bị mất sau khi phiên shell đóng. Ghi lại tên bộ chứa nếu cần để hoàn tất trong một phiên sau này.
# create bucket
gcloud storage buckets create gs://${BUCKET} --location=${REGION_1}
# give compute sa object admin role on bucket
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
--member=serviceAccount:${PROJECT_NO}-compute@developer.gserviceaccount.com \
--role=roles/storage.objectAdmin
Tạo chứng chỉ
Bộ cân bằng tải gcs sẽ chấm dứt các yêu cầu HTTPS của máy khách bằng một chứng chỉ tự ký được triển khai cho proxy HTTPS mục tiêu.
# create cert
openssl req -x509 -newkey rsa:2048 \
-nodes \
-days 365 \
-keyout foo-gcs-key.pem \
-out foo-gcs-cert.pem \
-subj "/CN=Foo, Inc." \
-addext "subjectAltName=DNS:gcs.foo.com"
# upload to certificate manager
gcloud certificate-manager certificates create cert-foo-gcs \
--private-key-file=foo-gcs-key.pem \
--certificate-file=foo-gcs-cert.pem \
--location=${REGION_1}
Tạo các thành phần của trình cân bằng tải
Sử dụng tập lệnh sau để tự động hoá việc triển khai các thành phần của bộ cân bằng tải. Điều này sẽ giúp tăng tốc độ và độ chính xác trên tất cả các phần tử cấu hình có liên quan.
Triển khai tập lệnh tạo trình cân bằng tải
# create script file
cat > create_lbs.sh << EOF
#!/bin/bash
set -e
# --- Create load balancer for www service port 80 ---
echo "--- Creating Load Balancer for WWW Service (ilb-foo-www) on port 80 ---"
echo "ilb-foo-www: creating health check (hc-foo-www)"
gcloud compute health-checks create http hc-foo-www \
--use-serving-port \
--region=${REGION_1}
echo "ilb-foo-www: creating backend service (bes-foo-www)"
gcloud compute backend-services create bes-foo-www \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--port-name=www-port \
--health-checks=hc-foo-www \
--health-checks-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-www: adding managed instance group (mig-foo) to backend service (bes-foo-www)"
gcloud compute backend-services add-backend bes-foo-www \
--balancing-mode=UTILIZATION \
--instance-group=mig-foo \
--instance-group-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-www: creating url map (ilb-foo-www)"
gcloud compute url-maps create ilb-foo-www \
--default-service=bes-foo-www \
--region=${REGION_1}
echo "ilb-foo-www: creating target http proxy (proxy-foo-www)"
gcloud compute target-http-proxies create proxy-foo-www \
--url-map=ilb-foo-www \
--url-map-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-www: creating forwarding rule (fr-foo-www)"
gcloud compute forwarding-rules create fr-foo-www \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vnet-foo \
--subnet=subnet-foo-1 \
--subnet-region=${REGION_1} \
--address=vip-foo-www \
--ports=80 \
--target-http-proxy=proxy-foo-www \
--target-http-proxy-region=${REGION_1} \
--region=${REGION_1}
echo "--- Successfully created Load Balancer for WWW Service (ilb-foo-www) ---"
echo
# --- Create load balancer for api service port 8080 ---
echo "--- Creating Load Balancer for API Service (ilb-foo-api) on port 8080 ---"
echo "ilb-foo-api: creating health check (hc-foo-api)"
gcloud compute health-checks create http hc-foo-api \
--use-serving-port \
--region=${REGION_1}
echo "ilb-foo-api: creating backend service (bes-foo-api)"
gcloud compute backend-services create bes-foo-api \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--port-name=api-port \
--health-checks=hc-foo-api \
--health-checks-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-api: adding managed instance group (mig-foo) to backend service (bes-foo-api)"
gcloud compute backend-services add-backend bes-foo-api \
--balancing-mode=UTILIZATION \
--instance-group=mig-foo \
--instance-group-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-api: creating url map (ilb-foo-api)"
gcloud compute url-maps create ilb-foo-api \
--default-service=bes-foo-api \
--region=${REGION_1}
echo "ilb-foo-api: creating target http proxy (proxy-foo-api)"
gcloud compute target-http-proxies create proxy-foo-api \
--url-map=ilb-foo-api \
--url-map-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-api: creating forwarding rule (fr-foo-api)"
gcloud compute forwarding-rules create fr-foo-api \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vnet-foo \
--subnet=subnet-foo-1 \
--subnet-region=${REGION_1} \
--address=vip-foo-api \
--ports=8080 \
--target-http-proxy=proxy-foo-api \
--target-http-proxy-region=${REGION_1} \
--region=${REGION_1}
echo "--- Successfully created Load Balancer for API Service (ilb-foo-api) ---"
echo
# --- Create load balancer for gcs service port 443 ---
echo "--- Creating Load Balancer for GCS Service (ilb-foo-gcs) on port 443 ---"
echo "ilb-foo-gcs: creating network endpoint group (neg-psc-gcs)"
gcloud compute network-endpoint-groups create neg-psc-gcs \
--network-endpoint-type=private-service-connect \
--psc-target-service=storage.${REGION_1}.rep.googleapis.com \
--region=${REGION_1}
echo "ilb-foo-gcs: creating backend service (bes-foo-gcs)"
gcloud compute backend-services create bes-foo-gcs \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTPS \
--region=${REGION_1}
echo "ilb-foo-gcs: adding network endpoint group (neg-psc-gcs) to backend service (bes-foo-gcs)"
gcloud compute backend-services add-backend bes-foo-gcs \
--network-endpoint-group=neg-psc-gcs \
--network-endpoint-group-region=${REGION_1} \
--region=${REGION_1}
echo "ilb-foo-gcs: creating url map (ilb-foo-gcs)"
gcloud compute url-maps create ilb-foo-gcs \
--default-service=bes-foo-gcs \
--region=${REGION_1}
echo "ilb-foo-gcs: creating target https proxy (proxy-foo-gcs)"
gcloud compute target-https-proxies create proxy-foo-gcs \
--url-map=ilb-foo-gcs \
--url-map-region=${REGION_1} \
--certificate-manager-certificates=cert-foo-gcs \
--region=${REGION_1}
echo "ilb-foo-gcs: creating forwarding rule (fr-foo-gcs)"
gcloud compute forwarding-rules create fr-foo-gcs \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vnet-foo \
--subnet=subnet-foo-1 \
--subnet-region=${REGION_1} \
--address=vip-foo-gcs \
--ports=443 \
--target-https-proxy=proxy-foo-gcs \
--target-https-proxy-region=${REGION_1} \
--region=${REGION_1}
echo "--- Successfully created Load Balancer for GCS Service (ilb-foo-gcs) ---"
echo
echo "All load balancers created successfully."
EOF
# make script executable
chmod +x create_lbs.sh
# run script
./create_lbs.sh
LƯU Ý: Tập lệnh này sẽ mất vài phút để hoàn tất.
Xác minh việc tạo trình cân bằng tải
Kiểm tra để đảm bảo các quy tắc chuyển tiếp và dịch vụ phụ trợ đã được triển khai.
# check forwarding rules
gcloud compute forwarding-rules list
# check backend services
gcloud compute backend-services list
Đến đây là kết thúc phần thiết lập bộ cân bằng tải... tiếp theo là định cấu hình các phiên bản máy ảo của máy khách.
6. Quyền truy cập của ứng dụng
Tạo tài nguyên ứng dụng VM
Trong phần này, bạn sẽ triển khai các máy khách và xác minh khả năng kết nối đầu cuối.
Tạo phiên bản máy ảo
# set variables for client ip addresses
export VM_ALLOW_IP="10.0.0.11"
export VM_DENY_IP="10.0.0.12"
echo ${VM_ALLOW_IP}
echo ${VM_DENY_IP}
# create client 1 vm
gcloud compute instances create vm-allow \
--machine-type=e2-micro \
--zone=${ZONE_1} \
--subnet=subnet-foo-1 \
--no-address \
--private-network-ip=${VM_ALLOW_IP} \
--scopes=cloud-platform \
--shielded-secure-boot
# create client 2 vm
gcloud compute instances create vm-deny \
--machine-type=e2-micro \
--zone=${ZONE_1} \
--subnet=subnet-foo-1 \
--no-address \
--private-network-ip=${VM_DENY_IP} \
--scopes=cloud-platform \
--shielded-secure-boot
Dịch vụ cơ sở kiểm thử
Thử nghiệm từ ứng dụng vm-allow
LƯU Ý: Các phiên bản VM sẽ hoạt động và có thể truy cập qua ssh bằng IAP ngay sau khi bạn phát hành các lệnh instances create. Bạn có thể phải đợi một chút nếu yêu cầu không thành công trong lần đầu tiên.
# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
curl -s api.foo.com:8080"
Thử tải một tệp lên Google Cloud Storage thông qua trình cân bằng tải.
# send request to foo gcs service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
echo 'test one on the way' > test-upload-1.txt
TOKEN=\$(gcloud auth print-access-token)
curl -s -k -X POST \"https://gcs.foo.com/upload/storage/v1/b/${BUCKET}/o?uploadType=media&name=test-upload-object-1.txt\" \
-H \"Authorization: Bearer \${TOKEN}\" \
-H \"Content-Type: text/plain\" \
--data-binary @test-upload-1.txt"
Phản hồi của Cloud Storage API xác nhận rằng đường dẫn mạng đang hoạt động đúng cách.
Thử nghiệm từ ứng dụng vm-deny
# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s api.foo.com:8080"
# send request to foo gcs service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
echo 'test two on the way' > test-upload-2.txt
TOKEN=\$(gcloud auth print-access-token)
curl -s -k -X POST \"https://gcs.foo.com/upload/storage/v1/b/${BUCKET}/o?uploadType=media&name=test-upload-object-2.txt\" \
-H \"Authorization: Bearer \${TOKEN}\" \
-H \"Content-Type: text/plain\" \
--data-binary @test-upload-2.txt"
LƯU Ý: Các kiểm thử này cũng sẽ thành công vì chưa có quy tắc tường lửa nào nhắm đến bộ cân bằng tải.
Đến đây là kết thúc tất cả các phần thiết lập chính... tiếp theo là tạo các quy tắc tường lửa của bộ cân bằng tải.
7. Tường lửa của trình cân bằng tải
Trong phần này, bạn sẽ triển khai các quy tắc chính sách tường lửa nhắm đến bộ cân bằng tải. Trình tự cấu hình sẽ hướng đến một trạng thái bảo mật cho phép truy cập vm-allow và chặn lưu lượng truy cập vm-deny đến tất cả các dịch vụ.
Cho phép một số lưu lượng truy cập đến fr-foo-www
Thêm một quy tắc mới cho chính sách tường lửa vào chính sách tường lửa hiện có fw-policy-foo-${REGION_1}
- Cho phép một dải IP nguồn bao gồm
vm-allowvà loại trừ địa chỉ IPvm-deny - Thêm một bộ lọc nguồn khác
INTRA_VPCđể sử dụng loại mạng trong một quy tắc chính sách tường lửa nhắm đến bộ cân bằng tải
Loại mạng nguồn của INTRA_VPC và VPC_NETWORKS được hỗ trợ trong các quy tắc chính sách tường lửa nhắm đến bộ cân bằng tải khi được sử dụng kết hợp với một tham số nguồn khác. Logic đánh giá là một AND giữa hai tham số nguồn. Trong trường hợp này, lưu lượng truy cập phải đáp ứng các tiêu chí cho INTRA_VPC và --src-ip-ranges=${VM_ALLOW_IP}/32 để được phép.
Tạo quy tắc cho phép nhắm đến vm-allow fr-foo-www
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2001 \
--description="allow vm traffic to fr-www" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--enable-logging \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp \
--src-network-type=INTRA_VPC \
--src-ip-ranges=${VM_ALLOW_IP}/32 \
--target-type=INTERNAL_MANAGED_LB \
--target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www
Thử nghiệm từ ứng dụng vm-allow
# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
curl -s www.foo.com"
Thử nghiệm từ ứng dụng vm-deny
# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s www.foo.com"
LƯU Ý: Thao tác này thành công vì hành vi mặc định ngầm ẩn của quy tắc chính sách tường lửa đối với bộ cân bằng tải là --action=allow. Bạn cần có một quy tắc từ chối mặc định (catchall) để thay đổi chế độ cài đặt này.
Từ chối lưu lượng truy cập mặc định đến fr-foo-www
Thêm một quy tắc mới có mức độ ưu tiên thấp hơn (số ưu tiên cao hơn) cho chính sách tường lửa.
- Từ chối tất cả lưu lượng truy cập từ bất kỳ địa chỉ IP nguồn nào
- Lưu lượng truy cập từ
vm-allowđếnfr-foo-wwwsẽ được cho phép trước khi gặp phải quy tắc từ chối
Tạo quy tắc từ chối nhắm đến lưu lượng truy cập fr-foo-www
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2999 \
--description="allow vm traffic to fr-www" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--enable-logging \
--action=deny \
--direction=INGRESS \
--layer4-configs=tcp \
--src-ip-ranges=0.0.0.0/0 \
--target-type=INTERNAL_MANAGED_LB \
--target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www
Những điều cần cân nhắc khi kiểm tra tình trạng
Tương tự như các quy tắc chính sách tường lửa nhắm đến các phiên bản VM, quy tắc từ chối lưu lượng truy cập mặc định (ngầm ẩn) sẽ chặn lưu lượng truy cập có nguồn gốc từ các dải địa chỉ của chương trình kiểm tra tình trạng và đích đến là các dịch vụ phụ trợ của trình cân bằng tải. Vì vậy, một quy tắc cho phép rõ ràng đã được định cấu hình để cho phép các dải địa chỉ IP của lệnh kiểm tra tình trạng lưu lượng truy cập vào (xem quy tắc 1002).
QUAN TRỌNG: Tương tự, khi tạo một quy tắc từ chối (rõ ràng) chung cho các mục tiêu của trình cân bằng tải, bạn phải tạo một quy tắc khác có mức độ ưu tiên cao hơn (số có mức độ ưu tiên thấp hơn) để cho phép lưu lượng truy cập đến từ dải địa chỉ của chương trình kiểm tra tình trạng. Quy tắc này cần nhắm đến(các) bộ cân bằng tải.
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2002 \
--description="allow health checks to fr-www" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp \
--src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes \
--target-type=INTERNAL_MANAGED_LB \
--target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www
Thử nghiệm từ ứng dụng vm-deny
# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s www.foo.com"
Thao tác này sẽ không thành công vì quy tắc tường lửa 2999 từ chối tất cả lưu lượng truy cập có nguồn gốc từ mạng VPC. Quy tắc có mức độ ưu tiên cao hơn (số mức độ ưu tiên thấp hơn) 2001 chỉ cho phép một dải nguồn bao gồm vm-allow.
Dừng quá trình curl bằng cách nhấn Ctrl+C.
# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s api.foo.com:8080"
vm-deny vẫn có thể truy cập vào dịch vụ API! Thao tác này thành công vì quy tắc tường lửa chỉ được áp dụng cụ thể cho quy tắc chuyển tiếp fr-foo-www và không nhắm đến fr-foo-api.
Cập nhật quy tắc để nhắm đến tất cả các trình cân bằng tải
LƯU Ý: Bạn có thể áp dụng các quy tắc chính sách tường lửa cho tất cả bộ cân bằng tải trong một mạng VPC bằng cách bỏ qua --target-forwarding-rules=FR_NAME.
Thay đổi các quy tắc chính sách tường lửa để áp dụng cho tất cả các mục tiêu quy tắc chuyển tiếp của bộ cân bằng tải trong mạng VPC.
- Tạo quy tắc cho phép lưu lượng truy cập đến mới
2003nhắm đến tất cả các quy tắc chuyển tiếp để cho phép lưu lượng truy cập của máy ảo (dải IPvm-allow) - Tạo một quy tắc cho phép lưu lượng truy cập đến mới
2004nhắm đến tất cả các quy tắc chuyển tiếp để cho phép lưu lượng truy cập kiểm tra tình trạng (nhóm địa chỉuhc-probes). - Tạo quy tắc từ chối lưu lượng truy cập vào mới
2998nhắm đến tất cả các quy tắc chuyển tiếp dưới dạng quy tắc từ chối chung cho tất cả lưu lượng truy cập khác
Sửa đổi các quy tắc tường lửa để nhắm đến tất cả các bộ cân bằng tải
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2003 \
--description="allow vm traffic to all vnet lb fr" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--enable-logging \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp \
--src-ip-ranges=${VM_ALLOW_IP}/32 \
--target-type=INTERNAL_MANAGED_LB
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2004 \
--description="allow health checks to all vnet lb fr" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--enable-logging \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp \
--src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes \
--target-type=INTERNAL_MANAGED_LB
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2998 \
--description="deny all vnet traffic to all vnet lb fr" \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1} \
--enable-logging \
--action=deny \
--direction=INGRESS \
--layer4-configs=tcp \
--src-ip-ranges=0.0.0.0/0 \
--target-type=INTERNAL_MANAGED_LB
Bạn có thể xoá các quy tắc chính sách tường lửa trước đây nhắm đến các quy tắc chuyển tiếp bộ cân bằng tải rõ ràng vì các quy tắc này hiện đã dư thừa so với các quy tắc nhắm đến tất cả quy tắc chuyển tiếp trong mạng VPC.
# delete redundant fw policy rules
gcloud beta compute network-firewall-policies rules delete 2001 \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1}
gcloud beta compute network-firewall-policies rules delete 2002 \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1}
gcloud beta compute network-firewall-policies rules delete 2999 \
--firewall-policy=fw-policy-foo-${REGION_1} \
--firewall-policy-region=${REGION_1}
Thử nghiệm từ ứng dụng vm-deny
# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
curl -s api.foo.com:8080"
Thao tác này sẽ không thành công vì fr-foo-api cũng là mục tiêu của tất cả các quy tắc chính sách tường lửa có --target-type=INTERNAL_MANAGED_LB.
Dừng quá trình curl bằng cách nhấn Ctrl+C.
Kiểm thử việc tải một tệp xuống từ Google Cloud Storage thông qua bộ cân bằng tải.
# send request to foo gcs service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
TOKEN=\$(gcloud auth print-access-token)
curl -s -k \"https://gcs.foo.com/storage/v1/b/${BUCKET}/o/test-upload-object.txt?alt=media\" \
-H \"Authorization: Bearer \${TOKEN}\" \
-o test-download.txt"
Dừng quá trình curl bằng cách nhấn Ctrl+C.
Thử nghiệm từ ứng dụng vm-allow
# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
curl -s api.foo.com:8080"
# send request to foo gcs service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
TOKEN=\$(gcloud auth print-access-token)
curl -s -k \"https://gcs.foo.com/storage/v1/b/${BUCKET}/o/test-upload-object-1.txt?alt=media\" \
-H \"Authorization: Bearer \${TOKEN}\" \
-o test-download-1.txt"
Xác minh nội dung tải xuống
# send request from vm
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
cat test-download-1.txt"
Tất cả các dịch vụ của bộ cân bằng tải đều có sẵn cho vm-allow và đã bị chặn thành công đối với vm-deny.
Đến đây là kết thúc phần kiểm thử... tiếp theo là phần xem xét ngắn gọn về việc ghi nhật ký.
8. Ghi nhật ký quy tắc tường lửa
Định dạng nhật ký tường lửa có các trường và bản ghi cho những quy tắc nhắm đến bộ cân bằng tải (--target-type=INTERNAL_MANAGED_LB).
Nhật ký sẽ có thêm một trường được gắn nhãn load_balancer_details với thông tin chi tiết hơn về bộ cân bằng tải mà quy tắc chính sách tường lửa nhắm đến. Điều này tương tự như định dạng trường InstanceDetails khi các phiên bản máy ảo được nhắm đến trong các quy tắc chính sách tường lửa.
load_balancer_details.forwarding_rule_namecho biết quy tắc chuyển tiếp mục tiêu của quy tắc chính sách tường lửaload_balancer_details.typecho biết phiên bản nào của bộ cân bằng tải dựa trên proxy được nhắm đếnload_balancer_details.url_map_nameghi nhật ký tài nguyên bản đồ URL được dùng khi loại là bộ cân bằng tải ứng dụng
Xem nhật ký
Truy vấn nhật ký tường lửa để xem kết quả của các quy tắc chính sách tường lửa.
gcloud logging read \
"logName=projects/${PROJECT_ID}/logs/compute.googleapis.com%2Ffirewall \
AND (jsonPayload.connection.src_ip=\"${VM_ALLOW_IP}\" OR jsonPayload.connection.src_ip=\"${VM_DENY_IP}\")" \
--project=${PROJECT_ID} \
--freshness=30m \
--limit=50 \
--format="table(
timestamp:label=TIMESTAMP,
jsonPayload.connection.src_ip:label=SRC_IP,
jsonPayload.connection.src_port:label=SRC_PORT,
jsonPayload.connection.dest_ip:label=DEST_IP,
jsonPayload.connection.dest_port:label=DEST_PORT,
jsonPayload.disposition:label=ACTION,
jsonPayload.rule_details.priority:label=PRIORITY,
jsonPayload.load_balancer_details.forwarding_rule_name:label=FWD_RULE
)"
Đầu ra nhật ký cho thấy các quy tắc có hiệu lực do chính sách thực thi:
- Quy tắc
2011cho phép tất cả lưu lượng truy cậpvm-allowđến tất cả các trình cân bằng tải - Tất cả lưu lượng truy cập được chuyển đến bộ cân bằng tải đều bị từ chối theo quy tắc
2998
TIMESTAMP SRC_IP SRC_PORT DEST_IP DEST_PORT ACTION PRIORITY FWD_RULE
YYYY-MM-DDTHH:MM:SS.850967068Z 10.0.0.11 48480 10.0.0.103 443 ALLOWED 2003 fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.418613380Z 10.0.0.11 37340 10.0.0.101 80 ALLOWED 2003 fr-foo-www
YYYY-MM-DDTHH:MM:SS.213234118Z 10.0.0.12 55950 10.0.0.103 443 DENIED 2998 fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.981484412Z 10.0.0.11 41738 10.0.0.101 80 ALLOWED 2003 fr-foo-www
YYYY-MM-DDTHH:MM:SS.189358071Z 10.0.0.12 55950 10.0.0.103 443 DENIED 2998 fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.061463883Z 10.0.0.12 55950 10.0.0.103 443 DENIED 2998 fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.965498098Z 10.0.0.12 53284 10.0.0.102 8080 DENIED 2998 fr-foo-api
Bạn cũng có thể xem nhật ký trong Google Cloud Console bằng Trình khám phá nhật ký. Chuyển đến console.cloud.google.com/logs/query và sử dụng nhật ký tường lửa VPC tiêu chuẩn compute.googleapis.com/firewall.
logName=projects/${PROJECT_ID}/logs/compute.googleapis.com%2Ffirewall
Đến đây là kết thúc phần ghi nhật ký... chuyển sang dọn dẹp!
9. Dọn dẹp
# delete client compute resources
gcloud -q compute instances delete vm-deny --zone=${ZONE_1}
gcloud -q compute instances delete vm-allow --zone=${ZONE_1}
# next
# delete load balancer resources for gcs
gcloud -q compute forwarding-rules delete fr-foo-gcs --region=${REGION_1}
gcloud -q compute target-https-proxies delete proxy-foo-gcs --region=${REGION_1}
gcloud -q compute url-maps delete ilb-foo-gcs --region=${REGION_1}
gcloud -q compute backend-services delete bes-foo-gcs --region=${REGION_1}
gcloud -q compute addresses delete vip-foo-gcs --region=${REGION_1}
# next
# delete load balancer resources for api
gcloud -q compute forwarding-rules delete fr-foo-api --region=${REGION_1}
gcloud -q compute target-http-proxies delete proxy-foo-api --region=${REGION_1}
gcloud -q compute url-maps delete ilb-foo-api --region=${REGION_1}
gcloud -q compute backend-services delete bes-foo-api --region=${REGION_1}
gcloud -q compute health-checks delete hc-foo-api --region=${REGION_1}
gcloud -q compute addresses delete vip-foo-api --region=${REGION_1}
# next
# delete load balancer resources for www
gcloud -q compute forwarding-rules delete fr-foo-www --region=${REGION_1}
gcloud -q compute target-http-proxies delete proxy-foo-www --region=${REGION_1}
gcloud -q compute url-maps delete ilb-foo-www --region=${REGION_1}
gcloud -q compute backend-services delete bes-foo-www --region=${REGION_1}
gcloud -q compute health-checks delete hc-foo-www --region=${REGION_1}
gcloud -q compute addresses delete vip-foo-www --region=${REGION_1}
# next
# delete service backend resources
gcloud -q storage rm --recursive gs://${BUCKET}
gcloud -q certificate-manager certificates delete cert-foo-gcs --location=${REGION_1}
gcloud -q compute network-endpoint-groups delete neg-psc-gcs --region=${REGION_1}
gcloud -q compute instance-groups managed delete mig-foo --region=${REGION_1}
gcloud -q compute instance-templates delete mig-template-foo --global
# next
# delete dns, nat, fw resources
gcloud -q dns record-sets delete gcs.foo.com --type=A --zone=zone-foo
gcloud -q dns record-sets delete api.foo.com --type=A --zone=zone-foo
gcloud -q dns record-sets delete www.foo.com --type=A --zone=zone-foo
gcloud -q dns managed-zones delete zone-foo
gcloud -q compute routers delete cr-nat-foo --region=${REGION_1}
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy=fw-policy-foo-${REGION_1} \
--name=fw-policy-association-foo-${REGION_1} \
--firewall-policy-region=${REGION_1}
gcloud -q compute network-firewall-policies delete fw-policy-foo-${REGION_1} --region=${REGION_1}
gcloud -q network-security address-groups delete uhc-probes --location=${REGION_1}
# next
# delete network resources
gcloud -q compute networks subnets delete subnet-foo-3 --region=${REGION_1}
gcloud -q compute networks subnets delete subnet-foo-2 --region=${REGION_1}
gcloud -q compute networks subnets delete subnet-foo-1 --region=${REGION_1}
gcloud -q compute networks delete vnet-foo
# next
# delete shell variables and local files
unset PROJECT_ID REGION_1 ZONE_1 VM_ALLOW_IP VM_DENY_IP BUCKET
rm vm-server-startup.sh create_lbs.sh foo-gcs-key.pem foo-gcs-cert.pem
# end
10. Kết luận
Xin chúc mừng! Bạn đã định cấu hình thành công Cloud NGFW Essentials cho trình cân bằng tải!
Bạn có thể thoải mái đưa ra ý kiến nhận xét, câu hỏi hoặc nội dung chỉnh sửa bằng cách sử dụng biểu mẫu phản hồi này
Cảm ơn bạn!