1

У меня есть учетная запись Google в качестве студента. Эта учетная запись управляется моим университетом, а недавно университет сообщил нам, что учетные записи студентов теперь имеют «неограниченное» хранилище для Диска и т. Д.Google APP управляет «неограниченной» учетной записью для хранения учетной записи

Чтобы выполнить резервное копирование, я создал несколько учетных записей службы в консоли Google API (XXX @ developer.gserviceaccount.com). Но выясняется, что хранилище этих учетных записей ограничено 15 ГБ, то есть при попытке загрузить файлы в одну из учетных записей службы, в которой уже есть ~ 15 ГБ, я получаю сообщение об ошибке «клиент превысил свою квоту хранилища».

Я спросил администраторов университета, они не знают, как помочь и даже не видеть адрес учетной записи службы ([email protected]) в списке управляемых учетных записей.

Итак, вопрос заключается в том, что должно быть сделано (мной или администраторами университета), чтобы удалить (или увеличить) квоту хранения моих учетных записей службы, когда они были открыты с «неограниченной» учетной записью студента.

Обновление: попытка @DaImTo предложение:

Так я создал папку в моем Drive веб-интерфейс и общий его с моей учетной записи службы. Затем, с учетной записью службы, я загрузил файл в эту папку (с помощью PyDrive библиотеки):

file1 = drive.CreateFile({'title': 'test2', 'parents': [{"kind": "drive#fileLink", "id": shared_folder_id}]}) 
file1.SetContentString('some text') 
file1.Upload() 
print 'File ID: %s' % file1['id'] 
permissions = file1.auth.service.permissions().list(fileId=file1['id']).execute() 
print "permissions:", permissions 

Выход:

File ID: XXX 
permissions: {u'items': [{u'kind': u'drive#permission', u'name': u'[email protected]', u'domain': u'developer.gserviceaccount.com', u'etag': u'"XXX"', u'emailAddress': u'[email protected]', u'role': u'owner', u'type': u'user', u'id': u'XXX', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX'}, 
{u'kind': u'drive#permission', u'name': u'<my name>', u'domain': u'<my school domain>', u'etag': u'"XXX"', u'emailAddress': u'<my name>@<my school domain>', u'role': u'writer', u'type': u'user', u'id': u'XXX', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX'}], u'kind': u'drive#permissionList', u'etag': u'"XXX"', u'selfLink': u'https://www.googleapis.com/drive/v2/files/XXX/permissions?alt=json'} 

Так загруженный файл автоматически имеет два разрешения: счета 1. Службы является «владелец» 2. Моя основная учетная запись «писатель»

Действительно, я могу видеть файл в веб-интерфейсе, редактировать его, удалять и т. д. Но поскольку учетная запись службы является владельцем, файл учитывается в сервисе Счет кейти хранения, поэтому это не решает мою проблему, то есть я все еще не могу использовать более 15 ГБ с моим приложением резервного копирования.

Я пытался передать право собственности на мой основной счет:

file1 = drive.CreateFile({'id': file_id}) 
permissions = file1.auth.service.permissions().list(fileId=file1['id']).execute() 
myperm_id = permissions['items'][1]['id'] # this is the second permission, i.e. of my main account 
myperm = file1.auth.service.permissions().get(fileId=file1['id'], permissionId=myperm_id).execute() 
myperm['role'] = 'owner' 
file1.auth.service.permissions().update(fileId=file1['id'], permissionId=myperm['id'], body=myperm).execute() 

... и получил ошибку:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v2/files/XXX/permissions/XXX?alt=json returned "Insufficient permissions for this file"> 

Я пытался добавить transferOwnership = 'True':

file1.auth.service.permissions().update(fileId=file1['id'], permissionId=myperm['id'], body=myperm, transferOwnership='True').execute() 

получил ту же ошибку. Я застрял здесь.

Кстати, в справочной системе Google Transfer file ownership они говорят: «Если вы пользователь Google Apps, вы не можете передавать права собственности другому лицу, находящемуся за пределами вашего домена».

ответ

0

Кажется, что невозможно передать права собственности на файлы, загруженные учетной записью службы, на основную учетную запись.

Наконец, я отказался от подхода к учетной записи службы и последовал за this, чтобы запустить мое приложение в качестве обычного пользователя.

После того, как шаги, описанные там были выполнены, я создаю службы привода так:

import httplib2 
from pydrive.auth import GoogleAuth 
from pydrive.drive import GoogleDrive 

gauth = GoogleAuth() 
gauth.LoadCredentialsFile("GoogleDriveCredentials.txt") 
if gauth.credentials is None: 
    gauth.LocalWebserverAuth() 
elif gauth.access_token_expired: 
    print "Google Drive Token Expired, Refreshing" 
    gauth.Refresh() 
else: 
    gauth.Authorize() 
gauth.SaveCredentialsFile("GoogleDriveCredentials.txt") 
drive = GoogleDrive(gauth) 

Где GoogleDriveCredentials.txt имеет вид:

{"_module": "oauth2client.client", "token_expiry": "XXX", "access_token": "XXX", "token_uri": "https://accounts.google.com/o/oauth2/token", "invalid": false, "token_response": {"access_token": "XXX", "token_type": "Bearer", "expires_in": 3600}, "client_id": "XXX.apps.googleusercontent.com", "id_token": null, "client_secret": "XXX", "revoke_uri": "https://accounts.google.com/o/oauth2/revoke", "_class": "OAuth2Credentials", "refresh_token": "XXX", "user_agent": null} 

Теперь владелец Загруженные файлы является «я» в веб-интерфейсе, и они учитываются в квоте хранения моей основной учетной записи, поэтому моя цель достигнута.

+0

Отлично, что вы его работали. Какие ошибки у меня есть, как вы получили учетные данные учетной записи службы? Возможно, вы не заполнили поле 'sub'. Если вы заполните его, учетная запись sercice выдаст себя за данного пользователя. Для меня владельцем файла была тогда учетная запись. – okipol

0

Учетная запись службы не вы. Подумайте о учетной записи службы как фиктивного пользователя Google, у нее есть своя учетная запись Google, учетная запись календаря Google ...

Возможно, это связано с разработчиками, имеющими доступ к ней на консоли разработчика Google, если приложение, использующее учетную запись службы, начнет спам. Дисковод Google отключит учетную запись консоли разработчика. Но помимо этого вы и любые учетные записи служб, которые вы создаете, являются отдельными объектами.Он не имеет доступа к вашей учетной записи неограниченного объема, пока вы не предоставите ей доступ к неограниченной учетной записи. (желаю, чтобы у меня была неограниченная учетная запись)

Теперь это сущность, но я не настолько уверен, что школа может дать ей доступ. На самом деле я не уверен, что хотел бы, чтобы он удалил одну часть контроля учетной записи службы у меня. Некоторый администратор школы мог бы просто удалить его в один прекрасный день и сломать все .....

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

Обновление Просто подумал о чем-то: вам, вероятно, придется проверить, к каким каталогам он имеет доступ, как только вы предоставите ему доступ к каталогу вашего диска. Вам нужно будет убедиться, что он загружается на общий диск, а не его корневой каталог.

обновление Разрешения:

Вы, вероятно, с помощью file.insert, чтобы загрузить файл. это только первый шаг.

После того, как вы загрузили файл, вам необходимо будет его исправить, а также изменить разрешения, разрешающие вас, как у вас лично, а не доступ к учетной записи службы. Когда файл загружается, его учетная запись службы добавляет OWNED.

Чтобы обновить разрешения на файл, вам необходимо будет использовать Files: patch и предоставить вам, как у вас, а не доступ к учетной записи службы.

К сожалению, на данный момент невозможно установить разрешения для файла при его загрузке. Я не уверен, что это ошибка или ее просто не поддерживается. Я создал запрос на эту проблему несколько дней назад. Issue 3717: Google drive api, upload file with shared permission

+1

Отлично, он работает. Я смог загрузить в общую папку с Pydrive, все, что нужно - это указать «id родителей», который будет идентификатором общей папки. – apropos2341

+0

Пожалуйста, не забудьте ответить. Я рад, что это сработало. – DaImTo

+0

Мой предыдущий комментарий был преждевременным. Я все еще застрял, вот почему: пока я могу загружать файлы с учетной записью службы в общую папку на основной (неограниченной) учетной записи, эти файлы «принадлежат» учетной записи службы, основная учетная запись имеет «запись» "роль. Таким образом, они учитываются в квоте хранения учетной записи службы, поэтому она не решает мою проблему.Я попытался передать право собственности на основную учетную запись, но не последовал (получил ошибку «недопустимые права»). Google help сказал, что право собственности может быть передано только пользователю в том же домене. Есть ли другой путь? – apropos2341

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