Google-Cloud-Platform

如何僅向 Google Compute Engine 中的使用者提供對一個實例的訪問權限?

  • February 25, 2018

我正在嘗試找到一種解決方案來提供外部工作人員訪問我們項目中的實例但不是所有資源的訪問權限。

我做了一些研究,發現了兩種方法來做到這一點。

首先是為承包商提供一個私鑰以通過 ssh 進入所選實例。

但我想嘗試使用另一種方​​法,即為承包商分配服務帳戶使用者角色。

據我了解服務帳戶。它們被聲明為資源和身份。我將不得不在具有有限定義權限的新創建的服務帳戶下創建一個新實例。

$$ service account $$>>> 權限 >>>$$ instances $$ $$ user $$>>> 服務帳戶使用者角色 >>>$$ service account $$ 所以我認為服務帳戶使用者角色就像服務帳戶的代理。我已嘗試為服務帳戶分配權限,並為使用者分配了服務帳戶使用者角色。我認為完成此操作後,使用者將擁有分配給服務帳戶的權限。但不幸的是,情況並非如此,我需要一些幫助。

使用您建議的私鑰將是理想的解決方案,因為這是確保您的承包商無法訪問其他實例或有關您的項目狀態的資訊的唯一方法。儘管如此,您所描述的(使用服務帳戶通過 SSH 連接到機器)是可以完成的,而且事實上,服務帳戶既是身份又是資源

如果您為使用者Service Account User提供服務帳戶的角色,該角色具有通過 SSH 連接到機器的必要權限,那麼使用者就可以這樣做。但是請記住,此服務帳戶需要的最低權限集才能使其正常工作,這將允許服務帳戶(因此,使用者也可以)通過 SSH 連接到任何計算實例。僅此一項就表明這樣做不會為您提供您想要的粒度。

為了使您想像的場景成為可能,您需要執行以下操作:

  1. 創建一個服務帳戶並為其賦予Service Account User角色和 4 個細化權限,compute.instances.getcompute.instances.setMetadatacompute.projects.getcompute.zoneOperations.get(您可能應該為這些權限創建一個自定義角色)。這可以在控制台的 IAM & admin 部分完成;
  2. 通過控制台或 gcloud為使用者本身授予對項目的某種權限。我建議扮演這個Compute Viewer角色;
  3. 指示使用者安裝 Google Cloud SDK並使用其憑據對其進行初始化;
  4. 讓使用者使用 SSH 連接到適當的實例gcloud compute ssh SERVICE_ACCOUNT_USERNAME@INSTANCE_IP_OR_HOSTNAME --zone ZONE_OF_INSTANCE

我建議讓使用者通過 Cloud Shell SSH 進入目標機器,因為這樣可以避免完全執行第 3 步。也不要忘記防火牆規則,因為分配給 Cloud Shell 的公共 IP 似乎不屬於常見的 Google 公共 IP 範圍。

如果您看到類似的消息,請不要感到驚訝Updating project ssh metadata...failed。這是意料之中的,因為服務帳戶僅有權將 SSH 密鑰添加到實例的元數據中。

引用自:https://serverfault.com/questions/898507