[DDoS大作戰] BeyondCorp實作 – 設定 Cloud IAP 完全封鎖外部異常流量

[DDoS大作戰] BeyondCorp實作 – 設定 Cloud IAP 完全封鎖外部異常流量

上一回教大家使用 Cloud Armor 阻擋 DDoS攻擊,已經可以成功阻擋來自奇奇怪怪國家的駭客,這一次要分享更猛的應用 Cloud IAP。

Cloud IAP 是在 BeyondCorp 框架底下的一個重要實做 (BeyondCorp介紹),它可以做到連線到網站時就有身分驗證,接下來會確認使用者的情境,例如從哪一個IP連線、從哪一個國家、手機有沒有設密碼等等,最後再放行到應用程式。它真的管到海邊,如果公司連裝置都納入管理 (Google Workspace/Cloud Identity的裝置管理),那就是所有 BeyondCorp 的功能都實現了。

Cloud IAP 可管理的範圍
Cloud IAP 可管理的範圍

等於光是簡單造訪一個網站就會碰到重重關卡,把DDoS攻擊遠遠拋開,真的是非常強悍的功能!

我們現在就來按照步驟來設定吧!我是參考這份文件來做的:https://cloud.google.com/iap/docs/tutorial-gce

建立新的 VPC 網路 (Virtual Private Cloud Network)

先建立一個 VPC 網路 ,為什麼呢?因為它會影響到原有的主機網路環境,所以把你的測試環境獨立出來,才不會互相影響。

先建立一個 VPC 網路
先建立一個 VPC 網路

建立執行個體範本 (Instance Template)

因為要有一個測試網頁,所以要先把程式放在範本的 startup scripts裡面,這樣它開機時會自動把網頁寫好:

建立執行個體範本
建立執行個體範本

設定存取權限

建立執行個體範本-存取權限
建立執行個體範本-存取權限

接下來要貼上範例程式碼到 startup scripts (程式碼也是來自同一份文件)

建立執行個體範本-startup-scripts
建立執行個體範本-startup-scripts

都做完後按下「建立」。

建立執行個體群組 (Instance Group)

接下來建立執行個體群組,就是用那範本來開機器的意思。

建立執行個體群組,設定 Zone
建立執行個體群組,設定 Zone

設定 AutoScale,本範例最小開3台,最多開10台。

建立執行個體群組,設定 Autoscale
建立執行個體群組,設定 Autoscale

設定網域取得憑證

接下來比較麻煩,要設定網域去拿到憑證,我們要先開一台機器去取得憑證:

照文件說明,選 Debian 9 ,其他規格任選:

開一台機器去取得憑證,使用 Debian 9
開一台機器去取得憑證,使用 Debian 9

OK的話按下建立。

記下Certbot的IP位址:(該IP已釋放掉, 機器也刪了,所以大家經看不到網站了 XD)

記下Certbot的IP位址
記下Certbot的IP位址

我目前的網域是在 Godaddy 代管,去設定一下(我是用子網域):

設定VM IP到DNS
設定VM IP到DNS

接下來 SSH 進去那台機器,輸入以下指令

mkdir web
  cd web
  echo “Hello” > index.html
  sudo busybox httpd -v -f

輸入測試網頁指令
輸入測試網頁指令

確認一下網頁是否正常

確認一下網頁是否正常
確認一下網頁是否正常

開始建立憑證,在VM輸入以下指令:

sudo pkill busybox

sudo apt-get install -y certbot

sudo certbot certonly –standalone -d iap.yourdomain.com

安裝畫面:

certbot安裝畫面
certbot安裝畫面

建立憑證(輸入網域):

建立憑證(輸入網域)
建立憑證(輸入網域)

恭喜完成!

憑證建立完成
憑證建立完成

加入憑證,輸入以下指令:

sudo su

cd /etc/letsencrypt/live/iap.yourdomain.com

gcloud compute ssl-certificates create my-cert –certificate=fullchain.pem –private-key=privkey.pem

真的有這目錄好神奇:

進入憑證目錄
進入憑證目錄

建立成功:

憑證確認建立成功
憑證確認建立成功

建立負載平衡 HTTP(S) Load Balancer

選HTTP(S) Load Balancer,接收 internet 進來的流量:

建立HTTP(S) Load Balancer
建立HTTP(S) Load Balancer

接收 internet 進來的流量到Load Balancer

接收 internet 進來的流量到Load Balancer
接收 internet 進來的流量到Load Balancer

接下來建立後端服務,讓Load Balancer導流量到VM

接下來建立後端服務
接下來建立後端服務

如果你是照 Google 提供的文件操作,Backend Name 不能亂打,會錯,要打 my-backend-service:

後端服務必須輸入my-backend-service
後端服務必須輸入my-backend-service

設定 Health Check

設定 Health Check
設定 Health Check

Host and path rules 保持預設

Host and path rules 保持預設
Host and path rules 保持預設

再來前端保留一個靜態 IP

前端保留一個靜態 IP
前端保留一個靜態 IP

確認前端設定

確認前端設定
確認前端設定

確認一下,無誤就按下 Create

確認前端設定-2
確認前端設定-2

等2分鐘 Load Balancer 建立後,把 LB 的 IP 位址複製起來:

把 LB 的 IP 位址複製起來
把 LB 的 IP 位址複製起來

改到原本 DNS 設的 IP:

改到原本 DNS 設的 IP
改到原本 DNS 設的 IP

需要等個幾分鐘,讓 DNS 同步出來。

接下來開瀏覽器連線一下,這樣算成功!(不要懷疑)

開瀏覽器連線一下,這樣算成功!(不要懷疑)
開瀏覽器連線一下,這樣算成功!(不要懷疑)

根據 Google 的文件是這樣說的:

Google的502錯誤說明
Google的502錯誤說明

好,即將要設 Cloud IAP 本人了,要先重開 instance group:

即將要設 Cloud IAP 本人了,要先重開 instance group
即將要設 Cloud IAP 本人了,要先重開 instance group

選 Restart,這樣它會把整個 instance group 所有機器重開。

restart VM Group
restart VM Group

設定允許 Cloud IAP 的防火牆規則

設定 IAP 之前,要先設定允許 IAP IP 位址的防火牆規則,提供最重要的 IP 範圍如下:

設定 IAP 之前,要先設定允許 IAP IP 位址的防火牆規則
設定 IAP 之前,要先設定允許 IAP IP 位址的防火牆規則

設定 Cloud IAP

前面設了一大堆,終於進入 IAP 的設定頁面了!

進入 Cloud IAP 的設定頁面
進入 Cloud IAP 的設定頁面

在 HTTPS RESOURCES 底下看到一個 my-backend-service ,就是我們在設定 Load Balance 後端服務時所設定的名稱。

啟動 IAP,把這個開關打開:

開啟 my-backend-service 的 IAP 開關
開啟 my-backend-service 的 IAP 開關

IAP 啟動確認畫面

IAP啟動確認畫面
IAP啟動確認畫面

看到 Warning 點進去,查看 IAP 建立的警告訊息:

查看IAP建立的警告訊息
查看IAP建立的警告訊息

它有說這條規則會繞過 Cloud IAP, 所以要移除是對的,因為之前是要先確認 80 port 能看得到網頁,現在移除是沒問題的因為之後就從 IAP 進去VM。(所以最前面才強調你要用不同的 VPC,因為 Allow HTTP的規則一刪,如果沒有 IAP 的VM 完全不能存取了)

現在就刪除防牆規則

刪除防火牆規則
刪除防火牆規則

打開 Show Info Panel設定 Cloud IAP 使用者權限:

打開 Show Info Panel設定Cloud IAP使用者權限
打開 Show Info Panel設定Cloud IAP使用者權限

授權能造訪網頁的使用者,提供 IAP-secured Web App User

授權能造訪網頁的使用者,提供 IAP-secured Web App User。
授權能造訪網頁的使用者,提供 IAP-secured Web App User

設定存取層級 (Access Level)

選好之後還有 Access Level

設定存取層級 (Access Level)
設定存取層級 (Access Level)

可以先到這裡設定

設定存取層級 (Access Level) 的路徑
設定存取層級 (Access Level) 的路徑

各位可以看到,我有一個 “test” 的 Access Level,是只允許單一IP連線;而”test2″則是允許來自台灣的IP都可以連線:

目前設定好的 Access Level
目前設定好的 Access Level

再回來 IAP 授權可存取的User,這裡指的是有 Google Workspace / Cloud Identity 的使用者 (也能用 Gmail 帳號),如果使用者太多,不方便一個一個授權的話,也可以用群組來授權。

還可以發通知信給 User,好貼心!

授權可存取的User,還能夠發通知信
授權可存取的User,還能夠發通知信

這是信件內容,代表使用者可以造訪這個網站了

Cloud IAP 授權的信件內容,代表使用者可以造訪這個網站了
Cloud IAP 授權的信件內容,代表使用者可以造訪這個網站了

當我在瀏覽器輸入 iap.yourdomain.com ,會看到:

透過 Cloud IAP 進入網站會看到的畫面
透過 Cloud IAP 進入網站會看到的畫面

如果我的帳號有啟用兩步驟驗證 (Google Workspace管理員可以強制啟用喔),會看到像這樣,完全不用擔心帳號被盜用:

使用 Cloud IAP 能搭配兩步驟驗證
使用 Cloud IAP 能搭配兩步驟驗證

驗證成功會看到網頁,代表 Cloud IAP 設定成功。

驗證成功會看到網頁,代表 Cloud IAP 設定成功
驗證成功會看到網頁,代表 Cloud IAP 設定成功

終於完成了,步驟真的有點多啊~但是只要設定好,之後就不怕網路上各種奇怪的流量了!

Aaron Lee

超過7年的 Google Cloud 經驗,服務過上百家 Google Workspace 與 GCP 客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。

發佈留言