文章段落
AD 帳號登入 GCP 的方法有哪些?除了直接將 AD 帳號資料同步到 GCP 外,其實也能透過 Active Directory Federation Services(ADFS) 來作為外部身分認證,在不移轉帳號資料的情況下登入 GCP 喔。一起來看看以下的教學吧。
為何要使用 Active Directory Federation Services(ADFS)?
在上篇文章中我們透過 Google Cloud Directory Sync(GCDS)與 Google Cloud Password Sync(GCPS)將 Active Directory(AD)中的帳戶資訊與密碼同步儲存到 Cloud Identity 中,透過這樣的方式,我們就能以 AD 帳號來管理公司的 GCP 服務。
像 GCPS 這樣的服務,對於要全面移轉到 GCP 的用戶而言是非常方便,然而更多數的用戶使用情境是希望能在維持公司內部系統的情況下去使用 GCP 服務,這樣一來將密碼也移轉出去的方式就顯得不是那麼合適,這時候我們就可以使用 Microsoft Active Directory Federation Services(ADFS)來做外部的認證機制,在透過 GCDS 同步帳戶資訊的情況下,從外部去驗證其用戶權限。
Active Directory Federation Services(ADFS)是什麼?
在上篇文章中我們提到了 AD 的建構與其作用,簡單的來說,我們可以把 AD 視為一個內部的帳戶資料庫。而這麼一個建置完整的帳戶系統,如果只能在內部使用那就太可惜了。於是乎,微軟便推出了 ADFS 服務,透過 ADFS 的 Single Sign On (SSO)機制,我們就能讓外部機構或是軟體服務以既有的 AD 帳戶作為驗證,獲取用戶資料。這樣一來,一套建成的用戶認證系統就可以支援廣泛應用,讓既有資料能具備高度的彈性。
什麼是 Single Sign-on(SSO)?
在資訊應用高速發展的現在,誰的瀏覽器不會同時開著數個平台,手機不會同時使用著多個應用程式呢?你能想像每開一個應用或進入一個網站服務就要輸入一次帳號密碼,然後過了一段半長不短的時間後,又會要求你要重新登入嗎?這樣的體驗應該會把人逼瘋吧。
這時候,透過 SSO 驗證機制就可以拯救我們的每一天。從字面意義上來想,我們只要透過單一的登入窗口,進行單一的身分驗證,就可以讓許多的服務共同來使用這個驗證結果,這就是 SSO 所扮演的角色。每當我們登入帳戶成功,我們便會獲得一個 SSO Token,我們可以透過傳遞這個 Token 來讓不同的服務能獲取用戶資訊並判斷其權限,從而能靠一次的帳戶登入來在不同服務間通行無阻。所以透過 ADFS 的 SSO 機制,我們就能把 AD 中的用戶資訊在驗證後打包出來給其他服務使用,很方便吧。
ADFS 是由哪些服務組成?
在前面講完了 ADFS 的基本功能後,我們來看一下其背後到底是由哪些服務所組成的。簡單來說,ADFS 的服務可以拆分成存放用戶資料的 AD 服務、依照 Request 讀取 AD 資料並封裝 Token 的 Federation 服務、為了保護 AD 資料而增加的中間層 Federation Server Proxy 服務、作為窗口接收 Request 並管理認證 Token 的網站伺服器。透過這些服務即可以讓用戶從外部網站進行第三方的認證程序。
ADFS 四大組成服務:
1. ADFS web 伺服器:用來管理回傳給外部認證用的 Token 與 cookie。
2. Federation 伺服器代理服務:接收外部 Request 並傳送給 Federation 服務。
3. Federation 服務:處理外部 Request 並處理、回傳包含用戶資訊的 Token。
4. Active Directory 服務:用來存放用戶資料並被 ADFS 所使用。
ADFS SSO 認證的流程是什麼?
當我們今天希望使用某個服務的時候,我們會對服務的供應商(Service Provider, SP)發出一個進入的請求,而今天這個 SP 使用了 ADFS 作為 SSO 認證的工具,所以他會來看看我們有沒有這個從 ADFS 獲取的 Token。而因為是第一次登入,我們手上並沒有這個 Token,於是乎 SP 便把我們的請求轉給了 ADFS 。
ADFS 會要求我們輸入帳號與密碼來驗證是否具有資料的存取權,如果有的話,ADFS 會基於預先設定好的宣言規則(Claim rule)從 AD 獲取對應的用戶資料來轉換給到 SP,並加密成 Token 來發行(Issue)給我們,我們就可以把這個 Token 給到 SP,進而獲取進入的許可。以上就是一個完整的 ADFS 外部認證流程。
設定 ADFS 作為 Active Directory 至 Cloud Identity 之 SSO 認證機制
在了解了 ADFS 是什麼並且知道其背後運作的邏輯後,我們接下來就要試著在我們既有的 AD 主機上安裝並設置 ADFS 服務,並且設置與 Cloud Identity 之間的認證機制,從而讓我們能將 Cloud Identity 的登入作業轉址到 ADFS 的登入頁面,達到在不儲存 AD 密碼的情況下,登入 Cloud Identity 的目的。
請先準備以下資源:
1. 一個用於 A Record 的 GCE External IP 的有效網域名稱。
2. 一個對應網域名稱的 SSL 加密憑證,需要將檔案格式轉換爲 .pfx 格式。
3. 一個 GCP 帳戶(用來操作以下實作內容)。
安裝並設置 ADFS 以連結 AD 帳戶系統
首先我們要在現有的 AD 主機上安裝 ADFS 服務,還沒有建置的朋友可以參考《AD 帳號登入 GCP 方法攻略!用 Cloud Identity 與 GCDS/PS 移轉帳號資料》這篇,如同安裝 AD 的流程,我們一樣透過 Server Manager 來進行快速的安裝作業,以下列出重點步驟:
ADFS 服務安裝步驟:
1. 從 Quick Start 介面點選 Add roles and features 開啟安裝選單。
2. 快速點選 Next 鍵直到 Server Roles 頁面勾選 Active Directory Federation Services。
3. 連續點擊 Next 鍵直到完成設置,會在下方服務列表出現 AD FS 服務,代表安裝完成。
接下來我們要來設置 ADFS 伺服器。首先點選 Server Manager 左側的 AD FS 分頁標籤,並於警示條右側點選 More… 連結來開啟任務清單,而後點選 Configure the federation service on this server. 連結來開啟設置介面。開啟後於 Welcome 視窗直接按下 Next 鍵來開始設置 ADFS 服務。
在這個設置中,要連結 ADFS 與 AD 服務,我們需要給予 ADFS 具有讀取 AD 資料的管理員權限帳戶,也就是之前創建 Domain Controller 時由系統管理員提升的 Administrator 帳戶,使 ADFS 能從 AD 獲取帳戶資訊。而後我們需要將事先準備好的網域加密憑證(.pfx格式)設置為外部登入窗口網頁(HTTPS)使用,並確認網域名稱與網頁名稱,這是之後我們做外部登入的時候,會從 Cloud Identity 導向的登入頁面顯示名稱。最後設置 ADFS 服務使用的 Service Account(這裡可以是前面使用的 Administrator 帳戶),即可完成設置。詳細步驟如下:
ADFS 服務設置步驟:
1. 切換至 Connect to AD DS 標籤頁,設置為當前 Domain Controller 管理帳號。
2. 切換至 Specify Service Properties 標籤頁,於 SSL Certificate 匯入 .pfx 格式憑證檔案。
3. 於 Federation Service Name 確認網域名稱,之後會用到。
4. 於 Federation Service Display Name 輸入登入頁面顯示的公司名稱。
5. 切換至 Specify Service Account 標籤頁,點選 Use an existing domain user account or group Managed Service Account,並點擊 Select… 鍵。
6. 於彈出視窗的 Select this object type 選擇 User or Service Account。
7. 於 From this location 選擇您的網域名稱。
8. 於 Enter the object name to select 輸入 Domain Controller 的帳號名稱。
9. 輸入 Domain Controller 密碼於 Account Password 欄位。
10. 於 Specify Database 標籤頁選擇 Create a database to store the Active Directory Federation Service configuration data.。
11. 連續點選 Next 鍵完成設置。
設置 Cloud Identity 的 Relying Party Trust 給 ADFS
要使用 ADFS 作為外部認證機制,我們需要為 SP 也就是我們的 Cloud Identity 創建 Relying Party Trust ,來指名 ADFS 將透過 SAML 2.0 WebSSO 協定傳輸對應之登入認證資料到受信任的端點(Cloud Identity)。而當我們透過 SSO 登入不同應用時,我們也需要為其設定單一的登出功能,才符合實際的應用需求,所以我們也要對這個 Trust 設置一個登出的端點(ADFS)。下面介紹細部的設定操作:
Cloud Identity Relying Party Trust 設置步驟:
1. 於 Server Manager 頁面左上角點選 Tools > AD FS Management。
2. 點選設定頁面右側的 Add Relying Party Trust… 連結。
3. 於 Welcome 標籤頁選擇 Claim aware。
4. 於 Select Data Source 標籤頁選擇 Enter data about the relying party manually。
5. 於 Specify Display Name 輸入 Trust 的名稱,例: GC Identity。
6. 於 Configure Certificate 標籤頁直接進行下一步,不需設置。
7. 於 Configure URL 標籤頁勾選 Enable support for the SAML 2.0 WebSSO protocol。
8. 於 Relying party SAML 2.0 SSO service URL 填入 https://www.google.com/a/Cloud Identity 公司網域名稱/acs。
9. 於 Configure Identifiers 標籤頁新增 google.com 與 google.com/a/Cloud Identity公司網域名稱。
10. 於 Choose Access Control Policy 標籤頁選擇 Permit everyone。
11. 於 Finish 標籤頁取消勾選 Configure claims issuance policy for this application。
ADFS 登出端點設置步驟:
12. 於 AD FS Management 頁面左側選擇 Relying Party Trusts 資料夾。
13. 右鍵點選剛剛創建的 Trust 並選擇 Properties。
14. 點選上方 Endpoints 標籤頁,並按下 Add SAML… 鍵。
15. 於彈出視窗 Endpoint type 選擇 SAML Logout。
16. 於 Binding 選擇 POST。
17. 於 Trusted URL 輸入 https://前面設定 ADFS 的 Federation Service Name/adfs/ls/?wa=wsignout1.0。
18. Trust 設定完成。
設置 Claim Issuance Policy
在我們設置完相關對接的端點後,還有一件很重要的事情要處理。還記得我們前面說過,在 ADFS 認證完用戶資料後,會透過 Claim Rules 將對應的資料轉換成 SP 所需要的資料屬性,這樣 SP 就能透過這個 Claim 找到對應的資料值。以我們這個案例來說,在 ADFS 認證完用戶後,需要讓 Cloud Identity 知道哪位用戶認證成功,而目前 AD 與 Cloud Identity 共通的用戶資料便是 AD 的 Email 與 Cloud Identity 的 Name ID,所以我們要把兩者透過 Claim Rule 對接在一起。這樣一來,ADFS 就能將資料轉換成 Claim 後通過加密封裝成 Token 來進行傳輸。相關的操作如下:
Claim Rules 設置步驟:
1. 於 AD FS Management 頁面左側選擇 Relying Party Trusts 資料夾。
2. 右鍵點選剛剛創建的 Trust 並選擇 Edit Claim Issuance Policy。
3. 於彈出視窗下方點擊 Add Rule… 鍵。
4. 於 Choose Rule Type 標籤頁的 Claim rule template 選擇 Send LDAP Attributes as Claims。
5. 設置 Claim rule name 為 Map Email and Name ID。
6. 下方 LDAP Attribute 選擇 E-Mail-Addresses。
7. 下方 Outgoing Claim Type 選擇 Name ID。
8. 設置完成。
獲取 Token-Signing Certificate
在處理完前面的 Claim 與 Endpoints 後,由於在 SAML 標準的操作下,為確保資料的安全性,ADFS 會產生一組公開、私有金鑰,用來加密、解密傳出的 Token,而 SP 必須要獲取這個公開的金鑰才能順利的獲取 Token 內的 Claim 資料。所以下面我們要來將金鑰從 ADFS 導出,相關操作如下:
獲取 Token-Signing Certificate 步驟:
1. 於 AD FS Management 頁面左側展開 Service 資料夾。
2. 點選 Certificates 資料夾,並選擇 Token-Signing 欄位下方金鑰。
3. 右鍵點選 View Certificate… 。
4. 於彈出視窗上方選擇 Details 標籤頁,並按下 Copy to File… 鍵。
5. 於 Certificate Export Wizard 選擇輸出格式為 Base-64 encoded X.509(.CER)。
6. 指定輸出檔案路徑,以供之後上傳憑證使用。
設置 Cloud Identity 的 SSO 第三方認證機制
自此,我們在 AD 主機上的設置總算完成了。接下來我們就要回到 Cloud Identity Admin 介面,將剛剛於 ADFS 設置的 URL 與 公開金鑰進行對接,從而讓之後登入 Cloud Identity 的用戶能直接透過 ADFS 開出的網頁介面進行安全的 SSO 認證,詳述如下:
Cloud Identity SSO 認證設定:
1. 登入 Cloud Identity Admin Console。
2. 展開 Security 標籤頁,選擇 Settings 標籤分頁。
3. 點擊右側 Set up single sign-on(SSO) with a third party IdP 展開欄位。
4. 點擊 Add SSO PROFILE。
5. 勾選 Set up SSO with third-party identity provider。
6. 於 Sign-in page URL 填入 https://前面設定 ADFS 的 Federation Service Name/adfs/ls/。
7. 於 Sign-out page URL 填入 https://前面設定 ADFS 的 Federation Service Name/adfs/ls/?wa=wsignout1.0。
8. 於 Change password URL 填入 https://前面設定 ADFS 的 Federation Service Name/adfs/portal/updatepassword/。
9. 於 Verification certificate 點選 Upload certificate,然後選擇先前導出的 ADFS Token-signing certificate 公開金鑰。
10. 點選 Save。
11. 確認開啟 SSO 功能並點擊 I understand and agree。
12. 設置 SSO 認證完成。
測試 ADFS 的 SSO 驗證登入
到此為止我們正式的完成了使用 ADFS 做 SSO 外部認證的所有設定,而驗證設置是否成功的方式也非常簡單,我們只需要先在 AD 中創建一個新的用戶,並透過GCDS 同步至 Cloud Identity 後,開啟無痕視窗並登入 GCP 控制台,在 Google 登入頁面輸入剛剛新增的用戶信箱並按下 Next 鍵,就可以看到在進行 Google 的登入作業的時候,Google 自動的幫我們將登入介面轉址到 ADFS 的登入窗口。而在確認帳號密碼後,又自動的幫我們轉回 GCP 控制台中,並且正確的獲取了我們的帳戶相關資訊與設定在 Cloud Identity 內的用戶權限。
以上就是透過 ADFS 將 AD 作為 Cloud Identity 外部身分認證的教學,大家如果想了解將 AD 帳號資料同步到 GCP 的方法可以參考《AD 帳號登入 GCP 方法攻略!用 Cloud Identity 與 GCDS/PS 移轉帳號資料》這篇文章,或是免費報名 11/19(五)的線上研討會。而有任何問題或需求都歡迎聯絡我們喔!
▋延伸閱讀:
・AD 帳號登入 GCP 方法攻略!用 Cloud Identity 與 GCDS/PS 移轉帳號資料
・【GCP教學】第一次開 Google VM 就上手 – Compute Engine 操作簡介
・GCP上如何建立Organization ? 透過Cloud Identity Free 幫你實現
・什麼是 Cloud IAM