iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 18
0
DevOps

Best Practice for DevOps on GitLab and GCP系列 第 18

Best Practice for DevOps on GitLab and GCP : GCP 中繼資料 SSH 金鑰管理 - Day 18 -

Imgur

前言

GCP 中繼資料存放著 SSH Key 相關設定,有分成全專案單一實例兩種設定方式。影響選擇設定的模式取決於,使用者是否有足夠的權限存取所有實例,抑或是只能存取部分實例。在實務上的開發中,可能因為人數極少外加求快速而,使用全專案設定方式會較為方便。而對於正式上線的環境,有哪些人適合連線則應有所安排,這時部分使用單一實例模式同時搭配封鎖全專案公開 SSH 金鑰,就能既滿足部分人的高權限,但又不至有潛在因素導致非相關人員可以竊取資料。

中繼資料

查看當前設定

全專案

$ gcloud compute project-info describe

單一實例

$ gcloud compute instances describe [INSTANCE_NAME]

查看內容如下

...
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]
...

設定方法

準備一個 SSH 列表文件,格式如下

[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] 是公開 SSH 金鑰的使用者名稱。
  • [EXISTING_KEY_VALUE_1] 是您要移除的 SSH 金鑰的公開金鑰值。
  • [EXISTING_KEY_VALUE_2] 是您要保留的 SSH 金鑰的公開金鑰值。
  • [NEW_KEY_VALUE] 是您要新增的 SSH 金鑰的公開金鑰值。

使用指令根據準備好的文件做變更,列表不存在的值,如原有設定存在會視為是要被刪除

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

or

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

封鎖全專案公開 SSH 金鑰

開啟後僅看單一實例中的 SSH 金鑰

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

範例 (全專案)

編寫 /tmp/ssh-key.txt 內容如下:

root :ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf/FjS72qbXtKIWPiio4DXBZMkF7MFJUFIeHiGyct16YY0zHEltaA+ZItBUiWDpWN53asmpx3vcSV9IkQijp25PfkTAhfG2MP6OfBpJKThdBKqEQ2++XpT4Rbvlhut77Y7nJcDwldH8uJxorJQhEieI0gHSugmgXKWaW7Frcl3NfuH6w7x4OmqZKpGF9TdaB8H4ZG0agd8iopkxphSlM8EJ6rthpXozUgx9PmoN8XEghDf4c/sWiu6qSr9eFSB+kutM7E8s0DZEBThJF2fI3tZQkaBCFvfXhOoieWYq8ltzopZkzozWm9KyGoBqeCoZByZm6gEk/p2R/TF/qHZDhXD root@gsdk
test :ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf/FjS72qbXtKIWPiio4DXBZMkF7MFJUFIeHiGyct16YY0zHEltaA+ZItBUiWDpWN53asmpx3vcSV9IkQijp25PfkTAhfG2MP6OfBpJKThdBKqEQ2++XpT4Rbvlhut77Y7nJcDwldH8uJxorJQhEieI0gHSugmgXKWaW7Frcl3NfuH6w7x4OmqZKpGF9TdaB8H4ZG0agd8iopkxphSlM8EJ6rthpXozUgx9PmoN8XEghDf4c/sWiu6qSr9eFSB+kutM7E8s0DZEBThJF2fI3tZQkaBCFvfXhOoieWYq8ltzopZkzozWm9KyGoBqeCoZByZm6gEk/p2R/TF/qHZDhXD test@gsdk

執行指令

$ gcloud compute project-info add-metadata --metadata-from-file ssh-keys=/tmp/ssh-key.txt

範例 (單一實例)

執行前請先確定已建立實例,如未建立請執行 (Option)

$ gcloud compute instances create vm-0

編寫 /tmp/ssh-key.txt,範例內容如下:

root :ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf/FjS72qbXtKIWPiio4DXBZMkF7MFJUFIeHiGyct16YY0zHEltaA+ZItBUiWDpWN53asmpx3vcSV9IkQijp25PfkTAhfG2MP6OfBpJKThdBKqEQ2++XpT4Rbvlhut77Y7nJcDwldH8uJxorJQhEieI0gHSugmgXKWaW7Frcl3NfuH6w7x4OmqZKpGF9TdaB8H4ZG0agd8iopkxphSlM8EJ6rthpXozUgx9PmoN8XEghDf4c/sWiu6qSr9eFSB+kutM7E8s0DZEBThJF2fI3tZQkaBCFvfXhOoieWYq8ltzopZkzozWm9KyGoBqeCoZByZm6gEk/p2R/TF/qHZDhXD root@gsdk
test :ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf/FjS72qbXtKIWPiio4DXBZMkF7MFJUFIeHiGyct16YY0zHEltaA+ZItBUiWDpWN53asmpx3vcSV9IkQijp25PfkTAhfG2MP6OfBpJKThdBKqEQ2++XpT4Rbvlhut77Y7nJcDwldH8uJxorJQhEieI0gHSugmgXKWaW7Frcl3NfuH6w7x4OmqZKpGF9TdaB8H4ZG0agd8iopkxphSlM8EJ6rthpXozUgx9PmoN8XEghDf4c/sWiu6qSr9eFSB+kutM7E8s0DZEBThJF2fI3tZQkaBCFvfXhOoieWYq8ltzopZkzozWm9KyGoBqeCoZByZm6gEk/p2R/TF/qHZDhXD test@gsdk

封閉全專案 SSH Keys (Option)

$ gcloud compute instances add-metadata vm-0 --metadata block-project-ssh-keys=TRUE

執行指令

$ gcloud compute instances add-metadata vm-0 --metadata-from-file ssh-keys=/tmp/ssh-key.txt

結語

如果是不清楚 SSH 的讀者們可能要多花點時間了解一下,只要依照上述所提的方法設定成功後。設備將正常獲得可以被連線的權限,將實例的外部 IP 提供給使用者,使用者即可通過 ssh {ip address} 遠端連線進行操作。

環境建置

請參考下列兩篇文章:

  1. GCP Google Cloud SDK 快速入手模式 (上)
  2. GCP Google Cloud SDK 快速入手模式 (下)

參考


上一篇
Best Practice for DevOps on GitLab and GCP : GCP 執行個體管理與遠端操作 - Day 17 -
下一篇
Best Practice for DevOps on GitLab and GCP : GCP 永久硬碟管理 (上) - Day 19 -
系列文
Best Practice for DevOps on GitLab and GCP30

尚未有邦友留言

立即登入留言