Wie kann Benutzern in Google Compute Engine nur auf eine Instanz zugegriffen werden?

Wie kann Benutzern in Google Compute Engine nur auf eine Instanz zugegriffen werden?

Ich versuche, eine Lösung zu finden, um einem externen Mitarbeiter Zugriff auf eine Instanz in unserem Projekt, aber nicht auf alle Ressourcen zu gewähren.

Ich habe ein wenig nachgeforscht und zwei Methoden gefunden, wie dies funktioniert.

Zunächst müsste dem Auftragnehmer ein privater Schlüssel für den SSH-Zugriff auf die ausgewählte Instanz bereitgestellt werden.

Ich möchte jedoch versuchen, die andere Methode zu verwenden, nämlich dem Auftragnehmer die Benutzerrolle des Dienstkontos zuzuweisen.

So wie ich das mit den Dienstkonten verstehe, werden sie sowohl als Ressource als auch als Identität deklariert. Ich müsste eine neue Instanz unter einem neu erstellten Dienstkonto mit begrenzten definierten Berechtigungen erstellen.

[Dienstkonto] >>> Berechtigungen >>> [Instanzen]

[Benutzer] >>> Dienstkonto-Benutzerrolle >>> [Dienstkonto]

also ich denke, die Benutzerrolle des Dienstkontos ist wie ein Proxy für das Dienstkonto. Ich habe versucht, dem Dienstkonto Berechtigungen zuzuweisen und einem Benutzer die Benutzerrolle des Dienstkontos zugewiesen. Ich würde denken, dass dem Benutzer danach die Berechtigungen für das Dienstkonto zugewiesen würden. Aber leider ist das nicht der Fall und ich hätte gerne Hilfe.

Antwort1

Die Verwendung eines privaten Schlüssels, wie von Ihnen vorgeschlagen, wäre hier die ideale Lösung, da nur so sichergestellt werden kann, dass Ihr Auftragnehmer keinen Zugriff auf andere Instanzen oder Informationen zum Status Ihres Projekts hat. Trotzdem ist das, was Sie beschrieben haben (SSH-Zugriff auf eine Maschine mithilfe eines Dienstkontos)kann gemacht werden, und in der Tat,Dienstkonten sind sowohl eine Identität als auch eine Ressource.

Wenn Sie einem Benutzer die Service Account UserRolle für ein Dienstkonto mit den erforderlichen Berechtigungen zum SSH-Zugriff auf eine Maschine zuweisen, kann der Benutzer genau dies tun. Bedenken Sie jedoch, dass der Mindestsatz an Berechtigungen, den dieses Dienstkonto benötigt, damit dies funktioniert, es dem Dienstkonto (und folglich auch dem Benutzer) ermöglichen würde, sich per SSH auf jede Compute-Instanz zuzugreifen. Dies allein ist ein Hinweis darauf, dass Sie dadurch nicht die gewünschte Granularität erhalten.

Damit das von Ihnen heraufbeschworene Szenario möglich ist, müssen Sie Folgendes tun:

  1. Erstellen Sie ein Servicekonto und geben Sie ihm die Service Account UserRolle und 4 detaillierte Berechtigungen, compute.instances.get, compute.instances.setMetadata, compute.projects.get, und compute.zoneOperations.get(Sie sollten wahrscheinlich eine benutzerdefinierte Rolle für diese Berechtigungen erstellen). Dies kann im Abschnitt IAM & Admin desKonsole;
  2. Geben Sie dem Benutzer selbst Berechtigungen für das Projekt über dieKonsole oder gcloud. Ich würde vorschlagen, die Compute ViewerRolle zu geben;
  3. Weisen Sie den Benutzer an,Installieren Sie das Google Cloud SDKund initialisieren Sie es mit ihren Anmeldeinformationen;
  4. Lassen Sie den Benutzer mithilfe von SSH auf die entsprechende Instanz zugreifen gcloud compute ssh SERVICE_ACCOUNT_USERNAME@INSTANCE_IP_OR_HOSTNAME --zone ZONE_OF_INSTANCE.

Ich würde vorschlagen, dass der Benutzer über Cloud Shell per SSH auf die Zielmaschine zugreift, da dann Schritt 3 komplett entfallen würde. Vergessen Sie auch nicht die Firewall-Regeln, da die Cloud Shell zugewiesenen öffentlichen IPs nicht in die üblichen öffentlichen IP-Bereiche von Google zu fallen scheinen.

Seien Sie nicht überrascht, wenn Sie eine Meldung wie sehen Updating project ssh metadata...failed. Dies ist zu erwarten, da das Dienstkonto nur über die Berechtigung verfügt, SSH-Schlüssel in die Metadaten von Instanzen einzufügen.

verwandte Informationen