Das Cloud Run-Dienstkonto hat keine Berechtigung zum Signieren

cascer1

Ich arbeite an einem Programm, das auf Google Cloud Run ausgeführt wird und Dateien im Google Cloud-Speicher gespeichert hat.

Das Problem tritt auf, wenn versucht wird, eine signierte URL zum Herunterladen einer Datei aus dem Cloud-Speicher zu generieren, die normalerweise privat ist. Auf meinem lokalen Computer funktioniert es einwandfrei, bei Ausführung in Cloud Run jedoch nicht.

Vor Ort verwende ich ein Dienstkonto, dem die Storage Object AdminRolle zugewiesen ist. Ich lade die Berechtigungen mithilfe einer Umgebungsvariablen, GOOGLE_APPLICATION_CREDENTIALSderen absoluter Pfad der von der Cloud-Konsole heruntergeladene .json-Schlüsseldatei ist.

Bei Cloud Run habe ich dem Dienstkonto dieselbe Rolle zugewiesen, unter der der Dienst ausgeführt wird. Wenn ich jedoch versuche, dort etwas zu unterschreiben, erhalte ich eine Ausnahme:

java.io.IOException: Fehlercode 403 beim Signieren der bereitgestellten Bytes: Der Aufrufer hat keine Berechtigung

In meinem Code wähle ich kein Dienstkonto explizit aus, da die SDK-Dokumentation mich glauben lässt, dass dies automatisch erfolgt. In Cloud Run habe ich keine GOOGLE_APPLICATION_CREDENTIALSVariable festgelegt, da ich dachte, dass dies auch automatisch erfolgt.

Was mich verwirrt, ist, dass die in Cloud Run ausgeführte Anwendung weiterhin Dateien in den Cloud-Speicher hochladen kann. Daher denke ich, dass sie von irgendwoher Anmeldeinformationen enthält.

Was mache ich falsch?

cascer1

TL; DR: Stellen Sie sicher, dass das Dienstkonto über die iam.serviceAccounts.signBlobBerechtigung verfügt.


Nach weiteren Untersuchungen der Methode, mit der ich Anmeldeinformationen für Cloud Run erworben habe:

GoogleCredentials credentials = ComputeEngineCredentials.create();
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

Ich habe den Javadoc gelesen für ComputeEngineCredentials:

OAuth2-Anmeldeinformationen, die das integrierte Dienstkonto für eine Google Compute Engine-VM darstellen. Ruft Zugriffstoken vom Metadatenserver der Google Compute Engine ab. Diese Anmeldeinformationen verwenden die IAM-API zum Signieren von Daten. Weitere Informationen finden Sie unter sign (byte []).

Danach las ich das Javadoc für sign(byte[])(Hervorhebung von mir):

Signiert die bereitgestellten Bytes mit dem privaten Schlüssel, der dem Dienstkonto zugeordnet ist. Das Projekt der Compute Engine muss die IAM-API (Identity and Access Management) aktivieren, und das Dienstkonto der Instanz muss über die Berechtigung iam.serviceAccounts.signBlob verfügen .

Aus iam.serviceAccounts.signBlobdiesem Grund habe ich eine neue Rolle nur mit der Berechtigung erstellt und sie dem Dienstkonto zugewiesen, das in meiner Cloud Run-Konfiguration verwendet wird. Danach verschwand das Problem sofort (keine erneute Bereitstellung erforderlich)

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

php | Das Google Webmaster-API-Dienstkonto hat keine Berechtigung

Sie haben keine Berechtigung zum Zugriff auf die App, während Sie das Google-Dienstkonto bereitstellen

Fehler abmelden Cloud Firestore. Der Aufrufer hat keine Berechtigung zum Ausführen der angegebenen Operation

gyp WARN EACCES Benutzer "root" hat keine Berechtigung zum Zugriff auf das Entwicklungsverzeichnis

Lambda hat keine Berechtigung zum Zugriff auf das ECR-Bild

FEHLER: (gcloud.services.enable) Benutzer hat keine Berechtigung zum Zugriff auf das Projekt (oder es ist möglicherweise nicht vorhanden): Der Anrufer hat keine Berechtigung

403 versucht, bereitgestellte Bytes zu signieren: Der Anrufer hat keine Berechtigung

FirebaseException ([cloud_firestore/permission-denied] Der Aufrufer hat keine Berechtigung zum Ausführen des angegebenen Vorgangs.)

Node exec hat keine Berechtigung zum Ausführen eines Skripts

Applescript hat keine Berechtigung zum Speichern von Dateien

Mac OS hat überhaupt keine Berechtigung zum Ordner usr / bin

VS2017 - Application Insights: Das Konto hat keine Berechtigung zum Zugriff auf die AI-Ressource

Das Google Cloud BigQuery-Administratorkonto erhält "hat keine Berechtigung für bigquery.jobs.create"

Google Cloud Policy Troubleshooter sagt, dass Dienstkonto keine Berechtigungen hat, obwohl es in IAM zugewiesen wurde

Das Dienstkonto konnte keine Pods abrufen, obwohl es über die Berechtigung "Fehler vom Server (verboten): ..." verfügt.

Kubernetes Dienstkonto hat keine zugewiesene Rolle?

Dart Flutter Firebase FirebaseException ([cloud_firestore/permission-denied] Der Aufrufer hat keine Berechtigung zum Ausführen des angegebenen Vorgangs.)

Es wurde versucht, das Anwendungssymbol zu kennzeichnen, aber der Benutzer hat keine Berechtigung zum Kennzeichnen der Anwendung erhalten: iOS 8 Xcode 6

Das Dienstkonto hat keinen Zugriff auf storage.objects.get für Google Cloud Storage

Firebase Storage-Ausnahme: Der Benutzer hat keine Berechtigung zum Zugriff auf dieses Objekt

Ihr Konto hat keine Berechtigung zum Erstellen von Developer ID Application-Zertifikaten

Discord.py kann keinen Fehler auslösen, wenn der Benutzer keine Berechtigung zum Treten hat

dataframe.to_sql in Teradata (dieser Benutzer hat keine Berechtigung zum Erstellen auf LABUSERS) Name der Datenbanktabelle

Xcode: "Ihr Konto hat keine Berechtigung zum Erstellen von iOS-Verteilungszertifikaten" als Teammitglied

permission_denied at /: Client hat keine Berechtigung zum Zugriff auf die gewünschten Daten

Der Client hat keine Berechtigung zum Senden als dieser Absender (Office 365, Grails).

Benutzer [X] hat keine Berechtigung zum Zugriff auf Benutzer [X: importSshPublicKey]

Firebase Realtime Database - Client hat keine Berechtigung zum Zugriff auf die gewünschten Daten

System.Net.Mail.SmtpClient - Der Client hat keine Berechtigung zum Senden als dieser Absender