管理中繼資料中的安全殼層金鑰

本指南說明如何手動建立安全殼層金鑰及編輯公開安全殼層金鑰中繼資料,藉此控管 Linux 執行個體的存取權限。要瞭解管理中繼資料中的安全殼層金鑰是否為最適合您的選項,請參閱選擇存取方式一文。

您也可以透過 Google Cloud Platform Console 連線至執行個體,讓 Compute Engine 自動管理金鑰的整個生命週期,或是使用 SDK 中的 gcloud 指令列工具,其中 Compute Engine 會為您設定永久的安全殼層金鑰中繼資料。

如果您是需要手動管理安全殼層金鑰的進階使用者,請參閱使用 OS 登入管理執行個體存取權一文。如果您在執行個體上使用 OS 登入管理安全殼層金鑰,這些執行個體上依中繼資料提供的安全殼層金鑰設定會遭到停用。

事前準備

這項工作需要的權限

如要執行這項工作,您必須具備以下權限

  • 執行個體的 compute.instances.setMetadata 權限 (如要設定執行個體上的中繼資料)
  • 專案的 compute.projects.setCommonInstanceMetadata 權限 (如要設定全專案的中繼資料)
  • 專案的 iam.serviceAccounts.actAs 權限 (如要設定全專案的中繼資料)

手動管理金鑰的風險

如果您透過 GCP Console、gcloud 指令列工具或 API 自行建立及管理公開安全殼層金鑰,您必須追蹤已使用的金鑰,並為不再擁有存取權的使用者刪除公開安全殼層金鑰。比方說,如果團隊成員離開您的專案,請將他們的公開安全殼層金鑰從中繼資料中移除,以免他們繼續存取您的執行個體。

此外,gcloud 工具或 API 呼叫指定不正確也可能會清除您專案或執行個體中的所有公開安全殼層金鑰,造成專案成員的連線中斷。

如果您不確定是否要管理自己的金鑰,請改為使用 Compute Engine 工具連線至您的執行個體

總覽

藉由建立和管理安全殼層金鑰,您可以讓使用者透過第三方工具存取 Linux 執行個體。

安全殼層金鑰由下列檔案組成:

  • 套用至執行個體層級中繼資料或全專案中繼資料的公開安全殼層金鑰檔案。
  • 使用者儲存在其本機裝置上的私密安全殼層金鑰檔案。

如果使用者提供自己的私密安全殼層金鑰,就可以透過第三方工具連線至任何使用相配的公開安全殼層金鑰檔案進行設定的執行個體,即使他們並非您的 Google Cloud Platform 專案成員。因此,您可以透過變更一或多個執行個體的公開安全殼層金鑰中繼資料,控管使用者可以存取的執行個體。

如要編輯公開安全殼層金鑰中繼資料:

  1. 決定要用來編輯中繼資料的工具:

  2. 如果您需要為 Linux 執行個體新增使用者,請按照以下程序準備好他們的公開安全殼層金鑰:

  3. 編輯公開安全殼層金鑰中繼資料,為 Linux 執行個體新增或移除使用者。

  4. 透過第三方工具連線至您的 Linux 執行個體,確定每個公開安全殼層金鑰都已正確地新增或移除。唯有當使用者的公開安全殼層金鑰可透過中繼資料伺服器提供給執行個體,並且擁有相配的私密安全殼層金鑰時,使用者才能連線至執行個體。

建立新的安全殼層金鑰

如果您沒有現有的私密安全殼層金鑰檔案和相配的公開安全殼層金鑰檔案可用,請產生新的安全殼層金鑰。如果您想要使用現有的安全殼層金鑰,請指定公開安全殼層金鑰檔案的位置

Linux 和 macOS

在 Linux 或 macOS 工作站上,您可以使用 ssh-keygen 工具產生金鑰。

  1. 在您的工作站開啟終端機,然後使用 ssh-keygen 指令產生新的金鑰。指定 -C 標記,以您的使用者名稱新增註解。

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    其中:

    • [KEY_FILENAME] 是您的安全殼層金鑰檔案所要使用的名稱。例如,一個名為 my-ssh-key 的檔案會產生一個名為 my-ssh-key 的私密金鑰檔案和一個名為 my-ssh-key.pub 的公開金鑰檔案。
    • [USERNAME] 是連線至執行個體的使用者名稱。

    此指令會產生一個私密安全殼層金鑰檔案和一個結構如下的相配公開安全殼層金鑰:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    其中:

    • [KEY_VALUE] 是您產生的金鑰值。
    • [USERNAME] 是要對其套用此金鑰的使用者。
  2. 限制對您私密金鑰的存取,使您成為唯一能讀取私密金鑰的人,並防止私密金鑰遭到他人覆寫。

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    其中 [KEY_FILENAME] 是您的安全殼層金鑰檔案所要使用的名稱。

為每個需要新金鑰的使用者重複此程序。然後,指定您產生的公開安全殼層金鑰以及任何您要新增至專案或執行個體的現有公開安全殼層金鑰的位置。

Windows

Windows 未內建可產生安全殼層金鑰的工具,因此如果您使用的是 Windows 工作站,必須使用第三方工具產生安全殼層金鑰。以下說明如何使用 PuTTYgen 工具產生安全殼層金鑰。

  1. 下載 puttygen.exe

  2. 執行 PuTTYgen。在這個範例中,請執行您下載的 puttygen.exe 檔案。系統隨即會開啟一個視窗,讓您在其中進行金鑰產生設定。

  3. 按一下 [Generate] (產生),並按照畫面上的指示操作,產生新的金鑰。在大多數情況下,您只需接受預設的參數即可,但您產生的金鑰長度至少須為 2,048 位元。產生金鑰後,該工具會顯示您的公開金鑰值。

  4. 在「Key comment」區段中,將現有文字取代為您要對其套用金鑰的使用者名稱。

  5. 或者,您可以輸入「Key passphrase」(金鑰通關密語) 來保障金鑰的安全。

  6. 按一下 [Save private key] (儲存私密金鑰),將您的私密金鑰寫入副檔名為 .ppk 的檔案中。

  7. 按一下 [Save public key] (儲存公開金鑰),將您的公開金鑰寫入檔案,以備之後使用。請暫時不要關閉 PuTTYgen 視窗。

    正確格式化的公開金鑰會顯示於 PuTTYgen 畫面上方:

    PuTTYgen 公開金鑰。

    此公開金鑰的結構如下:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    其中:

    • [KEY_VALUE] 是您產生的金鑰值。
    • [USERNAME] 是要對其套用此金鑰的使用者。

對您需要為其建立金鑰的每位使用者重複這個程序。然後,如果您有其他要新增至專案或執行個體的使用者的公開安全殼層金鑰,請現在就指定這些公開安全殼層金鑰的位置。否則,請格式化您建立的公開安全殼層金鑰

指定安全殼層金鑰的位置

您可能需要指定安全殼層金鑰位置的原因有很多。例如,如果要將使用者的公開安全殼層金鑰新增至專案或執行個體,您將需要金鑰的公開金鑰檔案存取權。另外,在連線至 Linux 執行個體之前,您也可能需要先指定私密安全殼層金鑰檔案的位置。

建立完成的安全殼層金鑰會儲存於預設的位置。公開和私密安全殼層金鑰檔案的預設儲存位置及名稱會依據建立金鑰時使用的工具而有不同。

Linux 和 macOS

如果您使用 ssh-keygen 工具在 Linux 或 macOS 工作站建立金鑰,金鑰會儲存於以下位置:

  • 公開金鑰檔案:~/.ssh/[KEY_FILENAME].pub
  • 私密金鑰檔案:~/.ssh/[KEY_FILENAME]

其中 [KEY_FILENAME] 是安全殼層金鑰檔案的名稱,亦即您在建立金鑰時設定的名稱。

如果需要為專案或執行個體中繼資料新增或移除公開安全殼層金鑰,請格式化公開安全殼層金鑰檔案

Windows

如果您使用 PuTTYgen 工具在 Windows 工作站建立金鑰,公開金鑰檔案和私密金鑰檔案會儲存於您用以下格式所指定的位置:

  • 公開金鑰:[PUBLIC_KEY_FILENAME]
  • 私密金鑰:[PRIVATE_KEY_FILENAME].ppk

其中 [PUBLIC_KEY_FILENAME][PRIVATE_KEY_FILENAME] 分別是公開和私密安全殼層金鑰的檔案名稱,亦即您初次儲存金鑰時設定的名稱。

預設情況下,使用 PuTTYgen 建立的公開安全殼層金鑰應具有以下格式:

ssh-rsa [KEY_VALUE] [USERNAME]

其中:

  • [KEY_VALUE] 是公開安全殼層金鑰值。
  • [USERNAME] 是執行個體中要套用金鑰的使用者。

如要用正確的格式檢視 PuTTYgen 公開安全殼層金鑰:

  1. 執行 PuTTYgen。如果您沒有 PuTTYgen,請下載並執行 puttygen.exe

  2. 按一下 [Load] (載入),選取並開啟您的公開安全殼層金鑰檔案。

  3. 公開金鑰檔案載入完成後,正確格式化的公開安全殼層金鑰值會顯示於 PuTTYgen 畫面上方:

    PuTTYgen 公開金鑰。

如果需要為專案或執行個體中繼資料新增或移除公開安全殼層金鑰,請格式化公開安全殼層金鑰檔案

gcloud

如果您已透過 gcloud 工具連線至執行個體,即表示金鑰已產生並已套用至您的專案或執行個體。金鑰檔案會位於下列位置:

  • Linux 和 macOS
    • 公開金鑰:$HOME/.ssh/google_compute_engine.pub
    • 私密金鑰:$HOME/.ssh/google_compute_engine
  • Windows:
    • 公開金鑰:C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • 私密金鑰:C:\Users\[USERNAME]\.ssh\google_compute_engine

其中 [USERNAME] 是您在本機工作站的使用者名稱。

如要查看公開安全殼層金鑰的套用對象,請在您的專案中繼資料執行個體中繼資料中搜尋該公開金鑰。如果需要為專案或執行個體中繼資料新增或移除公開安全殼層金鑰,請先格式化公開金鑰檔案

格式化公開安全殼層金鑰檔案

將公開安全殼層金鑰上傳至專案或執行個體中繼資料之前,您必須先檢查您打算新增的每個公開金鑰檔案的格式。

根據您用來編輯中繼資料的工具,格式化您的金鑰,使其能與 GCP Consolegcloud 指令列工具API 方法搭配運作。或者,您也可以變更公開安全殼層金鑰,以新增、編輯或移除到期時間。

主控台

如要檢查公開安全殼層金鑰的格式:

  1. 指定公開安全殼層金鑰檔案的位置並開啟它。

  2. 檢查公開安全殼層金鑰檔案的格式。

    • 如果是設有到期時間的公開安全殼層金鑰,則必須採用以下格式:

      ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      其中:

      • [KEY_VALUE] 是公開安全殼層金鑰值。
      • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
      • [EXPIRE_TIME] 是以 ISO 8601 格式表示的值。例如:2018-12-04T20:12:00+0000
    • 否則,公開安全殼層金鑰必須具有以下格式:

      ssh-rsa [KEY_VALUE] [USERNAME]

      其中:

      • [KEY_VALUE] 是公開安全殼層金鑰值。
      • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
  3. 如果您的金鑰未符合上述其中一種格式,或是您要新增、編輯或移除到期時間,請按照下方的操作說明,將您的公開安全殼層金鑰進行格式化。或者,請保持檔案開啟並將公開安全殼層金鑰新增至專案或執行個體中繼資料

如要為主控台格式化公開安全殼層金鑰:

  1. 製作公開金鑰檔案的副本。將副本交給 Compute Engine 使用,而原始檔案則保留給其他安全殼層設定使用。

  2. 開啟公開金鑰檔案副本。

  3. 修改公開金鑰檔案,使其具有以下格式:

    ssh-rsa [KEY_VALUE] [USERNAME]

    其中:

    • [KEY_VALUE] 是公開安全殼層金鑰值。
    • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。

    或者,如果您想要為公開安全殼層金鑰設定到期時間,請修改檔案使其符合以下格式:

    ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    其中:

    • [KEY_VALUE] 是公開安全殼層金鑰值。
    • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
    • [EXPIRE_TIME] 是以 ISO 8601 格式表示的值。例如:2018-12-04T20:12:00+0000
  4. 儲存您所做的變更並保持檔案開啟。

您現在可以開始將公開安全殼層金鑰新增至專案或執行個體中繼資料

gcloud 或 API

如要檢查公開安全殼層金鑰的格式:

  1. 指定公開安全殼層金鑰檔案的位置並開啟它。

  2. 檢查公開安全殼層金鑰檔案的格式。

    • 如果是設有到期時間的公開安全殼層金鑰,則必須採用以下格式:

      [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      其中:

      • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
      • [KEY_VALUE] 是公開安全殼層金鑰值。
      • [EXPIRE_TIME] 是以 ISO 8601 格式表示的值。例如:2018-12-04T20:12:00+0000
    • 否則,公開安全殼層金鑰必須具有以下格式:

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      其中:

      • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
      • [KEY_VALUE] 是公開安全殼層金鑰值。
  3. 如果您的金鑰未符合上述其中一種格式,或是您要新增、編輯或移除到期時間,請按照下方的操作說明,將您的公開安全殼層金鑰進行格式化。或者,請保持檔案開啟並將公開安全殼層金鑰新增至專案或執行個體中繼資料

如要為 gcloud 工具或 API 格式化公開安全殼層金鑰:

  1. 製作公開金鑰檔案的副本。將副本交給 Compute Engine 使用,而原始檔案則保留給其他安全殼層設定使用。

  2. 開啟公開金鑰檔案副本。根據預設,此檔案應具有以下格式:

    ssh-rsa [KEY_VALUE] [USERNAME]

    其中:

    • [KEY_VALUE] 是公開安全殼層金鑰值。
    • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
  3. 複製位於檔案末尾的使用者名稱,並將其貼到檔案的開頭,並在後面加上冒號。公開安全殼層金鑰現在應該具有以下格式:

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    其中:

    • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
    • [KEY_VALUE] 是公開安全殼層金鑰值。
  4. 或者,您也可以為金鑰設定到期時間,方法是刪除 JSON 中的第二個 [USERNAME],並在金鑰檔案末尾加上 google-ssh,再在後面加上 userNameexpireOn 欄位。

    [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    其中:

    • [USERNAME] 是在建立這個安全殼層金鑰時為其指定的使用者。
    • [KEY_VALUE] 是公開安全殼層金鑰值。
    • [EXPIRE_TIME] 是以 ISO 8601 格式表示的值。例如:2018-12-04T20:12:00+0000
  5. 儲存您所做的變更並保持檔案開啟。

您現在可以開始將公開安全殼層金鑰新增至專案或執行個體中繼資料

編輯公開安全殼層金鑰中繼資料

使用者透過第三方工具存取 Linux 執行個體的能力,取決於提供給執行個體的公開安全殼層金鑰。您可以透過編輯中繼資料 (公開安全殼層金鑰和相關資訊皆儲存於此) 來控管要提供給 Linux 執行個體的公開安全殼層金鑰。公開安全殼層金鑰中繼資料有三種:

  • 全專案公開安全殼層金鑰:您可利用此種中繼資料來為使用者提供一般存取權限,即連線至專案中大部分執行個體的能力。
  • 允許或封鎖全專案公開安全殼層金鑰:您可利用此種中繼資料值來允許或封鎖特定執行個體上的全專案公開安全殼層金鑰。根據預設,執行個體會接受所有全專案公開安全殼層金鑰。如果您想要將執行個體的使用對象限制為具有執行個體層級公開安全殼層金鑰的使用者,您可以封鎖全專案公開安全殼層金鑰。
  • 執行個體層級公開安全殼層金鑰:您可以利用此種中繼資料來為使用者提供特殊存取權限,即連線至專案中特定執行個體的能力,即使該執行個體已封鎖全專案公開安全殼層金鑰。

新增或移除全專案公開安全殼層金鑰

利用全專案公開安全殼層金鑰為使用者提供存取 Linux 執行個體的權限。全專案公開安全殼層金鑰可讓使用者存取允許全專案公開安全殼層金鑰的專案中所有 Linux 執行個體。如果某個執行個體封鎖全專案公開安全殼層金鑰,使用者即無法使用全專案公開安全殼層金鑰連線至該執行個體,除非另外將同樣的公開金鑰新增至執行個體中繼資料

主控台

如要在 GCP Console 新增或移除全專案公開安全殼層金鑰:

  1. 在 Google Cloud Platform Console 中,前往專案的「Metadata」(中繼資料) 頁面。

    前往「Metadata」(中繼資料) 頁面

  2. 在「SSH Keys」(安全殼層金鑰) 下方,按一下 [Edit] (編輯)。

  3. 修改全專案公開安全殼層金鑰:

    • 如要新增公開安全殼層金鑰,請按一下 [Add item] (新增項目),隨即會開啟文字方塊。
    • 複製公開安全殼層金鑰檔案的內容,並將其貼到文字方塊中。

      對每個您要新增的公開安全殼層金鑰重複同樣的步驟。

    • 如要移除公開安全殼層金鑰,請按一下金鑰旁邊的移除按鈕:

      PuTTYgen 公開金鑰。

      對每個您要移除的公開安全殼層金鑰重複同樣的步驟。

  4. 安全殼層金鑰編輯完成後,請按一下 [Save] (儲存)

gcloud

如要使用 gcloud 工具新增或移除全專案公開安全殼層金鑰:

  1. 如果專案已具有全專案公開安全殼層金鑰,請您從中繼資料取得這些公開安全殼層金鑰:

    1. 取得專案的現有中繼資料:

      gcloud compute project-info describe
      
    2. 在輸出中,找到 ssh-keys 中繼資料值:

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...
      

      其中:

      • [USERNAME_1][USERNAME_2] 是現有金鑰的使用者名稱。
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] 是已套用至專案的公開金鑰值。
    3. 複製公開安全殼層金鑰。

  2. 在本機工作站上建立並開啟一個新的文字檔案。

  3. 在檔案中,建立一份包含所有您要新增或存放在專案中繼資料中的公開安全殼層金鑰清單。如果您已有全專案金鑰,則未列入清單的任何金鑰都將遭到移除。

    例如,下方的樣本清單未列出 [USERNAME_1] 的安全殼層金鑰,因此其金鑰遭到移除。此份清單將保留 [USERNAME_2] 的安全殼層金鑰,並新增 [USERNAME_3] 的安全殼層金鑰,因為這些安全殼層金鑰都已列入清單中。

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    其中:

    • [USERNAME_1][USERNAME_2][USERNAME_3] 是公開安全殼層金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
  4. 儲存並關閉檔案。

  5. 在指令提示字元中,使用 compute project-info add-metadata 指令設定全專案 ssh-keys值。加入 --metadata-from-file 標記並指定清單檔案的路徑。

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    其中 [LIST_PATH] 是公開安全殼層金鑰清單的路徑。

API

使用 instances.setMetadata 方法新增或移除全專案公開金鑰。

  1. 使用 projects.get 方法取得中繼資料 fingerprint 值。如果您想要沿用現有的全專案金鑰,請取得現有的 ssh-keys 值。

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [FINGERPRINT] 是此特定中繼資料設定的專屬 ID,可防止您意外覆寫並行的變更。
    • [USERNAME_1][USERNAME_2] 是現有金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] 是已套用至專案的公開金鑰值。
  2. 建立一份包含所有您要新增或存放在全專案中繼資料中的公開安全殼層金鑰清單。如果全專案中繼資料中已含有公開安全殼層金鑰,則未列入清單的任何金鑰都將遭到移除。

    在本範例中,檔案包含了一個新的 [KEY_VALUE],後面接著您在前個步驟取得的其中一個現有金鑰值。當中漏列了 [EXISTING_KEY_VALUE_1],因此其金鑰將在下個步驟中從執行個體移除。使用 \n 字元來分隔不同的金鑰值。

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    其中:

    • [USERNAME_1][USERNAME_2][USERNAME_3] 是金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
  3. 使用 projects.setcommoninstancemetadata 方法設定全專案 ssh-keys 值。請納入 fingerprint 值,以確保您不會覆寫此中繼資料值的任何並行變更。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [USERNAME_1][USERNAME_2][USERNAME_3] 是金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
    • [FINGERPRINT] 是您之前使用 projects.get 方法取得的指紋。

安全殼層金鑰編輯完成後,請試著透過第三方工具連線至 Linux 執行個體,測試您的變更。

如果遇到問題,請檢查您嘗試連線的執行個體中繼資料。如果執行個體層級中繼資料設為封鎖全專案安全殼層金鑰,或含有已淘汰的執行個體限定 sshKeys 值,該執行個體將會忽略所有全專案安全殼層金鑰。如要將全專案金鑰套用至執行個體,請確認該執行個體允許全專案公開安全殼層金鑰,並從執行個體中繼資料中移除已淘汰的執行個體限定 sshKeys 值 (如有)。

從 Linux 執行個體允許或封鎖全專案公開安全殼層金鑰

如果要讓執行個體忽略全專案公開安全殼層金鑰,並且只使用執行個體層級金鑰,您可以從執行個體封鎖全專案公開安全殼層金鑰。這麼做能將可存取該執行個體的對象限制為公開安全殼層金鑰已儲存在執行個體層級中繼資料中的使用者。如果您想要讓執行個體同時使用全專案和執行個體層級公開金鑰,請將執行個體中繼資料設為允許全專案安全殼層金鑰。這麼做能允許公開安全殼層金鑰已儲存在執行個體層級中繼資料中的任何使用者存取執行個體。

主控台

如要從 GCP Console 允許或封鎖全專案公開安全殼層金鑰:

  1. 在 Google Cloud Platform Console 中,前往「VM instances」(VM 執行個體) 頁面。

    前往「Instances」(執行個體) 頁面

  2. 按一下您要修改的執行個體名稱。

  3. 按一下工具列上的 [Edit] (編輯)

  4. 移至「SSH Keys」(安全殼層金鑰) 下方的 [Block project-wide SSH keys] (封鎖全專案安全殼層金鑰) 核取方塊。

    • 如要封鎖具有全專案安全殼層金鑰的使用者,使其無法連線至此執行個體,請勾選 [Block project-wide SSH keys] (封鎖全專案金鑰)
    • 如要允許具有全專案安全殼層金鑰的使用者連線至這個執行個體,請取消勾選 [Block project-wide SSH keys] (封鎖全專案安全殼層金鑰)
  5. 安全殼層金鑰的連線設定編輯完成後,請按一下 [Save] (儲存)

gcloud

如要從 Linux 執行個體允許或封鎖全專案公開安全殼層金鑰,請將 block-project-ssh-keys 中繼資料值新增至執行個體:

  • 如要封鎖全專案公開安全殼層金鑰,請將中繼資料值設為 TRUE

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    其中 [INSTANCE_NAME] 是要封鎖全專案公開安全殼層金鑰的執行個體名稱。

  • 如要允許全專案公開安全殼層金鑰,請將中繼資料值設為 FALSE

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    其中 [INSTANCE_NAME] 是要允許全專案公開安全殼層金鑰的執行個體名稱。

API

如要從 Linux 執行個體封鎖或允許全專案公開安全殼層金鑰:

  • 若要封鎖全專案公開安全殼層金鑰,請將 block-project-ssh-keys 中繼資料值新增至執行個體並將其設為 TRUE。此中繼資料值會封鎖所有全專案金鑰,使其無法在此執行個體上發生作用,僅讓執行個體層級金鑰發揮作用。

     POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
      "items": [
       {
        "key": "block-project-ssh-keys",
        "value": TRUE
       }
      ]
      "fingerprint": "[FINGERPRINT]"
     }
    

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [ZONE] 是執行個體的所在區域。
    • [INSTANCE_NAME] 是要封鎖全專案金鑰的執行個體。
    • [FINGERPRINT] 是此特定中繼資料設定的專屬 ID,可防止您意外覆寫並行的變更。
  • 如要允許全專案公開安全殼層金鑰,請將 block-project-ssh-keys 中繼資料值新增至執行個體並將其設為 FALSE。此中繼資料值會允許所有全專案金鑰 (以及執行個體層級金鑰),使其在此執行個體上發揮作用。

     POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
     "items": [
      {
       "key": "block-project-ssh-keys",
       "value": FALSE
      }
     ]
     "fingerprint": "[FINGERPRINT]"
     }
    

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [ZONE] 是執行個體的所在區域。
    • [INSTANCE_NAME] 是您要為其啟用全專案金鑰的執行個體。
    • [FINGERPRINT] 是此特定中繼資料設定的專屬 ID,可防止您意外覆寫並行的變更。

完成後,請試著透過第三方工具連線至 Linux 執行個體,測試您的變更。

新增或移除執行個體層級公開安全殼層金鑰

執行個體層級公開安全殼層金鑰可讓使用者存取特定的 Linux 執行個體。具有執行個體層級公開安全殼層金鑰的使用者都可以存取 Linux 執行個體,即使該執行個體封鎖了全專案公開安全殼層金鑰

主控台

如要從 GCP Console 新增或移除執行個體層級公開安全殼層金鑰:

  1. 在 Google Cloud Platform Console 中,前往「VM instances」(VM 執行個體) 頁面。

    前往「Instances」(執行個體) 頁面

  2. 按一下您要修改的執行個體名稱。

  3. 按一下工具列上的 [Edit] (編輯)

  4. 在「SSH Keys」(安全殼層金鑰) 下方,點選 [Show and edit] (顯示與編輯)。該區段會展開並顯示所有執行個體層級公開安全殼層金鑰。

  5. 修改執行個體層級公開安全殼層金鑰:

    • 如要新增公開安全殼層金鑰,請按一下 [Add item] (新增項目),隨即會開啟文字方塊。
    • 複製公開安全殼層金鑰檔案的內容,並將其貼到文字方塊中。

      對每個您要新增的公開安全殼層金鑰重複同樣的步驟。

    • 如要移除公開安全殼層金鑰,請按一下金鑰旁邊的移除按鈕:

      PuTTYgen 公開金鑰。

      對每個您要移除的公開安全殼層金鑰重複同樣的步驟。

  6. 安全殼層金鑰編輯完成後,請按一下 [Save] (儲存)

gcloud

如要使用 gcloud 工具新增或移除執行個體層級公開安全殼層金鑰:

  1. 如果執行個體已具有執行個體層級公開安全殼層金鑰,請從中繼資料中取得這些公開安全殼層金鑰:

    1. 取得執行個體的現有中繼資料:

       gcloud compute instances describe [INSTANCE_NAME]
       

      其中 [INSTANCE_NAME] 是要新增或移除公開安全殼層金鑰的執行個體名稱。

    2. 在輸出中,找到 ssh-keys 中繼資料值:

       ...
       metadata:
         fingerprint: QCofVTHlggs=
         items:
         ...
         - key: ssh-keys
           value: |-
             [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
             [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
       ...
      

      其中:

      • [USERNAME_1][USERNAME_2] 是現有金鑰的使用者名稱。
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] 是已套用至執行個體的公開金鑰值。

    3. 複製 ssh-keys 中繼資料值下方的公開安全殼層金鑰。

  2. 在本機工作站上建立並開啟一個新的文字檔案。

  3. 在檔案中,建立一份包含所有您要新增或存放在執行個體層級中繼資料中的公開安全殼層金鑰清單。如果執行個體層級中繼資料中已含有公開安全殼層金鑰,則未列入清單的任何金鑰都將遭到移除。

    例如,下方的樣本清單未列出 [USERNAME_1] 的安全殼層金鑰,因此其金鑰遭到移除。此份清單將保留 [USERNAME_2] 的安全殼層金鑰,並新增 [USERNAME_3] 的安全殼層金鑰,因為這些安全殼層金鑰都已列入清單中。

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    其中:

    • [USERNAME_1][USERNAME_2][USERNAME_3] 是公開安全殼層金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
  4. 儲存並關閉檔案。

  5. 在指令提示中,使用 compute instances add-metadata 指令設定僅限執行個體的ssh-key 值。加入 --metadata-from-file 標記並指定公開金鑰檔案清單的路徑。

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    其中:

    • [INSTANCE_NAME] 是要套用公開安全殼層金鑰的執行個體名稱。
    • [LIST_PATH] 是公開安全殼層金鑰清單的路徑。

API

使用 instances.setMetadata 方法在中繼資料中新增執行個體限定 ssh-keys 值。

  1. 使用 instances.get 方法取得要用於要求的中繼資料 fingerprint 值。如果您想要沿用現有的執行個體層級金鑰,請取得現有的 ssh-keys 值。

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    

    伺服器會傳回類似下方的回應:

    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...
    

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [ZONE] 是執行個體的所在區域。
    • [INSTANCE_NAME] 是要編輯執行個體層級公開安全殼層金鑰的執行個體。
    • [FINGERPRINT] 是此特定中繼資料設定的專屬 ID,可防止您意外覆寫並行的變更。
    • [USERNAME_1][USERNAME_2] 是現有金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] 是已套用至執行個體的公開金鑰值。
  2. 建立一份包含所有您要新增或存放在執行個體層級中繼資料中的公開安全殼層金鑰清單。如果執行個體層級中繼資料中已含有公開安全殼層金鑰,則未列入清單的任何金鑰都將遭到移除。

    在本範例中,檔案包含了一個新的 [KEY_VALUE],後面接著您在前個步驟取得的其中一個現有金鑰值。當中漏列了 [EXISTING_KEY_VALUE_1],因此其金鑰將在下個步驟中從執行個體移除。使用新行逸出字元 (\n) 來分隔不同的金鑰值。

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    其中:

    • [USERNAME_1][USERNAME_2][USERNAME_3] 是金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
  3. 使用 instances.setMetadata 方法設定執行個體限定 ssh-keys 值。請納入 fingerprint 值,以確保您不會覆寫此中繼資料值的任何並行變更。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    其中:

    • [PROJECT_ID] 是專案的專屬 ID。
    • [ZONE] 是執行個體的所在區域。
    • [INSTANCE_NAME] 是要編輯執行個體層級公開安全殼層金鑰的執行個體。
    • [USERNAME_1][USERNAME_2][USERNAME_3] 是金鑰的使用者名稱。
    • [EXISTING_KEY_VALUE_1] 是您要移除的安全殼層金鑰的公開金鑰值。
    • [EXISTING_KEY_VALUE_2] 是您要保留的安全殼層金鑰的公開金鑰值。
    • [NEW_KEY_VALUE] 是您要新增的安全殼層金鑰的公開金鑰值。
    • [FINGERPRINT] 是此特定中繼資料設定的專屬 ID,可防止您意外覆寫並行的變更。

安全殼層金鑰編輯完成後,請試著透過第三方工具連線至 Linux 執行個體,測試您的變更。

後續步驟

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

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

這個網頁
Compute Engine 說明文件