目標
在本教學課程中,您將瞭解如何執行下列操作:
- 建立 Compute Engine 執行個體範本與代管執行個體群組 (MIG)。
- 取得網域名稱與憑證。
- 使用憑證建立 HTTPS 負載平衡器。
- 啟用 IAP。
- 測試 IAP 是否正常運作。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- Compute Engine
- 4 個虛擬機器 (VM)
- 建立人脈
- 全域負載平衡器轉送規則
- 輸入流量
如需以預測使用量為基礎的預估費用,請參閱這個 Pricing Calculator。
事前準備
在開始本教學課程之前,您需要執行下列操作:
步驟 1:建立 Compute Engine 範本
在 Google Cloud 控制台中,前往「Compute Engine」>「Create an instance template」(建立執行個體範本) 頁面,並選取您要在其中建立範本的專案。
前往「CREATE AN INSTANCE TEMPLATE」(建立執行個體範本) 頁面
除下列選項以外,均使用預設值:
- 機器類型:
- micro (f1-micro)
- 存取權範圍:
- 針對各個 API 設定存取權
- Compute Engine:唯讀
- 防火牆:
- 允許 HTTP 流量
- 在「Management」(管理) 區段的「Automation」(自動) >「Startup script」(開機指令碼) 下,複製並貼上下列指令碼:
更新完值之後,按一下「Create」(建立),建立範本。
步驟 2:建立代管執行個體群組
在 Google Cloud 控制台中,前往「Compute Engine」>「Create a new instance group」(建立新的執行個體群組) 頁面,並選取您要在其中建立 Managed Instance Group 的專案。
前往「CREATE AN INSTANCE GROUP」(建立執行個體群組) 頁面
除下列選項以外,均使用預設值:
- Name (名稱):my-managed-instance-group
- Location (位置):多區域
- Instance template (執行個體範本):選取您在步驟 1 中建立的執行個體範本
- 執行個體數量:如要變更執行個體數量,您必須先停用自動調度資源功能。
- Autoscaling mode (自動調度資源模式):不要自動調整資源配置
健康狀態檢查:選取「Create a health check」(建立健康狀態檢查),然後輸入下列值:
- Name (名稱):my-health-check
- Protocol (通訊協定):HTTP
點選「儲存並繼續」,即可使用新的健康狀態檢查。
更新完值之後,按一下 [Create] (建立),建立代管執行個體群組 (MIG)。
步驟 3:取得網域名稱與憑證
如要將負載平衡器與 HTTPS 流量搭配使用,您需要網域名稱與已簽署的憑證。您可以在 Google Domains 中註冊網域,也可以使用您選擇的網域註冊商。請先註冊網域,再繼續本指南。
設定您的憑證
建立可向使用者識別網站的憑證。如要瞭解如何建立憑證,請參閱「使用 Google 代管的 SSL 憑證」。
您的 CA 必須驗證您是否擁有已註冊的網域名稱。在以下步驟中,您將建立 VM 來使用 CA 驗證網域。
建立 VM 以驗證您的網域擁有權
在 Google Cloud 控制台中,依序前往「Compute Engine」>「Create an instance」(建立執行個體) 頁面。
前往「CREATE AN INSTANCE」(建立執行個體) 頁面
除下列選項以外,均使用預設值:
- Name (名稱):certbot-vm
- Machine type (機器類型):micro (f1-micro)
- 存取權範圍:
- 針對各個 API 設定存取權
- Compute Engine:讀取/寫入
- 開機磁碟映像檔:
- Debian GNU/Linux 9 (stretch)
- 防火牆:
- 允許 HTTP 流量
- 允許 HTTPS 流量
更新完值之後,按一下 [Create] (建立),建立 VM 執行個體。請記下您剛建立的 VM 外部 IP 位址,在下一步中將會用到。
將網域設定為指向 VM
如要將網域設定為指向 VM,請按照下列步驟設定 A 記錄:
- 登入網域代管商提供給您的網域帳戶。
- 尋找頁面以更新網域的 DNS 記錄。這個頁面可能叫做「DNS Management」(DNS 管理)、「Name Server Management」(名稱伺服器管理) 或「Advanced Settings」(進階設定)。
- 將您的 A 記錄變更為下列值:
- Name/Host/Alias (名稱/主機/別名):@
- Value (值):您在前面建立以驗證網域擁有權的 VM 外部 IP 位址。
- TTL (存留時間):註冊商的預設值,或 86400 (一天)。
- 等待 DNS 記錄更新。您新增的記錄最多需要一天時間才能傳播完畢。
詳情請參閱關於 A 記錄一文。
測試伺服器
如要測試您的伺服器是否正常運作,請按照下列步驟操作:
在 Google Cloud 控制台中,依序前往「Compute Engine」>「VM 執行個體」頁面。
前往「VM 執行個體」頁面在「certbot-vm」的「Connect」(連線) 下,點選 [SSH]。
執行下列指令,在 VM 上執行較小的網路伺服器:
mkdir web cd web echo "Hello" > index.html sudo busybox httpd -v -f
在網路瀏覽器中,前往您之前註冊的網域名稱。網路瀏覽器應會顯示
Hello
,且 SSH 工作階段應會顯示包含... response:200
的訊息。若並非如此,請等待幾分鐘,然後重複這個步驟。在測試成功之後,按下 Ctrl+C 來停止網路伺服器。
建立憑證
如要建立憑證,請在 VM 上執行下列指令以註冊 Let's Encrypt,其中 YOUR_DOMAIN 是您的網域名稱,且不包括通訊協定:
sudo pkill busybox sudo apt-get install -y certbot sudo certbot certonly --standalone -d YOUR-DOMAIN
在這個過程中,Let's Encrypt 可能會要求您提供電子郵件地址,使其可以在憑證即將到期時傳送提醒 (預設為核發後的 3 個月)。您也必須同意 Let's Encrypt 設定的《服務條款》。
成功註冊之後,您應該會看到如下訊息:Congratulations! Your certificate and chain have been saved at...
將憑證新增至專案
如要將憑證新增至您的專案,請在 VM 上執行下列指令:
sudo su cd /etc/letsencrypt/live/YOUR_DOMAIN gcloud compute ssl-certificates create my-cert --certificate=fullchain.pem --private-key=privkey.pem
成功建立憑證後,您應該會看到類似以下的訊息:Created
[https://www.googleapis.com/compute/v1/projects/example-project/global/sslCertificates/my-cert]
請先關閉 SSH 工作階段再繼續。
步驟 4:建立負載平衡器
在開始這個步驟之前,請確保您已關閉在上一步中啟動的 SSH 工作階段。若已準備好,請按照下列步驟建立負載平衡器:
在 Google Cloud 控制台中,前往「Network Services」>「Create a load balancer」頁面,並選取您想為其建立負載平衡器的專案。
前往「Create a load balancer」(建立負載平衡器) 頁面在「HTTP(S) 負載平衡」下方,按一下「開始設定」。
選取「從網際網路到我的 VM」。
在顯示的「New external Application Load Balancer」(新增外部應用程式負載平衡器) 頁面中,輸入負載平衡器的「Name」(名稱)。
點選 [Backend configuration] (後端設定),然後選取 [Backend services] (後端服務) > [Create a backend service] (建立後端服務)。
在「Create back-end service」(建立後端服務) 面板的「Name」(名稱) 方塊中輸入
my-backend-service
。
在「New backend」(新增後端) 下,除下列選項以外,均使用預設值:
- Instance group (執行個體群組):my-managed-instance-group
在「Health check」(健康狀態檢查) 下方,選取 [my-health-check]。
更新完值之後,按一下 [Create] (建立)。「New HTTP(S) load balancer」(新增 HTTP(S) 負載平衡器) 面板會重新顯示。
點選 [Host and path rules] (主機與路徑規則),載入預設值。您不需要新增任何規則。
按一下 [Frontend configuration] (前端設定)。除下列選項以外,均使用預設值:
- Protocol (通訊協定):HTTPS
- IP address (IP 位址):按一下「Create IP address」(建立 IP 位址)
- 輸入「Name」(名稱),以與新的靜態 IP 位址建立關聯。
- 按一下 [Reserve] (預約),預約靜態 IP 位址。
- Certificate (憑證):my-cert
輸入完前端設定值之後,點選「Done」(完成)。
按一下「建立」,「Load balancing」(負載平衡) 頁面會顯示出來,且您的新負載平衡器將建立在負載平衡器清單中。
在 Google Cloud 主控台完成建立新負載平衡器之後,按一下負載平衡器的名稱,並記下「Details」(詳細資料) >「Frontend」(前端) 下方的外部 IP 位址,在下一步中將會用到。
將網域設定為指向負載平衡器
如要將網域設定為指向負載平衡器,請按照下列步驟設定 A 記錄:
- 登入網域代管商提供給您的網域帳戶。
- 尋找頁面以更新網域的 DNS 記錄。這個頁面可能叫做「DNS Management」(DNS 管理)、「Name Server Management」(名稱伺服器管理) 或「Advanced Settings」(進階設定)。
- 將您的 A 記錄變更為下列值:
- Name/Host/Alias (名稱/主機/別名):@
- Value (值):您在上文建立的負載平衡器外部 IP 位址。請勿在 DNS 記錄中加入通訊埠
:443
。 - TTL (存留時間):註冊商的預設值,或 86400 (一天)。
- 等待 DNS 記錄更新。您剛新增的記錄最多需要一天時間才能傳播完畢。
- 如要測試負載平衡器,請使用網路瀏覽器前往採用
https://
通訊協定的網域。- 如果負載平衡器尚未設定,您會看到「HTTP 502」錯誤。
- 當負載平衡器準備好時,您會看到「Unauthorized request」(要求未獲授權)。
詳情請參閱關於 A 記錄一文。
重新啟動 VM
您必須按照下列步驟在 MIG 中重新啟動 VM,才能從 IAP 正確驗證要求:
- 在 Google Cloud 控制台中,前往「Compute Engine」>「Instance groups」(執行個體群組) 頁面。
前往「Instance Groups」(執行個體群組) 頁面 - 按一下 [my-managed-instance-group]。
- 在顯示的執行個體群組詳細資料頂端,點選 [Rolling Restart/Replace] (輪動式重新啟動/取代)。
- 在顯示的「Restart/replace instances of my-managed-instance-group」(重新啟動/取代 my-managed-instance-group 的執行個體) 頁面中,設定下列值:
- Operation (作業):重新啟動
- Maximum unavailable (無法使用的執行個體數量上限):3 個執行個體 (共 3 個執行個體)
- Minimum wait time (最短等待時間):0 秒
- 更新完值之後,按一下 [Restart] (重新啟動)。
步驟 5:設定 IAP
設定防火牆
接下來,您將設定防火牆以禁止存取基礎 VM,並僅允許透過 IAP 存取:
- 前往 Google Cloud 控制台的「VPC network」(虛擬私有雲網路) >「Firewall rules」(防火牆規則)。
前往「FIREWALL RULES」(防火牆規則) 頁面 - 勾選下列規則旁的核取方塊:
- default-allow-http
- default-allow-https
- default-allow-internal
- 點選「刪除」。
- 點選「Create firewall rule」(建立防火牆規則),並設定下列值:
- Name (名稱):allow-iap-traffic
- Targets (目標):網路中的所有執行個體
- 來源 IP 範圍 (在方塊中貼上每個值之後,按下 Enter 鍵)。負載平衡器與後端通訊時,必須先允許 IP 範圍,因此 IP 範圍會列入許可清單。
- 130.211.0.0/22
- 35.191.0.0/16
- 通訊協定和通訊埠:
- 指定的通訊協定和通訊埠
- tcp:80
- 更新完值之後,按一下 [Create] (建立)。
設定 IAP
如要為專案設定 IAP,請按照下列步驟操作:
- 在 Google Cloud 控制台中,前往「Security」(安全性) >「Identity-Aware Proxy」頁面,然後選取要啟用 IAP 的專案。
前往「Identity-Aware Proxy」頁面 如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定:
-
前往 OAuth 同意畫面。
設定同意畫面 - 在「Support email」(支援電子郵件) 下方,選取您想顯示為公開聯絡人的電子郵件地址。電子郵件地址必須屬於目前登入的使用者帳戶,或是目前登入使用者擔任管理員或擁有者的 Google 群組。
- 輸入您想顯示的「Application name」(應用程式名稱)。
- 新增您想要的任何選填詳細資料。
- 按一下 [儲存]。
如要稍後變更 OAuth 同意畫面上的資訊 (例如產品名稱或電子郵件地址),請重複上述步驟以設定同意畫面。
-
前往 OAuth 同意畫面。
在「my-backend-service」旁邊,
在隨即顯示的「Turn on IAP」視窗中,選取「I have read the configuration requirements and configured my Compute Engine resource according to documentation」(我已詳閱設定規定,並按照文件的指示設定我的 Compute Engine 資源) 旁的核取方塊。
按一下 [開啟]。
將主體新增至存取清單
接下來,您會將主體新增至專案的 IAP 存取清單。
- 在「IAM & admin」(IAM 與管理員) >「Identity-Aware Proxy」右側的「Access」(存取權) 區段,按一下「Add」(新增)。
- 輸入您要授予存取權的主體 (包括您自己),然後指派「受 IAP 保護的網路應用程式使用者」角色給這些主體。主體可以是:
- Google 帳戶:user@gmail.com
- Google 群組:admins@googlegroups.com
- 服務帳戶:server@example.gserviceaccount.com
- Google Workspace 網域:example.com
步驟 6:測試 IAP
如要測試 IAP 是否正常運作,請按照下列步驟操作:
- 在網路瀏覽器中,前往您的網域。
- 如果您看到「Unauthorized request」(要求未獲授權),請在幾分鐘之後再試一次。
- 看到 Google 登入畫面時,使用您在上一步中為其提供存取權的 Google 帳戶登入。
- 您應該會看到類似以下的訊息:「Hi, user@example.com. I am my-managed-instance-group-29z6.」
- 請重新整理頁面,您的瀏覽器應會顯示代管執行個體群組中的 3 個機器的名稱。這是負載平衡器,可跨群組中的 VM 分配流量。
恭喜!您已使用 IAP 成功啟用負載平衡服務。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
完成為 Compute Engine 設定 IAP 後,您可以清除在 Google Cloud 上建立的資源,這樣日後就不需再為這些資源付費。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
如要刪除專案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除執行個體
如要刪除 Compute Engine 執行個體:
- In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.
刪除預設網路的防火牆規則
刪除防火牆規則:
- In the Google Cloud console, go to the Firewall page.
- Select the checkbox for the firewall rule that you want to delete.
- To delete the firewall rule, click Delete.