1

Zugriff auf den Google Cloud Storage-Standard-Bucket von Appengine Project nicht möglich. Dieses Projekt wurde mit der Version von App engine SDK vor 1.9.0 erstellt. Ich habe den Bucket manuell erstellt, laut GCS Documentation hieß es standardmäßig, der Bucket sei für Appengine Projects zugänglich, aber in meinem Fall nicht erreichbar. Dies ist der Code-Schnipsel, die eine Datei ..Google App Engine-App konnte nicht auf den Google Cloud Storage-Bucket zugreifen

... 
GcsService gcsService = GcsServiceFactory.createGcsService(); 
GcsFilename file = new GcsFilename(getGcsDefaultBucketName(), fileName); 
GcsFileOptions.Builder builder = new GcsFileOptions.Builder(); 
GcsFileOptions options = builder.mimeType(mimeType).build();  
GcsOutputChannel channel = gcsService.createOrReplace(file, options); //erroring in this line 
... 

Fehler in Logs gefunden zu erstellen versucht:

: com.google.appengine.tools.cloudstorage.NonRetriableException: java.lang.RuntimeException: Server replied with 403, verify ACLs are set correctly on the object and bucket: Request: POST https://storage.googleapis.com/1-ebilly.appspot.com/SERVICESTAGEREPORT-DEVICENAME-LYF2-CREATEDDATE-01012017-CREATEDDATE-19022017-.ZIP 
: User-Agent: AppEngine-Java-GCS 
: Content-Length: 0 
: x-goog-resumable: start 
: Content-Type: application/zip 
: 
: no content: Response: 403 with 212 bytes of content 
: X-GUploader-UploadID: AEnB2Upq0Lhtfy5pbt06pVib8J0-L0XiGqW4JpB0G9PL87keY3WV7RCMVLCPeclD-D4UATEddvvwpAG2qeeIxUJx--brKxdQFw 
: Content-Type: application/xml; charset=UTF-8 
: Content-Length: 212 
: Vary: Origin 
: <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>Caller does not have storage.objects.create access to bucket myprojectID.appspot.com.</Details></Error> 
: 
: at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:120) 
: at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166) 
: at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156) 
: at com.google.appengine.tools.cloudstorage.GcsServiceImpl.createOrReplace(GcsServiceImpl.java:70) 

PS: Ich habe versucht, ein neues Google App Engine-Projekt zu erstellen und zum Einsatz der App init . Dieses Projekt wird automatisch mit einem Standard-GCS-Bucket erstellt, und derselbe Code funktioniert ohne Fehler. Mein altes Projekt enthält viele DB-Daten, die ich behalten möchte und weiterhin dasselbe Projekt verwenden möchte, ohne es zu entsorgen.

Bitte helfen Sie mit Ihren Gedanken, um den GCS-Bucket im alten Projekt zugänglich zu machen.

+0

Ich vermute, Ihre alten Eimer nicht die gleichen Berechtigungen wie der heutigen Standard-Eimer hat. Erstellen Sie einen neuen Bucket für das alte Projekt, und verwenden Sie es, um die erforderlichen Berechtigungen zu erhalten, die Sie dann bei Bedarf manuell auf Ihren alten Bucket anwenden. Eine nicht übereinstimmende Bucket-Benennung ist ebenfalls möglich. Möglicherweise würde die Verwendung von Buckets mit explizitem Namen (anstelle des Buckets der Standardanwendung) diesen Fall berücksichtigen. –

+0

Vielen Dank für Ihr Update. Ich habe das Problem behoben. Weitere Informationen finden Sie in meiner Antwort. – v7r

Antwort

0

Try this: -

GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance()); 
GcsFileOptions options = new GcsFileOptions.Builder().mimeType(mime).build(); 
GcsFilename gcsfilename = new GcsFilename(BUCKET_NAME, fileName); 
GcsOutputChannel outputChannel = gcsService.createOrReplace(gcsfilename, options); 
0

das Problem behoben von IAM permissin für appengine Projekt hinzufügen. Nach dem Lesen des IAM-Dokuments "Zugriffskontrolle auf Projektebene" und dem Vergleich alter Projekt- und neuer Projektberechtigungen wurde festgestellt, dass die Appengine-Projektebenenberechtigung im alten Projekt nicht gefunden wurde. Nach dem Hinzufügen der Berechtigung wurde derselbe Code gestartet, um auf den Standard-Bucket zuzugreifen.

IAM Permissions before fix screenshot

IAM Permissions after fix screenshot

Verwandte Themen