文章段落
明明可以單純用 SSH key 連線 GCE,為什麼還要用 OS Login 呢?雖然直接利用 SSH 連線進入 GCE 很方便,但在帳戶管理上卻易造成管理人員的麻煩和資安風險。而透過 OS Login,則可讓每個用戶擁有單一的登入窗口,簡化帳戶管理和追蹤的麻煩。還不知道 OS Login 該如何操作嗎?快跟著我們看下去吧!
什麼是 OS Login?
對許多開發人員而言,使用 SSH 登入虛擬主機是一件每天都要做的事,我們只需透過使用不同的 Public key 與 IP 就能輕易地進入目標主機。說來方便,但從公司管理與資安保護的角度來看,當今天有很多的外部開發人員或是公司內部人事變遷,透過 SSH key 來管理登入許可就變得非常麻煩且難以追蹤。
好在 GCP 看見了我們的困擾,透過 OS Login 服務,我們可以將 SSH 登入控管層級從單一 key 的管理提升至 IAM 的角色權限控管。透過 Organization、Project、甚至是 Instance 階層的帳戶授權機制,管理者可輕鬆地控管登入許可,開發人員也可以透過簡單的 Cloud Identity 帳戶進行多台主機的登入驗證,減少操作麻煩。聽起來是不是很方便呢?這次就帶大家認識 OS Login 服務吧!
哪些環境可以使用 OS Login
目前 OS Login 服務僅提供 Linux 作業系統使用,Windows 系統與 SQL Server 映像檔尚未支援。而 OS Login 也支援使用 1.20.5 以上 node pool 版本的 private Google Kubernetes Engine (GKE)。而要能正常運用 OS Login ,使用的映像檔需要安裝或更新最新版本的 Guest environment 套件,GCP 提供的映像檔皆已安裝最新套件版本,可以直接使用。
使用 OS Login 有什麼好處?
那具體來說,使用 OS Login 到底有哪些好處呢?首先,由於登入方式採用 IAM 用戶權限認證,當我們 SSH 進入 VM 時,系統會自動依據 Cloud Identity 用戶資訊在目錄下創建 Cloud Identity 資料夾,所以不管我們使用哪台電腦登入同專案或組織下的不同 VM ,都會顯示登入的用戶名稱,這樣一來,專案管理人員就可以依據用戶資訊來了解並追蹤操作記錄。
更厲害的是,管理人員可透過 IAM 權限設定來限制登入或控管人員的系統權限。舉例來說,我們不希望用戶可以修改 VM 內的資料,所以透過 IAM 規則限制用戶使用 sudo 指令來獲取 administrator 權限。這樣一來,用戶就僅能在非 admin 的權限下進行操作。而像這樣的 IAM 權限變更都能自動更新,假設我們有請外部廠商對系統進行操作,我可以馬上修改對方的角色權限,進而使對方無法再登入 VM,達到人員控管的目的。
除了上述的好處外,還記得我們先前提到的 AD 與 Cloud Identity 用戶資料同步嗎?(忘記的可以參考《AD 帳號登入 GCP 方法攻略!用 Cloud Identity 與 GCDS/PS 移轉帳號資料》)只要透過 OS Login,我們就可以確保在雲地混合或搬遷後的環境中,所有用戶的資料都是一致的,進而達到透過一套帳戶系統管理並追蹤雲地環境的開發人員操作權限。
建置 OS Login 登入管理
前面講了這麼多運用 OS Login 進行 SSH 登入的好處,所以這邊就要帶大家逐步操作從 gcloud SDK 的安裝設置到 OS Login 的啟用與不同層級的權限管理流程,並帶大家看看不同的操作會產生怎樣的結果。
在本機環境安裝 Cloud SDK 並作帳號登入
在本次的操作中,我們將使用 gcloud 作為 SSH 登入的操作工具,您也可以使用 GCP console 的瀏覽器 SSH 介面,或是透過第三方工具如 PuTTY 來做 SSH 登入,但使用第三方工具會需手動將 SSH key 透過 gcloud 指令或 API 來存放至帳戶中,需要的人可參考官方文件。前兩種方式會自動將生成的 key 存放至帳戶中,無須特別設置。
預先準備事項:
1. 具有 Organization 的 Project 環境(沒有 Organization 可以省略)
2. 防火牆設置需開啟 tcp 22 port ingress
3. 準備一個可供 SSH 連線的 Linux VM ,需有 External IP
為了要能在自己的主機操作 gcloud cmd,首先我們要下載 Cloud SDK,選擇適合自己主機作業系統的版本下載並安裝。需要注意的是,Cloud SDK 會需要我們安裝 Python 3.7 版本套件,如果本機還沒有安裝可在 Cloud SDK 安裝過程中進行安裝。
安裝完成後,我們首先要來執行 gcloud init 指令,透過這個指令我們能初始化 gcloud 帳戶環境設定,並設定使用的 GCP 帳戶、Project、Region 與 zone,這樣之後所進行的操作皆會在這個環境裡,就不用再去指定位置了。
gcloud init 設定:
1. 執行 gcloud init 指令
2. 透過提供之 URL 連結以瀏覽器進行 google 帳戶登入
3. 輸入 Index number 來指定欲操作的 Project
4. 輸入 Index number 來指定作業的 Region 和 zone
在 GCP 環境設定權限
在安裝好基本的 gcloud 環境後,我們要開始設置 OS Login 所需的 IAM 控管角色。如前面所提,OS Login 的 IAM 控管可以在 Organization 層級或是 Project 層級。如果 VM 所在專案具有 Organization,則必須先從 Organization 的 IAM 賦予欲登入 VM 的用戶 Compute OS Login External User 角色,而後在 Project 的 IAM 賦予用戶 Compute OS Admin Login 或 Compute OS Login 角色,如果該專案沒有 Organization,則直接用 Project 的設置即可。
設定完 IAM 權限後,我們要來設置 Instance 階層的權限控管,而我們無法直接從 Instance IAM 去設置使用 Service Account 的權限。如果我們希望限定 VM 存取,必須在該 VM 所使用的 Service Account 做權限設置。如果大家閱讀過官方文件,會看到裡面說「假設有使用 Service Account 才需要設置」,但因為 VM 在創建時都會有個 Default 的 Service Account,所以大家千萬不要漏掉這個步驟啊!
Service Account 設定:
1. 進入 IAM & Admin > Service Accounts 分頁,選取欲使用的 Service Account
2. 切換至 PERMISSIONS 分欄,並按下 GRANT ACCESS 按鈕,開啟設置視窗
3. 於 New Principals 輸入欲加入的用戶信箱
4. 於 Role 選擇 Service Account User,按下 SAVE 鍵
5. 將剛剛修改的 Service Account 給予欲登入的 VM
這邊要特別提到的是,OS Login 透過 IAM 角色賦予來控制登入用戶的 Administrator 權限。當我們在 VM 中使用 sudo 指令時,系統會從 IAM 權限去查核用戶的角色。如果用戶的角色是 Compute OS Login,則會要求輸入用戶 password,基本上就是阻擋了用戶的 admin 權限;而如果使用的角色是 Compute OS Admin Login,則用戶就能直接使用 admin 權限。
如前面提到的,OS Login 可從 Organization、Project 和 Instance 層級做登入的權限控管,如果今天任何一個層級的權限不符合上述設定,用戶在進行登入時就會收到 Permission denied (publickey). 的提示,並附上 255 的 Error Code。
啟用 OS Login 並測試 SSH 登入 GCP
在將前面的權限設置都處理完成後,我們就要正式來啟用 OS Login 服務啦!啟用方式非常方便,與 SSH key 的控管方式一樣,我們可以對整個 Project 的 VM 啟用 OS Login,也就是透過 Compute Engine > Metadata 來設置。或是利用 VM 內的 Custom metadata 來針對單一 VM 做 OS Login 的啟用。設置方法皆是新增一組 item,並在 Key 欄位輸入 enable-oslogin; Value 則輸入 TRUE,就可啟用 OS Login 服務。同樣的道理,我們也可以反過來輸入 FALSE 來關閉服務。
接著讓我們來透過 gcloud cmd 從本機進行登入,由於我們已經在前面設定過對應的 Project 與 zone,所以這裡只需要簡單輸入 gcloud compute SSH [vm-name] 即可登入,如果希望登入不同 Region 或 Project 的 VM,就需再額外提供 –project=[project-id] 和 –zone=[zone-name] 的參數。
這裡可以觀察到幾件事,當我們第一次使用 gcloud compute SSH 指令時,gcloud 會自動為我們建立一組 SSH key 並存放在本機目錄內,之後登入時就會自動的透過這組 key 來進行 SSH 連線。而在開啟 OS Login 的狀況下,可以注意到登入 VM 的用戶名稱會是用戶的信箱地址,且如果是 Organization 外部的用戶會帶上 ext_ 的修飾詞。而當我們關閉 OS Login 服務後,則會看到登入的用戶名稱切換回本機的用戶名稱。
設置 OS Login 2FA 驗證功能
前面帶大家操作完 OS Login 的設置並感受完它的效果後,這邊我們來更進一步強化登入 VM 的安全性吧!我們現在都知道 OS Login 是透過登入的 GCP 用戶來做權限驗證與指認,那如果今天在已經驗證過用戶的主機進行 SSH 登入的話不就門戶大開了嗎?為了要能更安全嚴謹地保護這個動作,GCP 提供了 OS Login 的 2FA 驗證服務,現在就讓我們趕緊來加上這層保護吧!
開啟帳戶 2FA 驗證功能
首先我們要進到 Google Account Console 頁面,並在這裡開啟帳戶的 2FA 驗證功能。首先我們切換左方頁面至 Security 分頁,並點擊 2-Step Verification 右側的箭頭,進去後我們可以看到三種不同的二階段驗證服務。分別是 Authenticator app、Voice or text message、Security Key,這裡我們選擇 Text Message,讀者可以自己選擇想要的驗證方式,然後就會收到開啟二階段驗證的通知信件。
開啟 OS Login 2FA 並測試 SSH 登入 GCP
跟前面設置 OS Login 開啟的方式一樣,我們可以從 Project 層級的 Metadata 或是 Instance 層級的 Custom metadata 來開啟服務。這裡只需要再加上一個 item,在 Key 值填入 enable-oslogin-2fa;Value 值填入 TRUE 即可開啟服務。
接著來進行 2FA 登入測試。可以看到當我們選用不同的 2FA 服務時,cmd 皆會出現不同的提示訊息。如果是選用收信驗證,在信件中按下確認鍵即可登入;而如果是透過 Security Code,則需要在 cmd 中填入收到的驗證號碼。可以注意到我們每次登入都需要做一次 2FA 的驗證,透過這樣的方式可更全面地保護我們的帳戶與專案登入,不再擔心有人趁我們不在的時候偷用自己的電腦做壞事了!
OS Login 登入管控層級
最後來總結一下!我們可以將 OS Login 的控管分為 Organization、Project、Instance 三個層級。不論是針對哪個層級做控制,都可影響用戶登入 VM 的權限,而這點在不使用 OS Login 的情況下其實也是可以透過 IAM 權限控管達成。但 OS Login 將權限切分得更乾淨,專注在用戶連線 VM 的控管上,並可控管用戶於系統的 admin 權限。
最重要的差異是,透過 OS Login 我們可以明確指認登入的用戶唯一名稱!不會像在沒使用 OS Login 時,不同的電腦會有不同的名稱,當發生問題時很難追蹤戰犯。這點在複雜的混合雲環境或是多個協力廠商交替的情況下真的非常重要。
除了透過上述的服務控管登入外,我們也可以搭配 Identity-Aware Proxy(IAP) TCP forwarding ,創建用戶加密通道來做無對外 IP 的 VM 連線,增加 VM 的對外防衛能力,畢竟只有不透風的牆才是好牆!但這個議題我們就留到下次再跟大家分享吧。
以上就是透過 OS-Login 對 Linux VM 進行登入管理的方法。比起使用 SSH 登入虛擬主機,運用 OS Login 可以讓管理者更有條理地管理登入者行為,擺脫過去 SSH key 共用帶來的資安威脅。大家如果對文章內容如有任何問題歡迎直接留言詢問,有 GCP 相關需求也都歡迎聯絡我們喔!
▋延伸閱讀:
・AD 帳號登入 GCP 方法攻略!用 Cloud Identity 與 GCDS/PS 移轉帳號資料
・AD 帳號登入 GCP 方法攻略!運用 ADFS 作為 GCP 外部身分認證
・[GCP 資安攻略] GCP 資訊安全各項功能簡介
・4個居家辦公必知的雲端資安防護對策,讓 WFH 更安心有效率!