當年 Cloud Armor 推出之後,功能比較陽春,但 Google 一直有在增加更多功能上去,尤其是大家最想要的,阻擋「某些國家」的 IP 流量,這次就來試試看吧!
前提條件:必須要有 instance group 搭配 Load Balance 和 Backend Service,才能設定 Cloud Armor 喔!
一、環境準備
1.建立 instance template 做為等等建 group 的範本
取名 apache-web-page,作業系統用 Debian,機器規格可選 f1-micro, g1-small 等等小台機器
最重要在這裡 startup-script,表示機器一建好就自動裝 apache和寫一張初始網頁:

語法如下:
#! /bin/bash
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World</h1>
<p>This page was created from a simple startup script!</p>
</body></html>
EOF
2. template 建好後,就可以建立一組 instance group ,取名為 aaron-instance-group
我有設定 Auto Scale 主機數量最小一台,最多十台,本範例是用不到,但如果你的主機流量時大時小的話,設定 Auto Scale會比較好喔!

建立完成
目前已有一台主機
3. 並且確認網頁可正常運作
4. 新增 Load Balance,取得 IP 位址如下,細節就略過了,直接提供摘要如下:
5. 接下來在香港、美國、歐洲各開一台機器
6. 然後 SSH 進去主機,做 curl http://[Load_Balance_IP]
確認可以訪問網頁,看到 Hello World
香港主機
美國主機
歐洲主機
二、設定 Cloud Armor
1. Network Security => Cloud Armor
2. Create Policy
3.先取名,範例為 allow-tw-deny-hk-eu-us
雖然有 default rule action 設為 Allow,代表原本的 rule 套用之後,其餘的流量會套用 default rule,但為了保險起見,還是會先設定一定要允許的流量。
4.先Allow 台灣,因為基本模式只有 IP 範圍,所以要用進階模式。
語法
origin.region_code == ‘TW’
其他國家的 Code 可以查詢這裡:
https://en.wikipedia.org/wiki/ISO_3166-2
5. 設 Allow 以及優先順序 (Priority) 設定為 100,數字越小越優先。
6. Done 之後,再加另一條 Rule
7.規則語法如下,對了歐洲那台是德國主機,要設 DE,不要設 EU,會出錯:
origin.region_code == ‘HK’ ||
origin.region_code == ‘US’ ||
origin.region_code == ‘DE’
注意 ‘||’ 是 “OR” 的意思,代表這三個國家都要套用,如果沒有’||’,會有語法錯誤。
8. 設定 Deny,並且優先順序設為 200,沒問題之後按 Done。
9.再按 Next Step
10. 現在要把 這個 Policy 套用到目標主機,就是最前面建好的 Load Balance和 Backend。
11. 最後按下 Create Policy,可以看到整個規則如下:
但注意,不會立刻生效,大概等5分鐘左右。
三、測試 Cloud Armor 效果
1. 確認主機是香港 IP
2. 確認原本是看到 Hello World,現在碰到 403 錯誤訊息
3. 美國主機
4. 確認原本是看到 Hello World,現在碰到 403 錯誤訊息
5. 再來是德國主機
6. 確認原本是看到 Hello World,現在碰到 403 錯誤訊息
代表 Cloud Armor 有阻擋成功。
7. 再用台灣的桌機確認不是網站問題造成 403 錯誤
台灣的桌機 IP
8. 直接用瀏覽器確認,網站是可以造訪的,並且允許台灣的主機訪問:
以上就是使用 Cloud Armor 設定阻擋其他國家 IP 的設定方式,希望可以幫助到大家喔!!
參考資料: Cloud Armor 的語法規則說明: https://cloud.google.com/armor/docs/rules-language-reference Cloud Armor 可直接引用 Cloudflare, Imperva 和 Fastly 的 IP list。 (Beta版): https://cloud.google.com/armor/docs/armor-named-ip |
歡迎直接留言討論,若有進一步的開發需求,再與我們聯繫。