本文說明如何使用 OS 登入,管理貴機構內 VM 執行個體的存取權。
本主題說明下列工作:
- 使用組織政策為機構啟用 OS 登入功能:使用組織政策可確保機構中所有新的 VM 執行個體均已啟用 OS 登入功能。
- 將執行個體存取權授予機構外的使用者:允許機構外的使用者帳戶使用安全殼層連線至您的執行個體。
- 管理 OS Login API:允許或拒絕使用者使用 OS Login API。並啟用或停用 OS Login API 的功能。
- 稽核 OS 登入事件:追蹤 OS 登入相關事件和活動,例如新增、刪除或更新安全殼層金鑰,或刪除 POSIX 資訊。
- 使用 Directory API 修改使用者帳戶:使用 Directory API 更新使用者屬性,例如使用者名稱和 POSIX 帳戶資訊。
- 使用 OS 登入功能搭配 Linux 群組 (已淘汰):使用 OS 登入功能搭配 Linux 群組,管理 VM 中的使用者權限。
- 使用 OS 登入功能搭配工作團隊身分聯盟 (預先發布版):當貴機構使用外部身分識別資訊提供者 (IdP) 時,可連線至已啟用 OS 登入功能的 VM。
事前準備
-
如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
OS 登入機構政策
您可以在機構中設定 OS 登入限制,確保所有新專案和在這些新專案中建立的 VM 執行個體都已啟用 OS 登入功能。
設定此限制後,即適用於以下狀況:
enable-oslogin=true
已納入所有新專案的專案中繼資料。- 在執行個體或專案中繼資料中,將
enable-oslogin
設為false
的要求遭到拒絕,不論是新舊 VM 和專案皆然。
限制
以下產品、功能和 VM 不支援 OS 登入:- Cloud Data Fusion 6.1.4 以下版本
- Cloud Composer 1
- 執行 1.23.5 以下版本的 Google Kubernetes Engine (GKE) 公開叢集
- 執行 1.20.5 以下節點集區版本的 GKE 私人叢集
- 無伺服器型 Dataproc
- Windows Server 和 SQL Server VM
- Fedora CoreOS VM。如要管理使用這些映像檔建立的 VM 執行個體存取權,請使用 Fedora CoreOS 點火系統
Cloud Data Fusion、Cloud Composer 和 GKE 的解決方法
如要在使用 Cloud Data Fusion、Cloud Composer 和 GKE 的機構中使用 OS 登入功能,您可以在機構層級啟用 OS 登入限制,然後針對受影響的專案,有選擇地停用專案或資料夾的限制。
如要進一步瞭解如何編輯機構政策,請參閱「建立及編輯政策」。
啟用機構政策
如要啟用 OS 登入政策,您可以使用 Google Cloud CLI 在特定專案和資料夾上設定 OS 登入限制。您也可以使用 Google Cloud 控制台或 Google Cloud CLI,為整個機構設定 OS 登入限制。
主控台
如要透過主控台設定 OS 登入組織政策,請完成下列步驟:
- 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。
- 在政策清單中,按一下「Require OS Login」即可查看 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
個人帳戶的使用者。
藉由允許外部 Google 帳戶設定 POSIX 帳戶資訊,roles/compute.osLoginExternalUser
身分與存取權管理角色可讓外部 Google 帳戶與其他 OS 登入角色進行互動。
如要將 roles/compute.osLoginExternalUser
和其他必要的 OS 登入執行個體存取權角色授予機構外部的使用者,請完成以下步驟:
- 在 Google Cloud 控制台中,前往「IAM & Admin」頁面。
- 按一下「Select a project」下拉式選單。在隨即顯示的「Select a resource」對話方塊中,依序執行下列步驟選取機構:
- 點選機構下拉式選單,瀏覽您的所有機構。
- 從下拉式選單中選取機構。
- 點選「授予存取權」,即可為使用者新增角色。
- 在「New principals」欄位中,新增要設定執行個體存取權的使用者電子郵件地址。
- 在「角色」下拉式選單中,選取「Compute OS Login External User」角色。
- 按一下 [儲存]。
- 如果您尚未授予角色,也可以在專案或機構層級將其他 OS 登入執行個體存取權角色授予使用者。
使用者現在可以連接至專案中已啟用 OS 登入功能的執行個體。
管理 OS Login API
您可以在機構層級設定 Google Workspace 管理控制項,以便限制 OS Login API 的存取權。如要設定 Google Workspace 管理控制項或查看設定選項,請參閱「控制貴機構中有哪些使用者能使用 Google Cloud」。Google Workspace 管理員也可以開啟或關閉 OS Login API 的特定功能。包括下列選項:
- 選擇是否要在 OS Login API 產生的使用者名稱中加入網域字尾。舉例來說,如果未勾選納入網域後綴的設定,在網域
example.com
中,使用者user@example.com
的使用者名稱會是user
。 - 決定貴機構的成員是否可以使用 OS Login API 管理安全殼層金鑰。
- 限制或允許機構外使用者存取 VM。
如要進一步瞭解如何開啟或關閉 OS Login API 設定,請參閱「選擇 Google Cloud Platform 的設定」。
稽核 OS 登入事件
Google Workspace 管理員可以使用 Google Workspace Admin SDK 稽核透過 OS Login API 執行的動作。只要查看這些事件,您就可以追蹤使用者新增、刪除或更新安全殼層金鑰,或是刪除 POSIX 帳戶資訊的時間。
您可以利用 applicationName=gcp
呼叫 Activities.list()
,從 Google Workspace Admin SDK 中擷取 OS Login API 稽核活動事件。詳情請參閱 Google Workspace Admin SDK Reports API 說明文件中的 Google Cloud 活動事件。
使用 Directory API 修改使用者帳戶
當您連線至執行個體時,OS 登入會使用您的 Cloud Identity 或 Google Workspace 使用者設定。如果您是機構管理員,則可以使用 Directory API 為 Google Workspace 或 Cloud Identity 使用者帳戶完成以下工作:
- 修改執行個體登入設定
- 讓使用者成為管理員
- 修改帳戶名稱和電子郵件等使用者屬性
- 新增和刪除使用者的安全殼層金鑰
- 修改 POSIX 帳戶資訊
- 變更使用者在執行個體上連線的使用者名稱。
以下範例說明如何使用 Directory API 修改或移除使用者帳戶。如要進一步瞭解可編輯的帳戶屬性,請參閱 Directory API 參考資料。
修改帳戶屬性
如要修改使用者的 POSIX 帳戶資訊或管理使用者的 SSH 金鑰,請對 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
之間的值。如要存取 Container-Optimized 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
:(選用) 自紀元起算的鍵到期時間,以微秒為單位 (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。
搭配 OS 登入功能使用 Linux 群組 (已淘汰)
機構管理員可以使用 Cloud Identity Groups API,藉由建立及管理 POSIX 群組,為 OS Login 使用者設定額外的 Linux 群組。OS 登入功能會將 POSIX 群組連結至貴機構 VM 中的額外 Linux 群組,以便您管理使用者在 VM 中的權限。
管理 Linux 群組中的使用者成員
如要建立 POSIX 群組,請參閱「建立及更新 POSIX 群組」。
如要將使用者加入群組,請參閱「新增或邀請使用者加入群組」。
會員方案更新內容會在 10 分鐘內生效。群組變更會反映在所有新建立的 VM 中。POSIX 群組更新最多可能需要六小時才會對所有執行中的 VM 生效。使用者可能必須登出或使用 newgrp
指令,才能查看群組變更。
刪除 POSIX 群組設定
OS 登入功能已停止支援 POSIX 群組。建議您刪除 OS Login POSIX 群組設定。
您必須是機構管理員,才能刪除 OS Login POSIX 群組設定。
- 如果不知道機構資源 ID,請參閱這篇文章,瞭解如何取得機構資源 ID。
- 列出貴機構中的所有 POSIX 群組。記下每個群組的電子郵件地址。
- 針對機構中的每個 POSIX 群組執行下列操作:
- 擷取群組資訊。請注意
posixGroups.gid
。 - 刪除 POSIX 群組。
- 擷取群組資訊。請注意
- 您可以視需要列出貴機構中的所有 POSIX 群組,確認所有群組都已刪除。如果已成功刪除所有群組,回應會是空白。
使用 OS 登入的 Linux 群組的頻率限制
使用 OS 登入的 Linux 群組會使用 oslogin.googleapis.com/metadata_server_groups_requests
配額。根據預設,特定區域的每個專案配額上限為 60 個要求/分鐘。
如需更高的頻率限制,您可以前往 Google Cloud 主控台的「配額」頁面申請額外配額。
搭配 OS 登入功能使用員工身分聯盟
採用員工身分聯盟的機構可使用 OS 登入功能管理 VM 的存取權。為機構啟用員工身分聯盟後,OS 登入會使用憑證驗證機制,而非金鑰驗證機制,驗證使用者身分。
事前準備
- 建立工作團隊身分集區。
- 設定
google.posix_username
屬性對應。 如要將 VM 設為使用 OS Login 與員工身分聯盟,請按照下列步驟操作:
在 VM 上執行下列指令,確認 VM 已安裝 OpenSSH 7.4 以上版本:
ssh -V
限制
- 您連線的 VM 必須安裝 OpenSSH 7.4 以上版本,才能透過 OS 登入使用人力資源身分同盟服務。
- 如果貴機構使用員工身分聯盟,您就無法存取 VM 的序列埠。
- 只有下列地區的 VM 支援 SSH 憑證:
asia-east1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west4
northamerica-northeast1
southamerica-west1
us-central1
us-central2
us-east1
us-east4
us-east5
us-east7
us-south1
us-west1
us-west4
us-west8
連線至使用 OS 登入功能和 Workforce Identity 聯盟的 VM
使用 Google Cloud 控制台、gcloud CLI 或其他 SSH 用戶端,連線至使用 OS 登入與員工身分聯盟的 VM。
主控台
當您使用 瀏覽器中的 SSH 連線至使用 OS Login 與人力資源群組身分同盟的 VM 時,Compute Engine 會在您嘗試連線時代您設定 SSH 憑證。
如要連線至 VM,請按照下列步驟操作:
- In the Google Cloud console, go to the VM instances page.
-
In the list of virtual machine instances, click SSH in the row of
the instance that you want to connect to.
gcloud
當您使用 gcloud CLI 連線至使用 OS Login 與員工身分聯盟的 VM 時,Compute Engine 會在您嘗試連線時代您設定 SSH 憑證。
執行 gcloud beta compute ssh
指令,即可使用 SSH 連線至 VM:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
執行下列指令:
gcloud beta compute ssh --project=PROJECT_ID --zone=ZONE VM_NAME
更改下列內容:
PROJECT_ID
:含有 VM 的專案 IDZONE
:VM 所在的可用區名稱VM_NAME
:VM 名稱
如果已為 Google Cloud CLI 設定預設屬性,則可省略此指令中的
--project
和--zone
標記。例如:gcloud compute ssh VM_NAME
IAP Desktop
當您使用 IAP Desktop 連線至使用 OS Login 與員工身分聯盟的 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 登入功能與人力資源群組 ID 同盟服務的 VM,請執行下列操作:
- 如果您還沒有 SSH 金鑰,請建立一個。
使用
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
:包含要連線的 VM 的專案 ID。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 登入。
- 瞭解如何設定採用 2 步驟驗證機制的 OS 登入。
- 閱讀 OS 登入功能總覽。
- 排解 OS 登入問題。