Я написал простую программу на Python согласно документации Google. Я получаю сообщение об ошибке, утверждая, что данная учетная запись не имеет доступа. Пробовал разные комбинации, но не работал.
Я перепроверил данный доступ, предоставив java-программу и gsutil. В обоих этих местах я могу получить доступ к ведру и загрузить файл. Проблема с программой Python. Пожалуйста, покажите немного света по этому вопросу.
from google.oauth2 import service_account
from google.cloud import storage
credentials = service_account.Credentials.from_service_account_file('C:/Users/AWS/python/sit.json'
,scopes=['https://www.googleapis.com/auth/cloud-platform'])
storage_client = storage.Client(credentials=credentials,project='proj-sit')
bucket = storage_client.get_bucket('b-sit')
blob = bucket.blob('myfile')
blob.upload_from_string('New contents!. This is test.')
и я получил ошибку ниже
Traceback (most recent call last):
File "C:\Users\AWS\python\mypgm.py", line 21, in <module>
bucket = storage_client.get_bucket('pearson-gcss-sit') # pearson-gcss-sit pearson-bbi-dev global-integration-nonprod
File "D:\Development_Avecto\Python36\lib\site-packages\google\cloud\storage\client.py", line 227, in get_bucket
bucket.reload(client=self)
File "D:\Development_Avecto\Python36\lib\site-packages\google\cloud\storage\_helpers.py", line 106, in reload
method="GET", path=self.path, query_params=query_params, _target_object=self
File "D:\Development_Avecto\Python36\lib\site-packages\google\cloud\_http.py", line 319, in api_request
raise exceptions.from_http_response(response)
google.api_core.exceptions.Forbidden: 403 GET https://www.googleapis.com/storage/v1/b/b-sit?projection=noAcl: someid-sit@someinfo-sit.iam.gserviceaccount.com does not have storage.buckets.get access to b-sit.
[Finished in 10.6s]
Примечание. Я вижу роль как storage.objectAdmin в console.cloud.google.com.
Для получения дополнительной информации я могу загрузить файлы, используя нижеприведенную Java-программу.
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(connectionKeyPath))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
BlobId blobId = BlobId.of("some-sit", "cloudDirectory/file.zip");
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("application/zip").build();
Blob blob = storage.create(blobInfo, fileContent);
Я получил основную причину проблемы.
Основная причина: мой контейнер имеет доступ к «role / storage.objectAdmin», который не имеет доступа к «storage.buckets.get». Следовательно, я получаю вышеуказанную ошибку в строке, где у меня есть функция get_bucket. Это я нашел в google документации .
Все примеры кодов в документации имеют функцию get_bucket для загрузки файлов. Мои вопросы, как мы можем загрузить файлы в корзину без этого доступа (storage.buckets.get)? Потому что мы загрузили в ту же корзину Java без этого доступа.
Можете ли вы пролить свет на это? пожалуйста