本文說明如何從 VM 移除及封鎖 SSH 金鑰,防止使用者存取虛擬機器 (VM) 執行個體。
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上的分頁,瞭解如何使用範例:
控制台
使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,無須設定驗證。
gcloud
-
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。
詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」。
移除安全殼層金鑰
如要從專案或執行個體中繼資料移除公開 SSH 金鑰,可以使用Cloud de Confiance 控制台、gcloud CLI 或 Compute Engine API。
從特定使用者的中繼資料中移除最後一個金鑰,或是特定使用者的中繼資料中最後一個金鑰過期後,Compute Engine 會刪除 VM 上的使用者 ~/.ssh/authorized_keys 檔案。
從專案中繼資料移除公開金鑰
從專案中繼資料移除公開安全殼層金鑰,即可移除專案中所有 VM 的存取權。
使用 gcloud CLI 和 Compute Engine API 從中繼資料移除金鑰時,您必須先擷取現有金鑰清單,編輯金鑰清單以移除不需要的金鑰,然後使用要保留的金鑰清單覆寫舊金鑰,如下一節所述。
控制台
如要使用Cloud de Confiance 控制台從專案中繼資料移除公開安全殼層金鑰,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「Metadata」頁面。
按一下「SSH keys」(SSH 金鑰) 分頁標籤。
按一下頁面頂端的「編輯」。
找出要移除的安全殼層金鑰,然後按一下金鑰旁邊的刪除按鈕 。
針對要移除的每個 SSH 金鑰重複上述步驟。
按一下 [儲存]。
gcloud
如要使用 gcloud CLI 從專案中繼資料移除公開 SSH 金鑰,請按照下列步驟操作:
執行
gcloud compute project-info describe指令,取得專案的中繼資料:gcloud compute project-info describe
輸出結果會與下列內容相似:
... metadata: ...
- key: ssh-keysvalue: |- cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"} ...複製
ssh-keys中繼資料值。在本機工作站上建立並開啟一個新的文字檔案。
在檔案中貼上剛才複製的安全殼層金鑰清單,然後刪除要從專案中繼資料中移除的金鑰。
儲存並關閉檔案。
執行
gcloud compute project-info add-metadata指令,設定全專案ssh-keys值:gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
將
KEY_FILE替換為下列其中一個值:- 如果您專案已有安全殼層金鑰,請輸入您在上一個步驟中建立的檔案路徑
- 如果專案沒有現有的 SSH 金鑰,則為新公開 SSH 金鑰檔案的路徑
REST
如要使用 Compute Engine API 從專案中繼資料移除公開安全殼層金鑰,請執行下列步驟:
使用
projects.get方法從中繼資料取得fingerprint和ssh-keys值。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
將
PROJECT_ID替換為專案 ID。回覆內容大致如下:
... "fingerprint": "utgYE_XWtE8=", "items": [ { "key": "ssh-keys", "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}" } ] ...複製 SSH 金鑰值清單,然後刪除要移除的金鑰。
使用
projects.setCommonInstanceMetadata移除 SSH 金鑰。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS" } ] "fingerprint": "FINGERPRINT" }更改下列內容:
PROJECT_ID:專案 IDEXISTING_SSH_KEYS:要保留的安全殼層金鑰清單FINGERPRINT:projects.get要求的fingerprint回應值
從執行個體中繼資料移除公開安全殼層金鑰
從執行個體中繼資料移除公開安全殼層金鑰,即可移除單一 VM 的存取權。
使用 gcloud CLI 和 Compute Engine API 從中繼資料移除金鑰時,您必須先擷取現有金鑰清單,編輯金鑰清單以移除不需要的金鑰,然後使用要保留的金鑰清單覆寫舊金鑰,如下一節所述。
控制台
如要使用Cloud de Confiance console 從執行個體中繼資料移除公開安全殼層金鑰,請執行下列步驟:
前往 Cloud de Confiance 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要移除金鑰的 VM 名稱。
按一下 [編輯]。
在「SSH Keys」(安全殼層金鑰) 專區中,點選「Show and edit」(顯示與編輯)。該區段會展開並顯示所有執行個體層級公開安全殼層金鑰。
在要移除的 SSH 金鑰旁,按一下「刪除」按鈕 。
針對要移除的每個 SSH 金鑰重複上述步驟。
按一下 [儲存]。
gcloud
如要使用 gcloud CLI 從執行個體中繼資料移除公開 SSH 金鑰,請執行下列步驟:
執行
gcloud compute instances describe指令,取得 VM 的中繼資料:gcloud compute instances describe VM_NAME
將 VM_NAME 替換為要新增或移除公開 SSH 金鑰的 VM 名稱。
輸出結果會與下列內容相似:
... metadata: ...
- key: ssh-keysvalue: |- cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"} ...複製
ssh-keys中繼資料值。在本機工作站上建立並開啟一個新的文字檔案。
在檔案中貼上剛才複製的安全殼層金鑰清單,然後移除要刪除的金鑰。
儲存並關閉檔案。
執行
gcloud compute project-info add-metadata指令,設定全專案ssh-keys值:gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
更改下列內容:
VM_NAME:要移除安全殼層金鑰的 VMKEY_FILE:包含所有專案 SSH 金鑰清單的檔案路徑
REST
如要使用 Compute Engine API 從執行個體中繼資料移除公開安全殼層金鑰,請執行下列操作:
使用
instances.get方法從中繼資料取得fingerprint和ssh-keys值。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
更改下列內容:
PROJECT_ID:專案 IDZONE:您要新增 SSH 金鑰的 VM 所在區域VM_NAME:要新增 SSH 金鑰的 VM
回覆內容大致如下:
... "fingerprint": "utgYE_XWtE8=", "items": [ { "key": "ssh-keys", "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}" } ] ...複製 SSH 金鑰值清單,然後刪除要移除的金鑰。
使用
instances.setMetadata移除 SSH 金鑰。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS } ] "fingerprint": "FINGERPRINT" }更改下列內容:
PROJECT_ID:專案 IDEXISTING_SSH_KEYS:projects.get要求的ssh-keys鍵值FINGERPRINT:instances.get要求的fingerprint回應值
封鎖使用中繼資料安全殼層金鑰的 VM 專案安全殼層金鑰
您可以封鎖 VM 的專案安全殼層金鑰,防止 VM 接受儲存在專案中繼資料中的安全殼層金鑰。您可以在建立 VM 時或建立 VM 後,封鎖 VM 的專案安全殼層金鑰。
在建立 VM 時封鎖 VM 的專案安全殼層金鑰
您可以在建立 VM 時,使用Cloud de Confiance 控制台、gcloud CLI 或 Compute Engine API,封鎖 VM 的專案 SSH 金鑰。
控制台
如要使用 Cloud de Confiance 控制台建立執行個體,並禁止該執行個體接受儲存在專案中繼資料中的安全殼層金鑰,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「Create an instance」(建立執行個體) 頁面。
如要封鎖專案安全殼層金鑰,請按照下列步驟操作:
按一下導覽選單中的「Security」(安全性)。
展開「管理存取權」部分。
如要停用 OS 登入,請清除「透過 IAM 權限控管 VM 存取權」核取方塊。
勾選「封鎖全專案安全殼層金鑰」核取方塊。
選用:指定其他設定選項。詳情請參閱「建立執行個體時的設定選項」。
如要建立並啟動執行個體,請按一下「建立」。
gcloud
如要使用 gcloud CLI 建立 VM,並禁止 VM 接受儲存在專案中繼資料中的安全殼層金鑰,請使用 gcloud compute instances create 指令:
gcloud compute instances create VM_NAME \
--metadata block-project-ssh-keys=TRUE
將 VM_NAME 替換為新 VM 的名稱。
REST
如要使用 Compute Engine 建立 VM,並防止 VM 接受儲存在專案中繼資料中的安全殼層金鑰,請建構對 instances.insert 方法的 POST 要求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
更改下列內容:
PROJECT_ID:專案 IDZONE:VM 的可用區
在要求主體中,於 items 屬性中提供使用者名稱和公開安全殼層金鑰:
...
{
"items": [
{
"key": "block-project-ssh-keys",
"value": TRUE
}
]
}
...
在 VM 建立完成後封鎖 VM 的專案安全殼層金鑰
您可以在建立 VM 後,使用Cloud de Confiance 控制台、gcloud CLI 或 Compute Engine API,封鎖 VM 的專案 SSH 金鑰。
控制台
如要使用 Cloud de Confiance 控制台,禁止 VM 接受儲存在專案中繼資料中的安全殼層金鑰連線,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要封鎖專案安全殼層金鑰的 VM 名稱。
按一下 [編輯]。
在「SSH Keys」(安全殼層金鑰) 下方,選取「Block project-wide SSH keys」(封鎖全專案安全殼層金鑰) 核取方塊。
安全殼層金鑰的連線設定編輯完成後,請按一下 [Save] (儲存)。
gcloud
如要使用 gcloud CLI,禁止 VM 接受儲存在專案中繼資料中的安全殼層金鑰連線,請執行下列操作:
執行 gcloud compute instances add-metadata 指令:
gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE
將 VM_NAME 替換成要封鎖全專案公開 SSH 金鑰的 VM 名稱。
REST
如要使用 Compute Engine API,禁止 VM 接受儲存在專案中繼資料中的安全殼層金鑰連線,請按照下列步驟操作:
使用
instances.get方法從中繼資料取得fingerprint。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
更改下列內容:
PROJECT_ID:專案 IDZONE:您要新增 SSH 金鑰的 VM 所在區域VM_NAME:要新增 SSH 金鑰的 VM
回覆內容大致如下:
... "fingerprint": "utgYE_XWtE8=" ...
使用
instances.setMetadata方法將block-project-ssh-keys設為TRUE:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "block-project-ssh-keys", "value": TRUE } ] "fingerprint": "FINGERPRINT" }更改下列內容:
PROJECT_ID:您的專案 IDZONE是執行個體所在的區域INSTANCE_NAME是要封鎖全專案金鑰的執行個體。FINGERPRINT:instances.get要求的相關回應中fingerprint的值。
後續步驟
- 使用 Google 工具連線至 VM,因此您不必管理自己的 SSH 金鑰。