通过Python中的服务帐户访问Google Cloud Storage的权限

时间:2019-03-04 12:32:57

标签: google-cloud-platform google-cloud-storage google-cloud-python

我正在尝试获取一个服务帐户以在Google Cloud Storage中创建Blob 从Python脚本中获取,但是凭据出现问题。

1)我为我的项目创建服务帐户,然后将密钥文件下载到json中:

"home/user/.config/gcloud/service_admin.json"

2)我为服务帐户提供了必要的凭据(通过子进程中的gcloud)

 roles/viewer, roles/storage.admin,  roles/resourcemanager.projectCreator, roles/billing.user

然后我想访问GCS中的存储桶

from google.cloud import storage
import google.auth

credentials, project = google.auth.default()
client = storage.Client('myproject', credentials=credentials)
bucket = client.get_bucket('my_bucket')

不幸的是,这导致:

google.api_core.exceptions.Forbidden: 403 GET
https://www.googleapis.com/storage/v1/b/my_bucket?projection=noAcl:
s_account@myproject.iam.gserviceaccount.com does not have
storage.buckets.get access to my_bucket

如果我设置了环境变量,我的运气会更好

export GOOGLE_APPLICATION_CREDENTIALS="home/user/.config/gcloud/service_admin.json"

并重新运行脚本。但是,我希望它们全部在脚本的一个实例中运行,该脚本创建帐户并继续在存储桶中创建必要的文件。如果我知道JSON凭证文件在哪里,如何访问my_bucket。

1 个答案:

答案 0 :(得分:0)

Documentation for Server to Server Authentication尝试以下示例:

from google.cloud import storage

# Explicitly use service account credentials by specifying the private key file.
storage_client = storage.Client.from_service_account_json('service_account.json')

# Make an authenticated API request
buckets = list(storage_client.list_buckets())
print(buckets)

通过这种方式,您可以直接在代码中指向包含服务帐户密钥的文件。