3

Wir verwenden ein Dienstkonto, um unsere App mithilfe von Travis in App Engine zu implementieren.App Engine bereitstellen: Berechtigungen Fehler beim Abrufen der Anwendung

Auf jeder zusammengeführten PR zieht Travis den Code aus unserem GitHub-Repository und zieht eine Docker image, die das Google Cloud SDK enthält und den Befehl gcloud app deploy ausführt. Wir verwenden ein Dienstkonto, um die Bereitstellung mit der Rolle "Projektinhaber" durchzuführen.

Alles funktionierte gut, bis ich einen neuen Dienst zum Projekt hinzugefügt hat, der die Generierung und Erneuerung von SSL-Zertifikaten automatisiert, zusammen mit einer dispatch.yaml Datei, um eingehenden Datenverkehr von Let's Encrypt zur Domänenüberprüfung zu routen. Ich musste mehr Berechtigungen hinzufügen, um die SSL-Zertifikate zu aktualisieren, die wir für unsere benutzerdefinierte Domäne verwenden. Ich habe das aktuelle Dienstkonto entfernt und ein neues mit einem neuen privaten Schlüssel erstellt. Ich habe eine neue Rolle mit den erforderlichen Berechtigungen zum Aktualisieren und Anzeigen von SSL-Zertifikaten zusätzlich zu den vorherigen Berechtigungen erstellt (alle appengine.* Berechtigungen). Ich habe die neue Rolle und die Rolle des Project Owners dem neuen Konto zugewiesen. Nach diesen Änderungen schlägt der Einsatz mit dem folgenden Fehler, wenn den deploy Befehl ausführen:

Permissions error fetching application [apps/hollowverse-c9cad]. Please make sure you are using the correct project ID and that you have permission to view applications on the project. 

ich das gleiche Dienstkonto auf meinem lokalen Rechner mit Protokollebene auf Debug festgelegt verwendet. Ich habe diesen Fehler:

DEBUG: HttpError accessing <https://appengine.googleapis.com/v1/apps/hollowverse-c9cad?alt=json>: response: <{'status': '403', 'content-length': '335', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'vary': 'Origin, X-Origin, Referer', 'server': 'ESF', '-content-encoding': 'gzip', 'cache-control': 'private', 'date': 'Wed, 02 Aug 2017 14:33:50 GMT', 'x-frame-options': 'SAMEORIGIN', 'alt-svc': 'quic=":443"; ma=2592000; v="39,38,37,36,35"', 'content-type': 'application/json; charset=UTF-8'}>, content <{ 
    "error": { 
    "code": 403, 
    "message": "Operation not allowed", 
    "status": "PERMISSION_DENIED", 
    "details": [ 
     { 
     "@type": "type.googleapis.com/google.rpc.ResourceInfo", 
     "resourceType": "gae.api", 
     "description": "The \"appengine.applications.get\" permission is required." 
     } 
    ] 
    } 
} 
> 
DEBUG: (gcloud.beta.app.deploy) Permissions error fetching application [apps/hollowverse-c9cad]. Please make sure you are using the correct project ID and that you have permission to view applications on the project. 

Die Beschreibung sagt, dass appengine.applications.get erforderlich ist, die Bereitstellung durchzuführen. Mit Blick auf die erteilten Berechtigungen auf die Rolle auf das Konto Travis zugewiesen wir bereitstellen verwenden, wird appengine.applications.get eindeutig erteilt:

screenshot_20170802_174402

ich jede mögliche App Engine und Projekt Rolle auf dem Konto zugewiesen, aber Bereitstellung fehlschlägt nach wie vor mit der gleiche Fehler. Die Verwendung des Standarddienstkontos, das automatisch für jedes neue Projekt auf GCP erstellt wird, scheint jedoch zu funktionieren.

Antwort

3

I removed the current service account, and created a new one with a new private key.

Hier ging es schief. Der neue Account hatte die gleiche ID wie der vorherige. Obwohl ich dieses Verhalten nirgendwo dokumentiert finden konnte, sieht es so aus, dass nach der Verwendung einer ID für ein Dienstkonto diese nicht mehr für ein neues Konto verwendet werden kann, selbst wenn das vorherige Konto entfernt wurde.

Wir haben ein neues Konto mit einer neuen ID (travis2@hollowverse-c9cad.iam.gserviceaccount.com) statt [email protected]) und das Problem ist nun behoben.

Verwandte Themen