#python #google-cloud-platform
# #python #google-облачная платформа
Вопрос:
Я пытаюсь переместить CSV-файл с виртуальной машины в хранилище. Я добавил следующий код в свой скрипт
os.environ['xxx']=r"/home/xx/xxx.json"
storage_client = storage.Client()
bucket = storage_client.get_bucket("bucket name")
data=bucket.blob("xxx.csv")
data.upload_from_filename(r"/home/xxx/xxxx/xxx.csv")
Когда я запускаю скрипт из консоли SSH, он возвращает мне следующую ошибку
raise exceptions.from_http_status(response.status_code, message, response=response)
google.api_core.exceptions.Forbidden: 403 POST https://storage.googleapis.com/upload/storage/v1/b/sp500components/o
?uploadType=multipart: {
"error": {
"code": 403,
"message": "Insufficient Permission",
"errors": [
{
"message": "Insufficient Permission",
"domain": "global",
"reason": "insufficientPermissions"
}
]
}
}
: ('Request failed with status code', 403, 'Expected one of', <HTTPStatus.OK: 200>)
Я предоставил права администратора хранилища своей учетной записи службы, но проблема сохраняется
Обновить:
Я также обнаружил, что была строка, синтаксис которой был неправильным. Я пропустил GOOGLE_APPLICATION_CREDENTIALS
os.environ['GOOGLE_APPLICATION_CREDENTIALS']=r"xxxxx"
Комментарии:
1. Если вы добавили администратора хранилища в свою учетную запись службы, вы не используете эту учетную запись службы в своем коде. Ваш код использует ADC для определения местоположения учетных данных. Добавьте более подробную информацию о вашей среде и о том, как вы настроили учетную запись службы для доступа вашей программы.
Ответ №1:
Вы должны добавить области на свою виртуальную машину, чтобы ей было разрешено взаимодействовать с API облачного хранилища Google. Документацию по настройке областей экземпляра можно найти здесь .
gcloud beta compute instances set-scopes example-instance
--scopes=[SCOPES]
--zone=us-central1-b
--service-account=example-account
scopes
Флаг содержит по крайней мере одно значение или строку, разделенную запятыми. В вашем случае это может быть один из:
- облачная платформа
- хранилище заполнено
- хранилище-rw
Где последний предпочтительнее в соответствии с принципом наименьших привилегий. Вы также можете изменить это в консоли GCP.