如何僅向 Google Compute Engine 中的使用者提供對一個執行個體的存取?

如何僅向 Google Compute Engine 中的使用者提供對一個執行個體的存取?

我正在嘗試找到一種解決方案來為外部工作人員提供對我們專案中實例的存取權限,但不是所有資源的存取權限。

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

首先是向承包商提供私鑰,以便透過 ssh 存取所選實例。

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

據我了解,服務帳戶。它們被聲明為資源和身分。我必須在新建立的服務帳戶下建立一個具有有限定義權限的新實例。

[服務帳號] >>> 權限 >>> [實例]

[使用者] >>> 服務帳號使用者角色 >>> [服務帳號]

所以我認為服務帳戶使用者角色就像服務帳戶的代理。我嘗試為服務帳戶指派權限,並為使用者指派服務帳戶使用者角色。我認為完成此操作後,用戶將擁有分配給服務帳戶的權限。但不幸的是事實並非如此,我需要一些幫助。

答案1

使用您建議的私鑰將是這裡的理想解決方案,因為這是確保您的承包商無法存取其他實例或有關專案狀態的資訊的唯一方法。儘管如此,您所描述的(使用服務帳戶透過 SSH 連接到電腦)可以做到,而且,確實,服務帳戶既是身分又是資源

如果您為使用者提供Service Account User服務帳戶的角色,並具有透過 SSH 連接到電腦的必要權限,則使用者將能夠執行此操作。但請記住,為了使其正常運作,該服務帳戶所需的最低權限集將允許服務帳戶(因此也包括使用者)透過 SSH 連接到任何計算實例。僅此一點就表明這樣做不會給您提供您想要的粒度。

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

  1. 建立一個服務帳戶並為其賦予Service Account User角色和 4 個細化權限:compute.instances.getcompute.instances.setMetadatacompute.projects.getcompute.zoneOperations.get(您可能應該為這些權限建立自訂角色)。這可以在 IAM 和管理部分完成安慰;
  2. 透過以下方式授予使用者本身對專案的某種權限控制台或 gcloud。我建議給這個Compute Viewer角色;
  3. 指導用戶安裝Google雲端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 金鑰新增至執行個體的元資料。

相關內容