本文說明如何從虛擬機器 (VM) 移除及封鎖安全殼層金鑰,防止使用者存取 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 進行驗證」。
移除安全殼層金鑰
您可以使用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」頁面。
按一下「安全殼層金鑰」分頁標籤。
按一下頁面頂端的「 編輯」。
找出要移除的 安全殼層金鑰,然後點選 安全殼層金鑰 旁的「刪除」按鈕 。
針對要移除的每個安全殼層金鑰重複執行這個步驟。
按一下 [儲存]。
gcloud
如要使用 gcloud CLI 從專案中繼資料移除公開安全殼層金鑰,請執行下列操作:
執行
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 金鑰,請提供您在上一個步驟中建立的檔案路徑
- 如果專案沒有現有的安全殼層金鑰,請提供新公開安全殼層金鑰檔案的路徑
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"}" } ] ...複製安全殼層金鑰值清單,然後刪除要移除的金鑰。
使用
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 控制台,從執行個體中繼資料中移除公開安全殼層金鑰,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要移除金鑰的 VM 名稱。
按一下 [編輯]。
在「安全殼層金鑰」部分,按一下「顯示及編輯」。這個部分會展開,顯示所有執行個體層級的公開安全殼層金鑰。
找出要移除的 安全殼層金鑰,然後點按旁邊的刪除按鈕 。
針對要移除的每個安全殼層金鑰,重複執行這個步驟。
按一下 [儲存]。
gcloud
如要使用 gcloud CLI 從執行個體中繼資料移除公開安全殼層金鑰,請執行下列操作:
執行
gcloud compute instances describe指令,取得 VM 的中繼資料:gcloud compute instances describe VM_NAME
將 VM_NAME 替換為要新增或移除公開安全殼層金鑰的 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中繼資料值。在本機工作站上建立並開啟一個新的文字檔案。
在檔案中貼上剛才複製的 SSH 安全殼層金鑰清單,然後移除要刪除的金鑰。
儲存並關閉檔案。
執行
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:包含所有專案安全殼層金鑰清單的檔案路徑
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:要新增安全殼層金鑰的 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"}" } ] ...複製安全殼層金鑰值清單,然後刪除要移除的金鑰。
使用
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 的專案安全殼層金鑰
使用Cloud de Confiance 控制台、gcloud CLI 或 Compute Engine API 建立 VM 時,可以封鎖 VM 的專案安全殼層金鑰。
控制台
如要使用 Cloud de Confiance 控制台建立執行個體,並禁止其接受儲存在專案中繼資料中的安全殼層金鑰,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「Create an instance」(建立執行個體) 頁面。
如要封鎖專案安全殼層金鑰,請按照下列步驟操作:
按一下導覽選單中的「Security」(安全性)。
展開「管理存取權」部分。
如要停用 OS 登入功能,請取消勾選「Control VM access through IAM permissions」(透過 IAM 權限控管 VM 存取權) 核取方塊。
勾選「封鎖全專案安全殼層金鑰」核取方塊。
視需要指定其他設定選項。詳情請參閱「建立執行個體時的設定選項」。
如要建立並啟動執行個體,請按一下「Create」(建立)。
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 的專案安全殼層金鑰。
控制台
如要使用 Cloud de Confiance 控制台,禁止 VM 接受儲存在專案中繼資料中的安全殼層金鑰連線,請按照下列步驟操作:
前往 Cloud de Confiance 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要封鎖專案安全殼層金鑰的 VM 名稱。
按一下 [編輯]。
在「安全殼層金鑰」下方,勾選「封鎖專案層級的安全殼層金鑰」核取方塊。
安全殼層金鑰的連線設定編輯完成後,請按一下 [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 替換為要封鎖專案層級公開安全殼層金鑰的 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:要新增安全殼層金鑰的 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 金鑰。