Попытка подключиться к облачному хранилищу Google (GCS) с помощью Python

1

Я создал следующий скрипт:

import boto
import sys
import gcs_oauth2_boto_plugin

def check_size_lzo(ds):

# URI scheme for Cloud Storage.

    CLIENT_ID = 'myclientid'
    CLIENT_SECRET = 'mysecret'

    GOOGLE_STORAGE = 'gs'

    dir_file= 'date_id={ds}/apollo_export_{ds}.lzo'.format(ds=ds)



    gcs_oauth2_boto_plugin.SetFallbackClientIdAndSecret(CLIENT_ID, CLIENT_SECRET)
    uri = boto.storage_uri('my_bucket/data/apollo/prod/'+ dir_file, GOOGLE_STORAGE)
    key = uri.get_key()



    if key.size < 45379959:
        raise ValueError('umg lzo file is too small, investigate')
    else:
        print('umg lzo file is %sMB' % round((key.size/1e6),2))



if __name__ == "__main__":

     check_size_lzo(sys.argv[1])

Он работает нормально локально, но когда я пытаюсь запустить кластер kubernetes, я получаю следующую ошибку:

boto.exception.GSResponseError: GSResponseError: 403 Access denied to 'gs://my_bucket/data/apollo/prod/date_id=20180628/apollo_export_20180628.lzo'

Я обновил файл.boto в своем кластере и добавил свой идентификатор клиента oauth и секрет, но все еще имею ту же проблему.

Было бы очень полезно помочь решить эту проблему.

Большое спасибо!

  • 0
    если вы используете сервисную учетную запись, активировали ли вы ее? Если нет, выполните эту команду gcloud auth activate-service-account --key-file=service-account-key-file и попробуйте снова выполнить код. Также убедитесь, что все узлы вашего кластера имеют файл ключа учетной записи службы.
Теги:
google-cloud-platform
google-cloud-storage
kubernetes

1 ответ

1

Если он работает в одной среде и терпит неудачу в другом, я предполагаю, что вы получаете свой auth из.boto файла (или, возможно, из переменной среды OAUTH2_CLIENT_ID), но в вашем экземпляре kubernetes отсутствует такой файл. То, что у вас есть 403 вместо 401, говорит, что ваш удаленный сервер правильно аутентифицируется как кто-то, но кто-то не имеет права доступа к объекту, так что предположительно вы делаете вызов другим пользователем.

Если вы ничего не изменили, я предполагаю, что вы получаете стандартную версию Kubernetes Engine по умолчанию, со ссылкой на учетную запись службы, связанную с вашим проектом. Эта учетная запись службы, вероятно, не получила разрешения на чтение для вашего объекта, поэтому вы получаете 403. Предоставьте разрешение на чтение/запись для ваших ресурсов GCS, и это должно решить проблему.

Также обратите внимание, что по умолчанию учетные данные по умолчанию не ограничены, чтобы включать GCS, поэтому вам также нужно добавить это, а затем перезапустить экземпляр.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню