1. Giới thiệu
Tính năng cân bằng tải của Google Cloud được triển khai ở bên cạnh mạng của Google tại các điểm hiện diện của Google (POP) trên toàn thế giới. Lưu lượng truy cập của người dùng được chuyển đến trình cân bằng tải Proxy TCP sẽ nhập vào POP gần người dùng nhất và sau đó được cân bằng tải qua mạng toàn cầu của Google tới máy chủ phụ trợ gần nhất có đủ dung lượng.
Cloud Armor là hệ thống phát hiện tường lửa ứng dụng web (WAF) và từ chối dịch vụ phân tán của Google. Cloud Armor được kết hợp chặt chẽ với Trình cân bằng tải proxy của Google Cloud TCP và cho phép bạn thẩm vấn lưu lượng truy cập đến đối với các yêu cầu không mong muốn. Tính năng giới hạn số lượng yêu cầu của dịch vụ này cho phép bạn hạn chế lưu lượng truy cập vào các tài nguyên phụ trợ dựa trên số lượng yêu cầu, đồng thời ngăn lưu lượng truy cập không mong muốn sử dụng tài nguyên trên mạng đám mây riêng tư ảo (VPC) của bạn.
Trình cân bằng tải proxy TCP/SSL của Google Cloud cho phép bạn thiết lập lưu lượng truy cập loại TCP/ SSL qua proxy giữa các dịch vụ phụ trợ.
Trong lớp học lập trình này, bạn sẽ tạo trình cân bằng tải proxy TCP/SSL thông qua một dịch vụ phụ trợ và sử dụng Cloud Armor để chỉ cho phép một nhóm người dùng cụ thể truy cập vào trình cân bằng tải.
Kiến thức bạn sẽ học được
- Cách tạo trình cân bằng tải proxy TCP/SSL
- Cách tạo chính sách bảo mật của Cloud Armor
- Cách tạo quy tắc về danh sách từ chối IP cho trình cân bằng tải proxy TCP/SSL trong Cloud Armor
- Cách tạo quy tắc giới hạn số lượng yêu cầu cho trình cân bằng tải proxy TCP trong Cloud Armor
- Cách thêm chính sách bảo mật vào dịch vụ phụ trợ cân bằng tải TCP/SSL
Bạn cần có
- Kiến thức cơ bản về Google Compute Engine ( lớp học lập trình)
- Kiến thức cơ bản về mạng và TCP/IP
- Kiến thức cơ bản về dòng lệnh Unix/Linux
- Bạn sẽ thấy hữu ích khi hoàn thành phần hướng dẫn về kết nối mạng trong GCP thông qua bài viết Kết nối mạng trong Google Cloud
2. Yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
Lưu ý: Bạn có thể dễ dàng truy cập vào Cloud Console bằng cách ghi nhớ URL của Cloud Console, đó là console.cloud.google.com.
Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Mã này sẽ được đề cập sau trong lớp học lập trình này với tên PROJECT_ID.
Lưu ý: Nếu đang sử dụng tài khoản Gmail, bạn có thể đặt vị trí mặc định thành Không có tổ chức nào. Nếu bạn đang sử dụng tài khoản Google Workspace, hãy chọn một vị trí phù hợp với tổ chức của bạn.
- Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Trong Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:
Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.
Trước khi bắt đầu
Bên trong Cloud Shell, hãy đảm bảo rằng bạn thiết lập mã dự án
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Bật API
Bật tất cả dịch vụ cần thiết
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Tạo các dịch vụ phụ trợ
Tạo 2 thực thể như sau – Tạo example1-b1 ở vùng us-central1-b
gcloud compute instances create vm-1-b1 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Tạo thực thể 1-b2 trong vùng us-central1-b
gcloud compute instances create vm-1-b2 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Tạo một nhóm thực thể vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Tạo một cổng được đặt tên cho nhóm thực thể. Đối với phòng thí nghiệm này, chúng tôi sẽ sử dụng cổng 110
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Thêm các thực thể vào nhóm thực thể
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Định cấu hình trình cân bằng tải
Tiếp theo, chúng ta sẽ tạo một quy trình kiểm tra tình trạng.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Tạo dịch vụ phụ trợ
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
Thêm nhóm thực thể vào dịch vụ phụ trợ
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
Định cấu hình proxy TCP mục tiêu
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Đặt trước địa chỉ IPv4 tĩnh trên toàn cầu
Bạn sẽ dùng địa chỉ IP này để kết nối với dịch vụ cân bằng tải.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Định cấu hình quy tắc chuyển tiếp chung cho địa chỉ IP LB.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. Tạo quy tắc tường lửa cho trình cân bằng tải proxy TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Sau khi tạo trình cân bằng tải, hãy kiểm tra trình cân bằng đó bằng lệnh sau
Curl LB_IP:110
Tiếp theo, hãy tạo máy ảo để xác thực việc từ chối truy cập vào LB
Bạn nên tạo 2 phiên bản, mỗi phiên bản có một địa chỉ IP công khai và được đặt tên là test-server1 và test-server2
6. Tạo một chính sách bảo mật trong Cloud Armor
Trong phần này, bạn sẽ tạo một chính sách bảo mật phụ trợ và 2 quy tắc trong chính sách đó trong Cloud Armor.
Quy tắc đầu tiên sẽ từ chối một nhóm IP giới hạn truy cập Trình cân bằng tải TCP bằng cách thiết lập chính sách bảo mật để từ chối một số IP nhất định và quy tắc thứ hai sẽ thực hiện giới hạn tốc độ.
- Trong Cloud Shell(tham khảo phần "Bắt đầu Cloud Shell" trong phần "Thiết lập và yêu cầu" để xem hướng dẫn về cách sử dụng Cloud Shell), hãy tạo một chính sách bảo mật dịch vụ phụ trợ có tên là rate-limit-and-deny-tcp như sau
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
Thêm quy tắc vào Chính sách bảo mật
Tiếp theo, hãy thêm một quy tắc trong danh sách từ chối vào chính sách Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
Thêm một quy tắc giới hạn số lượng yêu cầu vào chính sách bảo mật của Cloud Armor "rate-limit-and-deny-tcp"
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
Đính kèm chính sách vào dịch vụ phụ trợ Proxy của TCP:
Chạy lệnh sau để đảm bảo rằng chính sách bảo mật được đính kèm vào dịch vụ phụ trợ Proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Bật tính năng ghi nhật ký trên Trình cân bằng tải proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Xác thực quy tắc về danh sách từ chối
Xác thực quy tắc danh sách từ chối bằng cách đăng nhập vào máy chủ kiểm thử có IP được chỉ định trong quy tắc danh sách từ chối và chạy lệnh sau
Curl LB_IP:110
Các yêu cầu tức thì có thể đưa ra phản hồi từ LB, nhưng hãy đợi cho đến khi yêu cầu curl bị từ chối hoặc bị huỷ, sau đó hãy xem nhật ký trong Cloud Logging để xác minh mục nhập nhật ký cho quy tắc từ chối ip đang được kích hoạt.
Chuyển đến phần Ghi nhật ký đám mây và trong phần Tài nguyên, hãy chọn loại tài nguyên là "tcp_ssl_proxy_rules" và đặt đích phụ trợ là "my-tcp-lb".
Với các tài nguyên đã xác định để lọc, chúng ta có thể xác thực quy tắc từ chối ip có hiệu lực từ giá trị ƯU TIÊN là 1000 trong mục nhập nhật ký và thao tác được định cấu hình "DENY" có hiệu lực vì cả hai đều được hướng dẫn trong quy tắc từ chối và IP bị từ chối như minh hoạ dưới đây
8. Xác thực quy tắc giới hạn số lượng yêu cầu
Kiểm tra để xác thực rằng quy tắc giới hạn số lượng yêu cầu đang có hiệu lực bằng cách gửi nhiều yêu cầu trong một khoảng thời gian ngắn vượt quá ngưỡng đã xác định (5 yêu cầu mỗi phút).
Sau khi hoàn tất, hãy nhấp vào nhật ký xem trong dịch vụ Cloud Armor để chuyển đến phần ghi nhật ký trên đám mây. Tại đây, bạn có thể lọc nhật ký theo trình cân bằng tải để xem nhật ký của Cloud Armor khi có dữ liệu.
Mục nhập giới hạn số lượng yêu cầu phải giống như ảnh chụp màn hình dưới đây. Chúng tôi có thể xác thực quy tắc giới hạn số lượng yêu cầu có hiệu lực từ giá trị PRIORITY là 3.000 trong mục nhập nhật ký và từ thao tác được định cấu hình, thao tác "BAN NHẬP THEO TỶ LỆ" có hiệu lực theo hướng dẫn trong quy tắc giới hạn số lượng yêu cầu.
9. Dọn dẹp môi trường
Hãy nhớ dọn dẹp cơ sở hạ tầng đã tạo để tránh chi phí cho cơ sở hạ tầng không sử dụng.
Cách nhanh nhất là xoá toàn bộ Dự án trong GCP để đảm bảo không còn tài nguyên nào đang lơ lửng mà bạn không giám sát.Tuy nhiên, hãy xoá từng tài nguyên đó bằng các lệnh sau
Trình cân bằng tải Proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Nhóm thực thể
gcloud compute instance-groups unmanaged delete vm-ig1
Đã tạo 2 thực thể máy ảo thử nghiệm
gcloud compute instances delete Instance_name --zone=instance_zone
Dịch vụ phụ trợ
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Các quy tắc của Cloud Armor trong chính sách
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
Chính sách bảo mật của Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp