使用 OS 登入管理執行個體存取權

除了透過新增和移除中繼資料中的安全殼層 (SSH) 金鑰組手動管理執行個體存取權之外,您也可以透過 OS 登入使用 Compute Engine 身分與存取權管理 (IAM) 角色管理 Linux 執行個體的 SSH 存取權。

如要設定 OS 登入並連線至您的執行個體,請使用下列程序:

  1. 針對您的專案或是個別執行個體啟用 OS 登入功能
  2. 為您本身、專案成員或是機構成員授予必要的 IAM 角色
  3. 或者,完成下列任何步驟:
  4. 連線到執行個體
  5. 參閱預期的登入行為一節。

限制

  • Google Kubernetes Engine 目前並不支援 OS 登入。啟用 OS 登入時,Google Kubernetes Engine 叢集節點會繼續使用中繼資料安全殼層 (SSH) 金鑰組。

  • Windows Server 與 SQL Server 映像檔系列尚未支援 OS 登入。

啟用或停用 OS 登入

您必續透過在專案中或在執行個體的中繼資料中設定中繼資料鍵/值組合,啟用 OS 登入功能 (enable-oslogin=TRUE),才能使用 IAM 角色管理執行個體存取權。如要停用 OS 登入,請將中繼資料值設定為 FALSE。例如,您可能會在專案層級使用 enable-oslogin=TRUE 在整個專案中啟用 OS 登入,但將尚無法使用此功能的特定執行個體設定為 enable-oslogin=FALSE

您可以使用下列其中一個選項,對您的專案或執行個體套用 enable-oslogin 中繼資料值:

主控台

在全專案中繼資料中設定 enable-oslogin,以將其套用至您專案中的所有執行個體:

  1. 前往「Metadata」(中繼資料) 頁面
  2. 按一下 [Edit] (編輯)
  3. 新增鍵為 enable-oslogin、值為 TRUE 的中繼資料項目。此外,將值設為 FALSE 即可停用這項功能。
  4. 按一下 [Save] (儲存) 以套用變更內容。

針對並未執行 CoreOS 的 VM,系統會立即套用這項變更;您不需要重新啟動執行個體。針對 CoreOS 發行版,您需要重新啟動執行個體,變更才會生效。如要重新啟動,請對執行個體先後執行停止啟動作業。

在現有執行個體的中繼資料中設定 enable-oslogin

  1. 前往「VM instances」(VM 執行個體) 頁面
  2. 按一下您要設定中繼資料值的執行個體名稱。
  3. 在執行個體詳細資料頁面頂端,按一下 [Edit] (編輯) 即可編輯執行個體設定。
  4. 在「Custom metadata」(自訂中繼資料) 底下,新增鍵為 enable-oslogin、值為 TRUE 的中繼資料項目。此外,將值設為 FALSE 即可為執行個體停用這項功能。
  5. 在執行個體詳細資料頁面的底端,按一下 [Save] (儲存) 將變更套用到執行個體。

針對除 CoreOS 外的所有作業系統,系統會立即套用這項變更;您不需要重新啟動執行個體。針對 CoreOS 發行版,您需要重新啟動執行個體,變更才會生效。如要重新啟動,請對執行個體先後執行停止啟動作業。

當您建立執行個體時,在執行個體中繼資料中設定 enable-oslogin

  1. 在 GCP 主控台中,前往「VM Instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  2. 按一下 [建立執行個體]
  3. 在「Create a new instance」 (建立新執行個體) 頁面上,填入您要為執行個體 設定的屬性。
  4. 在「Metadata」(中繼資料) 部分,新增鍵為 enable-oslogin、值為 TRUE 的中繼資料項目。此外,將值設為 FALSE 即可為執行個體停用這項功能。
  5. 按一下 [Create] (建立) 來建立執行個體。

gcloud

在全專案中繼資料中設定 enable-oslogin,以將其套用至您專案中的所有執行個體:

使用 gcloud 指令列工具中的 project-info add-metadata 指令,然後設定 oslogin=TRUE 以啟用 OS 登入:

gcloud compute project-info add-metadata --metadata enable-oslogin=TRUE

此外,您可以將 enable-oslogin 設為 FALSE,停用 OS 登入功能。

針對並未執行 CoreOS 的 VM,系統會立即套用這項變更;您不需要重新啟動執行個體。針對 CoreOS 發行版,您需要重新啟動執行個體,變更才會生效。

在現有執行個體的中繼資料中設定 enable-oslogin

使用 gcloud 指令列工具中的 instances add-metadata 指令,然後設定 oslogin=TRUE 以啟用 OS 登入:

gcloud compute instances add-metadata [INSTANCE_NAME] --metadata enable-oslogin=TRUE

此外,您可以將 enable-oslogin 設為 FALSE,為執行個體停用 OS 登入功能。

針對除 CoreOS 外的所有作業系統,系統會立即套用這項變更;您不需要重新啟動執行個體。針對 CoreOS 發行版,您需要重新啟動執行個體,變更才會生效。

當您建立執行個體時,在執行個體中繼資料中設定 enable-oslogin

使用 gcloud 指令列工具中的 instances create 指令,然後設定 oslogin=TRUE 以啟用 OS 登入:

gcloud compute instances create [INSTANCE_NAME] --metadata enable-oslogin=TRUE

此外,您可以將 enable-oslogin 設為 FALSE,為執行個體停用 OS 登入功能。

除了必要的中繼資料值,您的執行個體還必須安裝最新版本的 Linux 訪客環境。如果您的某些執行個體執行的是您所匯入的自訂映像檔,請在這些執行個體上安裝 Linux 訪客環境以啟用 OS 登入。

在您啟用專案中執行個體的 OS 登入功能後,請授予使用者連線至這些執行個體的權限

在使用者帳戶上設定 OS 登入角色

授予 OS 登入 IAM 角色

在專案中的一或多個執行個體上啟用 OS 登入功能後,這些執行個體只會接受擁有必要 IAM 角色的使用者帳戶連線要求,而且這些帳戶必須來自您的專案或機構:

舉例來說,您可以按照以下程序,將執行個體存取權授予使用者:

  1. 將必要的執行個體存取權角色授予使用者。使用者必須具備以下角色:

  2. 如果您是機構管理員,並且想讓機構外使用者存取您的執行個體,請在機構層級roles/compute.osLoginExternalUser 授予該使用者。

除非您直接將您的執行個體詳情或外部 IP 地址提供給使用者,否則他們將無法查看這些詳細資訊。如要允許使用者查看執行個體的詳細資訊,對方必須取得額外的 IAM 角色。舉例來說,roles/compute.viewer 角色允許使用者查看專案中的所有資源,包括執行個體詳細資訊。

撤銷 OS 登入的 IAM 角色

如要撤銷使用者的執行個體存取權限 (用來使用 OS 登入功能),只要從他們的使用者帳戶移除使用者角色即可。使用者仍然擁有與自身帳戶關聯的公開 SSH 金鑰,但這些金鑰已無法在您的執行個體上使用。

連線至執行個體

設定必要的角色後,請使用 Compute Engine 工具連線至執行個體。Compute Engine 會自動產生安全殼層 (SSH) 金鑰組,並將其連結到您的使用者帳戶。

或者,如果您自行建立安全殼層 (SSH) 金鑰組並將公開金鑰新增到您的使用者帳戶,可以使用第三方工具連線至執行個體。執行個體會從使用者帳戶取得公開金鑰,並在您提供正確的使用者名稱與相配的私密安全殼層 (SSH) 金鑰組時,允許您連線至執行個體。

連線至執行個體之後,請參閱預期的登入行為一節。

將執行個體存取權授予機構外的使用者

根據預設,機構外的使用者無法設定機構內執行個體的安全殼層 (SSH) 金鑰組,系統也無法將機構內執行個體的存取權授予上述使用者。在某些情況下,您可能需要將執行個體存取權授予其他機構使用者或是擁有 Google gmail.com 個人帳戶的使用者。

roles/compute.osLoginExternalUser IAM 角色可讓外部 Google 帳戶設定 POSIX 帳戶資訊,藉此與其他 OS 登入角色進行互動。

roles/compute.osLoginExternalUser 和其他必要的 OS 登入執行個體存取權角色授予機構外的使用者。

  1. 前往專案和機構選擇頁面。

    前往專案和機構選擇頁面

  2. 在「Organization」(機構) 下拉式選單中,選取您的機構。
  3. 點選 [All] (全部),瀏覽您的所有機構。
  4. 按一下機構名稱。
  5. 點選 [Add] (新增) 即可為使用者新增角色。
  6. 針對您要設定執行個體存取權的使用者,指定使用者名稱。
  7. 按一下 [Select a role] (請選擇角色),指定您想要授予使用者的角色。
  8. 選取 [Compute OS Login External User] (Compute OS 登入外部使用者) 角色,這是「Compute Engine」角色清單的其中一個選項。
  9. 點選 [Add] (新增),確認您要將選取的角色授予使用者。
  10. 如果您尚未授予角色,也可以在專案或機構層級將其他 OS 登入執行個體存取權角色授予使用者。

使用者現在可以連接至專案中已啟用 OS 登入功能的執行個體。

新增安全殼層 (SSH) 金鑰組至使用者帳戶

您可以將公開安全殼層 (SSH) 金鑰組與下列使用者帳戶類型建立關聯:

您可以使用 gcloud 指令列工具OS Login API 將安全殼層 (SSH) 金鑰組新增至您的帳戶。此外,假如您是貴機構的網域管理員,則可以使用 Directory API 將安全殼層 (SSH) 金鑰組新增至機構中的使用者帳戶。

gcloud

只有 Google Cloud SDK 184 以上的版本才能使用 gcloud compute os-login 指令。

使用 gcloud 指令列工具來將公開安全殼層 (SSH) 金鑰組與帳戶建立關聯。

gcloud compute os-login ssh-keys add \
    --key-file [KEY_FILE_PATH] \
    --ttl [EXPIRE_TIME]

其中:

  • [KEY_FILE_PATH] 是本機工作站上公開安全殼層 (SSH) 金鑰組的路徑。
  • [EXPIRE_TIME] 是設定公開安全殼層 (SSH) 金鑰組到期時間的選用標記。舉例來說,您可以指定 30m,則安全殼層 (SSH) 金鑰組將在 30 分後到期。這個標記的有效單位如下:s 表示秒數、m 表示分鐘數、h 表示小時數,而 d 表示天數。您可以將這個值設為 0,表示沒有到期時間。

OS Login API

使用 OS Login API 來將公開安全殼層 (SSH) 金鑰組與帳戶建立關聯。

POST https://oslogin.googleapis.com/v1/users/[ACCOUNT_EMAIL]:importSshPublicKey

{
 "key": "[SSH_KEY]",
 "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
}

其中:

  • [ACCOUNT_EMAIL] 是電子郵件地址,代表代管使用者帳戶。
  • [SSH_KEY] 是您要套用至帳戶的公開金鑰。
  • [EXPIRATION_TIMESTAMP] 是金鑰的到期時間,以紀元後微秒為單位。

Directory API

假如您是貴機構的網域管理員,則可以使用 Directory API 參考資料,將安全殼層 (SSH) 金鑰組新增至機構中的其他使用者帳戶。舉例來說,使用一或多個 SSH sshPublicKeys 項目為 directory.users.update 方法建立 PUT 要求。

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
 "sshPublicKeys": [
  {
   "key": "[SSH_KEY]",
   "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
  },
  {
   "key": "[SSH_KEY]",
   "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
  }
 ]
}

其中:

  • [USER_ID_KEY] 是使用者的不變 ID。
  • [SSH_KEY] 是您想套用至帳戶的公開金鑰。
  • [EXPIRATION_TIMESTAMP] 是金鑰的到期時間,以紀元後微秒為單位。

如要移除帳戶的所有金鑰,請指定 "sshPublicKeys": null 為主體:

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
  "sshPublicKeys": null
}

其中 [USER_ID_KEY] 是使用者的不變 ID。

在您將金鑰新增到您的使用者帳戶後,您可以使用第三方工具和帳戶所用的使用者名稱連線到執行個體。您的機構管理員可以變更這個使用者名稱。您可以執行 gcloud compute os-login describe-profile 指令,找出您帳戶的使用者名稱:

gcloud compute os-login describe-profile

name: [ACCOUNT_EMAIL]
posixAccounts:
⋮
  username: [USER_NAME]
⋮

其中:

  • [ACCOUNT_EMAIL] 是電子郵件地址,代表代管使用者帳戶。
  • [USER_NAME] 是建立 SSH 連線的使用者名稱。根據預設,這是從 [ACCOUNT_EMAIL] 產生的資訊。

使用 Directory API 修改使用者帳戶

如果您是機構管理員,則可以修改使用者帳戶的執行個體登入設置,以及許多其他使用者屬性。要瞭解如何讓使用者成為管理員,請參閱 Directory API 指南。您可以使用此 API 新增和刪除使用者的安全殼層 (SSH) 金鑰組,修改 POSIX 帳戶資訊,以及更改用戶連線至執行個體的使用者名稱。

舉例來說,為 directory.users.update 方法 建立 PUT 要求,並指定一或多個屬性來變更使用者帳戶:

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
 "posixAccounts": [
   {
    "username": "[USER_NAME]",
    "uid": "[UID]",
    "gid": "[GID]",
    "homeDirectory": "[USER_HOME_PATH]",
    "shell": "[SHELL_PATH]"
   }
  ],
}

其中:

  • [USER_ID_KEY] 是使用者的不變 ID。
  • [USER_NAME] 是 Compute Engine 新增至使用者執行個體的使用者名稱。這個值在機構中不得重複。
  • [UID] 是這個使用者在執行個體上的使用者 ID。此屬性必須是介於 100165000 之間的值,或是介於 655352147483647 之間的值。UID 在機構中不得重複。
  • [GID] 是這個使用者在執行個體上的所屬群組 ID。
  • [USER_HOME_PATH] 是這個使用者在執行個體上的主目錄路徑。例如,/home/example_username
  • [SHELL_PATH] 是使用者在連線至執行個體後的預設殼層路徑。例如,/bin/bash/bin/sh

如要瞭解可編輯的所有帳戶屬性,請參閱 Directory API 參考資料

預期的登入行為

  • 在使用 OS 登入的部分執行個體上,您可能在建立連線後收到以下錯誤訊息:

    /usr/bin/id: cannot find name for group ID 123456789

    忽略這則錯誤訊息。這個錯誤並不會影響您的執行個體。

  • 如果 G Suite 管理員未設定使用者名稱,OS 登入會合併使用者 Google 個人資料關聯電子郵件中的使用者名稱與網域,來產生預設 Linux 使用者名稱。這個命名慣例可確保唯一性。例如,如果 Google 個人資料的關聯使用者電子郵件為 user@example.com,則產生的使用者名稱為 user_example_com

  • 使用 gcloud compute ssh 指令登入執行個體時,系統會顯示下列訊息:

    WARNING: Using OS Login user [user_example_com] instead of default user [user]

    看到這則訊息,即可確認您當下是透過 OS 登入個人資料進行登入。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件