管理機構中的 OS 登入


本文說明如何使用 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

    1. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    2. Set a default region and zone.

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

OS 登入組織政策

您可以在機構中設定 OS 登入限制,確保所有新專案和在這些新專案中建立的 VM 執行個體都已啟用 OS 登入功能。

設定此限制後,即適用於以下狀況:

  • 所有新專案的專案中繼資料都包含 enable-oslogin=true
  • 對於新 VM、現有 VM、新專案和現有專案,在執行個體或專案中繼資料中,將 enable-oslogin 設為 false 的要求都會遭到拒絕。

限制

下列產品、功能和 VM 不支援 OS Login:
  • Cloud Data Fusion 6.1.4 版和更早版本
  • Cloud Composer 1
  • Windows Server 和 SQL Server VM
  • Fedora CoreOS VM。如要管理使用這些映像檔建立的 VM 執行個體存取權,請使用 Fedora CoreOS 啟動系統

Cloud Data Fusion 和 Cloud Composer 的解決方法

如要在使用 Cloud Data Fusion 和 Cloud Composer 的機構中啟用 OS 登入,請在機構層級啟用 OS 登入限制,然後針對受影響的專案,選擇性停用專案或資料夾的限制。

如要進一步瞭解如何編輯機構政策,請參閱建立及編輯政策

啟用機構政策

如要啟用 OS 登入政策,您可以使用 Google Cloud CLI 在特定專案和資料夾上設定 OS 登入限制。您也可以使用 Google Cloud 控制台或 Google Cloud CLI,為整個機構設定 OS 登入限制。

主控台

如要透過主控台設定 OS 登入組織政策,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。

    前往「Organization policies」(組織政策) 頁面

  2. 在政策清單中,按一下「Require OS Login」(需要 OS 登入),即可查看 OS 登入限制。
  3. 按一下 [Edit] (編輯) 即可編輯現有的 OS 登入限制。
  4. 在「Edit」(編輯) 頁面選取 [Customize] (自訂)
  5. 如要強制執行這項限制,請選取 [On] (開啟)
  6. 按一下 [Save] (儲存) 以套用限制條件設定。

gcloud

如要設定 OS 登入組織政策,請使用 gcloud beta resource-manager org-policies enable-enforce 指令。

  1. 找出您的機構 ID

    gcloud organizations list
  2. 在您的機構中設定限制。請將 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 登入執行個體存取權角色授予機構外部的使用者,請完成以下步驟:

  1. 前往 Google Cloud 控制台的「IAM & Admin」(IAM 與管理) 頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 按一下「Select a project」(選取專案) 下拉式選單。在隨即顯示的「選取資源」對話方塊中,按照下列步驟選取機構:
    1. 點選機構下拉式選單,即可查看所有機構。
    2. 從下拉式選單中選取機構。
  3. 點選「授予存取權」,即可為使用者新增角色。
  4. 在「New principals」(新增主體) 欄位中,新增要設定執行個體存取權的使用者電子郵件地址。
  5. 從「角色」下拉式選單中,選取「Compute OS 登入外部使用者」角色。
  6. 按一下 [儲存]
  7. 如果您尚未授予角色,也可以在專案或機構層級將其他 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 管理 SSH 金鑰。
  • 限制或允許機構外部使用者存取 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 IdentityGoogle Workspace 使用者設定。如果您是 Google Workspace 超級管理員,則可以使用 Directory API 為 Google Workspace 或 Cloud Identity 使用者帳戶完成以下工作:

  • 修改執行個體登入設定
  • 讓使用者成為管理員
  • 修改帳戶名稱和電子郵件等使用者屬性
  • 新增和刪除使用者的安全殼層金鑰
  • 修改 POSIX 帳戶資訊
  • 變更使用者在執行個體上連線的使用者名稱

下列範例說明如何使用 Directory API 修改或移除使用者帳戶。如要進一步瞭解可編輯的帳戶屬性,請參閱 Directory API 參考資料

修改帳戶屬性

如要修改使用者的 POSIX 帳戶資訊或管理使用者的 SSH 金鑰,請對 directory.users.update 方法發出 PUT 要求,並指定一或多個要在使用者帳戶中變更的屬性。

如要修改使用者的 posixAccounts 屬性,您必須在要求中指定目前或新的 usernameuidgid 值。

如果您修改使用者的 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。 這項屬性的值必須介於 100160000 之間,或是介於 655352147483647 之間。如要存取容器最佳化的 OS,UID 的值必須介於 65536214748646 之間。UID 在機構中不得重複。
  • GID:使用者所屬 VM 的群組 ID。
  • USER_HOME_PATH:(選用) 使用者的 VM 主目錄。例如:/home/example_username
  • SHELL_PATH:(選用) 使用者連線至執行個體後的預設殼層路徑。例如 /bin/bash/bin/sh
  • KEY_VALUE:公開安全殼層金鑰值。
  • EXPIRATION_TIME:(選用) 金鑰的到期時間,以自 Epoch 紀元起算的微秒為單位 (1 秒 = 106 微秒)。

移除帳戶資源

如要清除使用者的 posixAccountssshPublicKeys 資料,請對 directory.users.update 方法發出 PUT 要求,並將 posixAccountssshPublicKeys 欄位設為 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 登入 POSIX 群組設定。

您必須是機構管理員,才能刪除 OS 登入 POSIX 群組設定。

  1. 如果您不知道機構資源 ID,請取得機構資源 ID
  2. 列出貴機構的所有 POSIX 群組。記下每個群組的電子郵件地址。
  3. 針對機構中的每個 POSIX 群組執行下列操作:
    1. 擷取群組資訊。請注意 posixGroups.gid
    2. 刪除 POSIX 群組
  4. (選用) 列出機構中的所有 POSIX 群組,確認所有群組都已刪除。如果所有群組都已成功刪除,回應會留白。

使用 OS 登入的 Linux 群組頻率限制

使用 OS 登入功能的 Linux 群組會使用 oslogin.googleapis.com/metadata_server_groups_requests 配額。根據預設,特定區域的每個專案配額上限為每分鐘 60 個要求

如要提高頻率限制,請前往 Google Cloud 控制台的「配額」頁面申請調整配額

前往配額頁面

搭配 OS 登入功能使用員工身分聯盟

使用員工身分聯盟的機構可以透過 OS 登入管理 VM 的存取權。為機構啟用員工身分聯盟後,OS Login 會使用憑證型驗證,而非金鑰型驗證來驗證使用者身分。

事前準備

限制

  • 您無法搭配使用員工身分聯盟與 OS Login 雙重驗證 (2FA)。
  • 如要搭配 OS 登入使用員工身分聯盟,連線的 VM 必須安裝 OpenSSH 7.4 以上版本。
  • 如果貴機構使用員工身分聯盟,您就無法存取 VM 的序列埠

連線至使用 OS 登入和員工身分聯盟的 VM

使用Google Cloud 控制台、gcloud CLI 或其他 SSH 用戶端,連線至使用 OS 登入和員工身分同盟的 VM。

主控台

使用 SSH-in-browser 連線至使用 OS Login 和員工身分同盟的 VM 時,嘗試連線時,Compute Engine 會代您設定 SSH 憑證。

如要連線至 VM,請按照下列步驟操作:

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

gcloud

使用員工身分聯盟透過 gcloud CLI 連線至使用 OS Login 的 VM 時,Compute Engine 會在您嘗試連線時,代表您設定 SSH 憑證。

執行 gcloud beta compute ssh 指令,使用 SSH 連線至 VM:

    In the Google Cloud console, activate Cloud Shell.

    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.

  1. 執行下列指令:

    gcloud beta compute ssh --project=PROJECT_ID --zone=ZONE VM_NAME

    更改下列內容:

    • PROJECT_ID:含有 VM 的專案 ID
    • ZONE:VM 所在的可用區名稱
    • VM_NAME:VM 的名稱

    如果已為 Google Cloud CLI 設定預設屬性,則可省略此指令中的 --project--zone 旗標。例如:

    gcloud compute ssh VM_NAME
  2. IAP Desktop

    使用 IAP Desktop 連線至使用員工身分聯盟的 OS Login VM 時,Compute Engine 會在您嘗試連線時,代表您設定 SSH 憑證。

    如要使用 IAP Desktop 連線至 VM,請按照下列步驟操作:

    1. 如果尚未在工作站上安裝 IAP Desktop,請先完成這項程序。

    2. 開啟 IAP Desktop。「新增專案」視窗隨即開啟。

    3. 系統出現提示時,請 使用員工身分聯盟登入

    4. 在「新增專案」視窗中,輸入要連線的 VM 所在專案的 ID 或名稱。

    5. 在「Project Explorer」視窗中,再次以滑鼠右鍵按一下 VM 名稱,然後選取「Connect」,即可連線至 VM。

    SSH 用戶端

    如要使用 SSH 用戶端連線至使用 OS 登入和員工身分同盟的 VM,請按照下列步驟操作:

    1. 如果還沒有安全殼層金鑰,請建立一個
    2. 使用 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
        

        更改下列內容:

      • PROJECT_ID:專案 ID,用於存放您要連線的 VM。

      • LOCATION:您要連線的 VM 所在的區域。

      • PUBLIC_KEY:安全殼層公開金鑰檔案的內容。

    3. user.signSshPublicKey 方法的輸出內容複製 SSH 憑證,並將內容儲存在新檔案中。

    4. 執行下列指令,設定 SSH 憑證檔案的權限:

      sudo chmod 600 FILE_NAME
      

      FILE_NAME 換成檔案名稱。

    5. 使用下列指令連線至 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 位址。

後續步驟