2016-07-30 9 views
1

Beim Erlernen der Verwendung der Google Compute Engine mit Google Cloud Storage ist ein Problem mit ACLs aufgetreten. Von meinem eigenen Computer mit meinen eigenen SSH-Zugangsdaten kann ich mit meinem Eimer machen, was ich will. Aber wenn ich mich mit dem webbasierten SSH-Client in meine Compute-Instanz einlogge, kann ich nur aus dem Bucket lesen. Das Kopieren von Daten zurück in den Bucket erhält einen 'AccessDeniedException: 403 Insufficient Permission'-Fehler. (Ich mache all diese Kopierversuche mit gsutil.)Wie debuggt man Probleme bei der Zugangskontrolle mit Google Cloud Storage?

Das macht für mich keinen Sinn. Dem einzigen Dienstkonto wurde die Rolle des Projekteditors zugewiesen, und ich habe bestätigt, dass die Bucket-ACL-Liste dem Besitzer sowohl Zugriff auf die Rolle des Projekteditors als auch auf das Dienstkonto gewährt. Ich habe auch versucht, das Dienstkonto zu ändern, um die Berechtigung "WRITE" anstelle von "OWNER" auf dem Bucket zu haben, aber das hilft nicht. Schließlich benutze ich die heruntergeladenen SSH-Schlüssel für das gleiche Standard-Dienstkonto, wenn ich all dies von meinem lokalen Rechner aus mache, also verstehe ich nicht, warum es sich ändert.

Ein Teil des Problems ist, dass ich nicht sehen kann, wo der Gummi die Straße trifft - alles, was ich bekomme, ist ein 403 mit keine weiteren Informationen. Ich kann nicht sehen, was Gsutil tut (in der Tat, ich bin mir nicht einmal sicher, wie Gsutil seine Anmeldeinformationen erhält, da das alles automatisch ausgeführt wird, wenn Sie über Konsole einsteigen - ich nehme nur an, dass es unter dem Dienstkonto protokolliert).

Ich möchte natürlich dieses unmittelbare Problem beheben, aber ich würde auch alle Tipps, wie Sie diese Probleme debuggen, wie sie in Zukunft kommen.

Antwort

1

Ich glaube, Sie haben ein ziemlich häufiges Problem, aber ich könnte falsch liegen, so werde ich skizzieren, was von oben benötigt wird, bevor ich es erkläre.

Standardmäßig verwendet gsutil in der Compute Engine nicht Ihre persönlichen Benutzeranmeldeinformationen. Stattdessen werden automatisch Anmeldeinformationen erworben, die als Dienstkonto für diese VM konfiguriert werden (normalerweise das Compute Engine-Standarddienstkonto).

Dieses Dienstkonto benötigt zwei Dinge, um in GCS zu schreiben: 1.) Erlaubnis von GCS, an diesen bestimmten Ort zu schreiben, und 2.) Umfang, um an GCS zu schreiben.

Es hört sich so an, als hätten Sie das Dienstkonto als Projekteditor eingerichtet und es sogar zum Besitzer des fraglichen Buckets gemacht. Daher haben Sie sich um Punkt 1 gekümmert. GCE gewährt jedoch standardmäßig nur Ihre Instanz ein schreibgeschützter Bereich für den Zugriff auf Speicher. Das wird wahrscheinlich der Grund sein, warum Lesevorgänge für Sie arbeiten, aber Schreibvorgänge nicht.

Dies zu beheben ist etwas nervig, da Bereiche nicht auf laufenden Instanzen bearbeitet werden können. Daher müssen Sie eine neue GCE-Instanz erstellen und dabei sicherstellen, dass Sie einen Bereich explizit angeben. Wenn Sie die Benutzeroberfläche verwenden, wählen Sie entweder "Vollständigen Zugriff auf alle Cloud-APIs zulassen" oder wählen Sie "Zugriff für jede API festlegen" und stellen Sie sicher, dass Sie "Lesen" oder "Vollständig" für den Speicher wählen.

Es gibt bessere Anleitung, wie diese Website auf Google zu tun: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#using

+0

Dank Brandon. Falsche Bereiche in der GCE-Instanz waren das Problem. Ich muss sagen, egal wie sehr ich die Dokumente lese, ich kann meinen Kopf nicht um dieses Sicherheitsmodell wickeln. Ich denke, was mich wirft ist, dass Sicherheit in der Regel ist, ob (1) eine Aktion auf (2) eine Ressource für (3) eine Identität erlaubt ist. Aber dieses Modell hat auch (4) "Bereiche", die ähnlich wie (1) und (3) nicht spezifisch für irgendeine gegebene Ressource sind, aber im Allgemeinen auf jede Ressource angewendet werden, auf die von einer GCE-Instanz zugegriffen wird. Ist das das richtige mentale Modell? –

+0

rechts. Die Idee hinter Scopes ist, dass Sie einer Anwendung möglicherweise die Berechtigung erteilen, so zu agieren wie Sie, aber Sie möchten ihnen nicht ALLE Ihre Fähigkeiten gewähren. Stellen Sie sich vor, Sie möchten einen Drittanbieter-GCS-Browser verwenden.Vielleicht möchten Sie ihm die Erlaubnis geben, als Sie zu dienen, um GCS zu verwenden, aber das bedeutet nicht, dass Sie GCE-Instanzen starten oder Ihre E-Mails lesen möchten. Es ist nur eine weitere Möglichkeit, den Zugriff zu beschränken und zu kontrollieren. –