1

Не удалось получить доступ к хранилищу Google Cloud Storage по умолчанию из Appengine Project. Этот проект был создан с версией SDK для Android версии до 1.9.0. Я создал ведро вручную, согласно GCS Documentation было сказано, что по умолчанию ведро доступно для Appengine Projects, но оно недоступно в моем случае. Это фрагмент кода, который пытается создать файл ..Приложение Google App Engine не удалось получить доступ к веществу Google Cloud Storage

... 
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 
... 

обнаружена ошибка в журналах:

: 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: Я пытался создать новый Google Appengine Project и развернуто приложение инициализации , Этот проект автоматически создается с помощью ведра GCS по умолчанию, и тот же код работает нормально, без каких-либо ошибок. В моем старом проекте много данных БД, которые я хочу сохранить и продолжать использовать один и тот же проект, не удаляя его.

Помогите с мыслями, чтобы сделать ковш GCS доступным в старом проекте.

+0

Я подозреваю, что ваше старое ведро не имеет те же права, что и сегодня по умолчанию ведер. Попробуйте создать новое ведро для старого проекта и использовать его для получения необходимых разрешений, которые затем вручную применяются к вашему старому ковшу, если это необходимо. Возможно также несоответствие названий ковша, возможно, использование явно выраженных ковшей (вместо ведра по умолчанию для приложения) будет касаться такого случая. –

+0

Спасибо за ваше обновление, я решил проблему, отправьте мой ответ для получения дополнительной информации. – v7r

ответ

0

Попробуйте это: -

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

Решенный вопрос, добавив IAM permissin для Appengine проекта. После прочтения документа IAM «Контроль доступа на уровне проекта» и сравнения старого проекта и новых разрешений проекта стало известно, что разрешение на уровне проекта Appengine не найдено в старом проекте. После добавления разрешения один и тот же код начал получать доступ к ведро по умолчанию.

IAM Permissions before fix screenshot

IAM Permissions after fix screenshot

Смежные вопросы