教學目標

學習 Google Cloud Platform 的心得分享,初步了解在 Google Cloud 中如何授予使用者適當存取虛擬機器權限的重點概念。

重點概念

首先若企業要將現有環境移轉至雲端,則本地端的虛擬機器就會是最關鍵的資源,至於要如何開始呢?我們主要能夠透過 Compute Engine 主控台新增執行個體,所謂執行個體就是虛擬機器,虛擬機器最基本需要設定實體名稱、地區、區域、機器類型、作業系統、磁碟、網路、安全、… 等選項,預設不允許外部網路流量以 HTTP 和 HTTPS 網路傳輸協定向虛擬機器請求網路資源,但是允許遠端連線,作業系統如果是 Linux 則會透過 SSH 安全網路傳輸協定進行遠端連線,如果是 Windows 作業系統則會透過 RDP 遠端桌面通訊協定進行遠端連線,請注意每個虛擬機器預設會有內部 IP 和外部 IP,至於遠端連線主要是以外部 IP 為主。

接著我們除了透過 Compute Engine 主控台中的「SSH」按鈕直接安全連線至 Linux 虛擬機器之外,建議透過 gcloud 工具以「gcloud compute ssh [實體名稱]」指令安全連線至虛擬機器中進行操作,其中 Compute Engine 會自動設定永久的 SSH 安全金鑰至中繼資料,此時如果要執行這項作業,則需要設定使用者具有以下權限,分別為:

  1. 執行個體的 compute.instances.setMetadata 權限
  2. 專案的 compute.projects.setCommonInstanceMetadata 權限
  3. 專案的 iam.serviceAccounts.actAs 權限

請注意若要設定執行個體上的中繼資料,則會需要執行個體的 compute.instances.setMetadata 權限,而如果要設定全專案的中繼資料,則會需要專案的 compute.projects.setCommonInstanceMetadata 權限和專案的 iam.serviceAccounts.actAs 權限。而當某個帳號呼叫 Google Cloud Platform API 時,Cloud IAM 會要求這個帳號具備使用資源的適當權限,像是 Compute Engine 自動設定永久的安全金鑰至中繼資料就是某個帳號呼叫 Google Cloud Platform API,此時 Cloud IAM 就會要求這個帳號具備使用資源的適當權限,也就是 compute.instances.setMetadata 權限、 compute.projects.setCommonInstanceMetadata 權限和 iam.serviceAccounts.actAs 權限。

再來在Cloud IAM 中主要有三種類型的角色,我們能夠將角色授予機構、使用者、群組或服務帳戶,藉此授予權限,分別為:

  1. 原始角色:在 Cloud IAM 使用之前就存在的角色,其中包括擁有者、編輯者和檢視者角色。
  2. 預先定義角色:提供精細的特定服務存取權限,並且由 Google Cloud Platform 代管。
  3. 自訂角色:根據使用者指定的權限清單,提供精細的存取權限。

其中我們能夠設定管理 Compute Engine 中的虛擬機器的權限,則能夠設定使用者為編輯者的原始角色,但是這個權限非常大,也能夠存取其它雲端服務的資源,此時對於企業來說就會是個問題。為了解決此問題,則建議設定使用者為 Compute 管理員的預先定義角色,具備所有 Compute Engine 資源的完整控管權限,並且如果使用者會以服務帳戶的形式執作的虛擬機器執行個體,則必須為使用者授予服務帳戶使用者的預先定義角色,像是如果要安全連線至 Linux 虛擬機器就會需要有 SSH 安全金鑰,預設 Compute Engine 將會自動在專案和執行個體中設定 SSH 安全金鑰,所以需要有 iam.serviceAccounts.actAs 權限,而服務帳戶使用者角色就有此權限。更進一步如果我們僅要設定使用者僅能夠管理 Compute Engine 中的執行個體的完整控管權限,則建議設定 Compute 執行個體管理員 (v1) 的預先定義角色,具備 Compute Engine 執行個體、執行個體群組、磁碟、快照和映像檔的完整控管權限,以及所有 Compute Engine 網路資源的讀取權限,此外如果僅在執行個體層級為使用者授予這個角色,則將無法建立新的執行個體,但是如果我們在專案層級為使用者授予這個角色,則將能夠建立新的執行個體,當然如果要安全連線至 Linux 虛擬機器就會需要有 SSH 安全金鑰,則還必須為使用者授予服務帳戶使用者的預先定義角色。

最後為了符合最小權限原則,則對於關鍵的安全資源,請避免使用原始角色,請授予預先定義角色,以便提供最低權限的必要存取權。但是如果企業需要僅限制開發人員僅能夠全連線至 Linux 虛擬機器,而無法管理 Compute Engine 中的執行個體,則建議先為使用者授予 Compute 檢視者的預先定義角色,具備唯讀權限,可以取得及列出 Compute Engine 資源,但無法讀取其上儲存的資料,以及需要設定執行個體的 compute.instances.setMetadata 權限、專案的 compute.projects.setCommonInstanceMetadata 權限和專案的 iam.serviceAccounts.actAs 權限,而我們則能夠透過自訂角色,將這三個權限設定至自訂角色的權限,再為使用者授予該自訂角色。

總結當企業要將現有環境移轉至雲端,虛擬機器就會是最關鍵的資源,其中如何有效規劃虛擬機器的使用者存取權限,將會是常見的問題,此時我們就能夠透過 Cloud IAM 中主要有三種類型的角色,並且基於最小權限原則授予使用者授予最適當的權限。

相關資源