本文說明如何使用 OS 登入功能,管理整個組織的 VM 執行個體存取權。
注意:您必須是 Google Workspace 管理員,才能完成本文所述的任何工作。本主題說明下列工作:
- 使用組織政策為組織啟用 OS 登入功能:使用組織政策,確保組織中的所有新 VM 執行個體都啟用 OS 登入功能。
- 將執行個體存取權授予組織外部使用者:允許組織外部的使用者帳戶透過 SSH 連線至執行個體。
- 管理 OS 登入 API:允許或拒絕使用者存取 OS 登入 API。以及啟用或停用 OS 登入 API 的功能。
- 稽核 OS 登入事件:追蹤 OS 登入相關事件和活動,例如新增、刪除或更新安全殼層金鑰,或刪除 POSIX 資訊。
- 使用 Directory API 修改使用者帳戶:使用 Directory API 更新使用者屬性,例如使用者名稱和 POSIX 帳戶資訊。
- 搭配 OS 登入功能使用 Linux 群組 (已淘汰):搭配 OS 登入功能使用 Linux 群組,管理 VM 內的使用者權限。
- 搭配使用 OS 登入和員工身分聯盟 (預先發布版):如果貴組織使用外部識別資訊提供者 (IdP),請連線至已啟用 OS 登入功能的 VM。
事前準備
-
如果尚未設定驗證,請先完成設定。驗證程序會確認您的身分,以便授予 Google Cloud 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證:
請根據您打算如何使用本頁範例,選取對應的分頁標籤:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證機制。
gcloud
-
安裝 Google Cloud CLI。 安裝完成後, 請執行下列指令,初始化 Google Cloud CLI:
gcloud init如果採用外部識別資訊提供者 (IdP),必須先 使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果採用外部識別資訊提供者 (IdP),必須先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」一節。
OS 登入組織政策
您可以在機構中設定 OS 登入限制,確保所有新專案和在這些新專案中建立的 VM 執行個體都已啟用 OS 登入功能。
設定這項限制後,系統會套用下列條件:
- 所有新專案的專案中繼資料都會包含
enable-oslogin=true。 - 無論是新的或現有的 VM 和專案,只要要求將執行個體或專案中繼資料中的
enable-oslogin設為false,就會遭到拒絕。
限制
下列產品、功能和 OS 映像檔不支援 OS 登入:- Cloud Data Fusion 6.1.4 以下版本。
- Managed Service for Apache Airflow 1。
- OS 登入設定檔總大小超過 32 KiB。OS 登入設定檔包含 POSIX 帳戶資訊和安全殼層公開金鑰。
- 使用下列 OS 映像檔的運算執行個體:
- Windows Server 和 SQL Server
- Fedora CoreOS。如要管理使用這些映像檔建立的運算執行個體存取權,請使用 Fedora CoreOS Ignition 系統。
- SLES 16。如要管理使用這些映像檔建立的運算執行個體存取權,請使用以中繼資料為基礎的 SSH。
Cloud Data Fusion 和 Managed Airflow 的解決方法
如要在使用 Cloud Data Fusion 和 Managed Airflow 的組織中,使用 OS 登入功能,您可以在組織層級啟用 OS 登入限制,然後在受影響專案的專案或資料夾,選擇性停用這項限制。
如要進一步瞭解如何編輯組織政策,請參閱「建立及編輯政策」。
啟用組織政策
如要啟用 OS 登入政策,您可以使用 Google Cloud CLI,對特定專案和資料夾設定 OS 登入限制。您也可以使用 Google Cloud 控制台或 Google Cloud CLI,為整個組織設定 OS 登入限制。
控制台
如要透過主控台設定 OS 登入組織政策,請完成下列步驟:
- 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
- 在政策清單中,按一下「Require OS Login」(需要 OS 登入),查看 OS 登入限制。
- 按一下 [Edit] (編輯) 即可編輯現有的 OS 登入限制。
- 在「Edit」(編輯) 頁面選取 [Customize] (自訂)。
- 如要強制執行這項限制,請選取 [On] (開啟)。
- 按一下 [Save] (儲存) 以套用限制條件設定。
gcloud
如要設定 OS 登入組織政策,請使用 gcloud beta resource-manager org-policies enable-enforce 指令。
找出組織 ID。
gcloud organizations list
在組織中設定限制。將
organization-id替換為組織 ID。gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \ --organization=organization-id
您也可以將 OS 登入組織政策分別套用到具有 --folder 或 --project 標記的資料夾或專案,以及資料夾 ID 和專案 ID。
如要套用至資料夾,請執行下列指令:
gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \
--folder=folder-id
如要套用至專案,請執行下列指令:
gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \
--project=project-id
更改下列內容:
將執行個體存取權授予組織外部使用者
根據預設,組織外部的使用者無法為組織中的執行個體設定安全殼層金鑰,也無法取得組織中執行個體的存取權。在某些情況下,您可能需要將執行個體存取權授予其他組織的使用者,或擁有個人 Google gmail.com 帳戶的使用者。
roles/compute.osLoginExternalUser IAM 角色可讓外部 Google 帳戶設定 POSIX 帳戶資訊,進而與其他 OS 登入角色互動。
如要將 roles/compute.osLoginExternalUser 和其他必要的 OS 登入執行個體存取權角色授予組織外部的使用者,請完成下列步驟:
- 前往 Google Cloud 控制台的「IAM & Admin」(IAM 與管理) 頁面。
- 按一下「選取專案」下拉式選單,在顯示的「Select a resource」(選取資源) 對話方塊中,按照下列步驟選取組織:
- 按一下組織下拉式選單,即可查看所有組織。
- 從下拉式選單中選取貴機構。
- 按一下「授予存取權」,為使用者新增角色。
- 在「New principals」(新增主體) 欄位中,新增要設定執行個體存取權的使用者電子郵件地址。
- 從「Role」(角色) 下拉式選單中,選取「Compute OS Login External User」(Compute OS 登入外部使用者) 角色。
- 按一下 [儲存]。
- 如果您尚未這麼做,請在專案或組織層級,向使用者授予其他 OS 登入執行個體存取權角色。
使用者現在可以連線至專案中已啟用 OS 登入功能的執行個體。
管理 OS 登入 API
在組織層級,您可以設定 Google Workspace 管理控制項,限制 OS 登入 API 的存取權。如要設定 Google Workspace 管理員控制項或查看設定選項,請參閱「控管貴組織中可使用 Google Cloud 的人員」。Google Workspace 管理員也可以開啟或關閉 OS 登入 API 的特定功能。包括下列選項:
- 選擇是否要在 OS Login API 產生的使用者名稱中加入網域字尾。舉例來說,在網域
example.com中,如果未勾選包含網域字尾的設定,使用者user@example.com的使用者名稱會是user。 - 決定貴組織成員是否能使用 OS Login API 管理安全殼層金鑰。
- 限制或允許機構外部使用者存取 VM。
如要進一步瞭解如何開啟或關閉 OS 登入 API 設定,請參閱「選擇 Google Cloud Platform 設定」。
稽核 OS 登入事件
Google Workspace 管理員可以使用 Google Workspace Admin SDK,稽核透過 OS 登入 API 執行的動作。查看這些事件,即可追蹤使用者新增、刪除或更新安全殼層金鑰,或刪除 POSIX 帳戶資訊的時間。
如要從 Google Workspace Admin SDK 擷取 OS 登入 API 稽核活動事件,請使用 applicationName=gcp 呼叫 Activities.list()。詳情請參閱 Google Workspace Admin SDK Reports API 說明文件中的「Google Cloud 活動事件」。
使用 Directory API 修改使用者帳戶
OS 登入功能會在連線至執行個體時,使用 Cloud Identity 或 Google Workspace 使用者設定。如果您是 Google Workspace 超級管理員,可以使用 Directory API 為 Google Workspace 或 Cloud Identity 使用者帳戶完成下列工作:
- 修改執行個體登入設定
- 讓使用者成為管理員
- 修改帳戶名稱和電子郵件等使用者屬性
- 新增和刪除使用者的安全殼層金鑰
- 修改 POSIX 帳戶資訊
- 變更使用者在執行個體上連線的使用者名稱
以下範例說明如何使用 Directory API 修改或移除使用者帳戶。如要進一步瞭解可編輯的帳戶屬性,請參閱 Directory API 參考資料。
修改帳戶屬性
如要修改使用者的 POSIX 帳戶資訊或管理使用者的安全殼層金鑰,請向 directory.users.update 方法發出 PUT 要求,並指定要變更的使用者帳戶屬性。
如要修改使用者的 posixAccounts 屬性,您必須在要求中指定目前或新的 username、uid 和 gid 值。
如要修改使用者的 sshPublicKeys 屬性,請務必在要求中指定 key 值。
以下是 PUT 要求範例:
PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY
{
"posixAccounts": [
{
"username": "USERNAME",
"uid": "UID",
"gid": "GID",
"homeDirectory": "USER_HOME_PATH",
"shell": "SHELL_PATH"
}
],
"sshPublicKeys": [
{
"key": "KEY_VALUE",
"expirationTimeUsec": EXPIRATION_TIME
}
],
}
更改下列內容:
USER_KEY:使用者的主要電子郵件地址、別名電子郵件地址或專屬的使用者 ID。USERNAME:Compute Engine 為使用者新增至 VM 的使用者名稱。這個值在貴組織中不得重複,且結尾不得為波浪號 (「~」) 或包含半形句號 (「.」)。UID:這位使用者在 VM 上的使用者 ID。這項屬性的值必須介於1001到60000之間,或是介於65535到2147483647之間。如要存取容器最佳化的 OS,UID的值必須介於65536到214748646之間。UID在機構中不得重複。GID:使用者所屬 VM 的群組 ID。USER_HOME_PATH:(選用) 使用者在 VM 上的主目錄。例如:/home/example_username。SHELL_PATH:(選用) 使用者連線至執行個體後,預設殼層的路徑。例如/bin/bash或/bin/sh。KEY_VALUE:公開安全殼層金鑰值。EXPIRATION_TIME:(選用) 金鑰的到期時間,以 Epoch 時間後的微秒為單位 (1 秒 = 106 微秒)。
移除帳戶屬性
如要清除使用者的 posixAccounts 和 sshPublicKeys 資料,請向 directory.users.update 方法發出 PUT 要求,並將 posixAccounts 和 sshPublicKeys 欄位設為 null:
PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY
{
"posixAccounts": null,
"sshPublicKeys": null
}
將 USER_KEY 替換為使用者的主要電子郵件地址、別名電子郵件地址或專屬使用者 ID。
搭配使用 Linux 群組和 OS 登入 (已淘汰)
組織管理員可以使用 Cloud Identity Groups API 建立及管理 POSIX 群組,為 OS 登入使用者設定補充 Linux 群組。OS 登入會將 POSIX 群組與組織 VM 中的補充 Linux 群組連結,以便您管理使用者在 VM 中的權限。
管理 Linux 群組中的使用者成員
如要建立 POSIX 群組,請參閱「建立及更新 POSIX 群組」。
如要將使用者加入群組,請參閱「新增或邀請使用者加入群組」。
成員資格更新會在 10 分鐘內生效。群組變更會反映在所有新建立的 VM 中。POSIX 群組更新最多可能需要六小時,才會套用至所有執行中的 VM。使用者可能需要登出或使用 newgrp 指令,才能看到群組變更。
刪除 POSIX 群組設定
OS 登入 POSIX 群組支援功能已淘汰。建議您刪除 OS 登入 POSIX 群組設定。
您必須是組織管理員,才能刪除 OS 登入 POSIX 群組設定。
- 如果您不知道組織資源 ID,請取得組織資源 ID。
- 列出組織中的所有 POSIX 群組。記下每個群組的電子郵件地址。
- 針對組織中的每個 POSIX 群組,執行下列操作:
- 擷取群組資訊。請記下
posixGroups.gid。 - 刪除 POSIX 群組。
- 擷取群組資訊。請記下
- 您可以列出組織中的所有 POSIX 群組,確認所有群組都已刪除。如果所有群組都已成功刪除,回應會是空白。
使用 OS 登入的 Linux 群組頻率限制
使用 OS 登入的 Linux 群組會使用 oslogin.googleapis.com/metadata_server_groups_requests 配額。根據預設,特定區域中每項專案的配額限制為每分鐘 60 項要求。
如需提高頻率限制,請在 Google Cloud 控制台的「Quotas」(配額) 頁面申請調整配額。
搭配 OS 登入功能使用員工身分聯盟
使用員工身分聯盟的組織,可以透過 OS 登入功能管理 VM 存取權。如果組織啟用了員工身分聯盟,OS 登入會使用憑證式驗證,而非金鑰式驗證來驗證使用者身分。
事前準備
- 建立工作團隊身分集區。
- 設定
google.posix_username屬性對應。 請按照下列步驟,設定 VM 透過員工身分聯盟使用 OS 登入功能:
在 VM 上執行下列指令,確認 VM 已安裝 OpenSSH 7.4 以上版本:
ssh -V
限制
- 您無法將員工身分聯盟與 OS 登入雙重驗證 (2FA) 搭配使用。
- 您連線的 VM 必須搭載 OpenSSH 7.4 以上版本,才能搭配 OS 登入功能使用員工身分聯盟。
- 如果貴組織使用員工身分聯盟,您就無法存取 VM 的序列埠。
連線至使用 OS 登入和員工身分聯盟的 VM
使用Google Cloud 控制台、gcloud CLI 或其他 SSH 用戶端,連線至透過員工身分聯盟使用 OS 登入的 VM。
控制台
使用瀏覽器中的 SSH 連線至透過員工身分聯盟使用 OS 登入功能的 VM 時,Compute Engine 會在您嘗試連線時,代為設定 SSH 憑證。
如要連線至 VM,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
-
在虛擬機器執行個體清單中,找到要連線的執行個體,然後點選該列的「SSH」SSH。

gcloud
使用 gcloud CLI 連線至透過員工身分聯盟使用 OS 登入功能的 VM 時,Compute Engine 會在您嘗試連線時,代為設定 SSH 憑證。
使用 SSH 並執行
gcloud beta compute ssh 指令,連線至 VM:
-
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
執行下列指令:
gcloud beta compute ssh INSTANCE_NAME \ --project=PROJECT_ID \ --zone=ZONE更改下列內容:
INSTANCE_NAME:VM 的名稱。PROJECT_ID:VM 所在專案的 ID。ZONE:VM 所在的可用區名稱。
如果您已設定 Google Cloud CLI 的預設屬性,則可省略這個指令中的
--project和--zone旗標。例如:gcloud beta compute ssh INSTANCE_NAME
IAP Desktop
使用 IAP Desktop 連線至透過員工身分聯盟使用 OS 登入功能的 VM 時,Compute Engine 會在您嘗試連線時,代為設定 SSH 憑證。
如要使用 IAP Desktop 連線至 VM,請按照下列步驟操作:
-
如果尚未安裝 IAP Desktop,請在工作站上安裝。
-
開啟 IAP Desktop。「Add projects」(新增專案) 視窗隨即開啟。
-
出現提示時,請 使用員工身分聯盟登入。
-
在「Add projects」(新增專案) 視窗中,輸入專案 ID 或專案名稱,其中包含您要連線的 VM。
-
在「Project Explorer」視窗中,再次在 VM 名稱上按一下滑鼠右鍵,然後選取「Connect」(連線),連線至 VM。
SSH 用戶端
如要使用 SSH 用戶端,連線至透過員工身分聯盟使用 OS 登入功能的 VM,請按照下列步驟操作:
- 如果還沒有安全殼層金鑰,請建立一個。
使用
users.projects.locations.signSshPublicKey方法簽署公開安全殼層金鑰:POST https://oslogin.googleapis.com/v1beta/users/USER/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey { "ssh_public_key": "PUBLIC_KEY" }更改下列內容:
USER:員工集區中的單一身分,格式如下:principal:%2F%2Fiam.googleapis.com%2Flocations%2Fglobal%2FworkforcePools%2POOL_ID%2Fsubject%2FSUBJECT_ATTRIBUTE_VALUE
更改下列內容:
POOL_ID:使用者所屬的工作團隊集區。SUBJECT_ATTRIBUTE_VALUE:使用者google.posix_username屬性對應的值。
PROJECT_ID:專案 ID,用於存放您要連線的 VM。LOCATION:要連線的 VM 所在可用區。PUBLIC_KEY:安全殼層公開金鑰檔案的內容。
從
user.signSshPublicKey方法的輸出內容複製 SSH 憑證,並將內容儲存至新檔案。執行下列指令,設定 SSH 憑證檔案的權限:
sudo chmod 600 FILE_NAME
將
FILE_NAME替換為檔案名稱。使用下列指令連線至 VM:
ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
更改下列內容:
PATH_TO_PRIVATE_KEY:私人安全殼層金鑰檔案的路徑。PATH_TO_SSH_CERTIFICATE:SSH 憑證檔案的路徑。USERNAME:使用者的google.posix_username屬性對應值。EXTERNAL_IP:VM 的外部 IP 位址。
後續步驟
- 瞭解如何設定 OS 登入。
- 瞭解如何設定 OS 登入和兩步驟驗證。
- 閱讀 OS 登入功能總覽。
- 疑難排解 OS 登入問題。