gcs 没有 ACCESS_KEY_ID、 ACCESS_KEY_SECRET 吗
我有一个需求:上传文件到 google-cloud-storage ,使用了谷歌提供的 python client sdk: google-cloud-storage
但是我发现很严重的问题:
使用 aliyun 的 oss ,我们只要简单的使用 ACCESS_KEY_ID、 ACCESS_KEY_SECRET 就可以连上,然后上传文件。
oss: ALI_OSS_ACCESS_KEY_ID: xxx
ALI_OSS_ACCESS_KEY_SECRET: xxx
ALI_OSS_END_POINT: xxx
ALI_OSS_BUCKET: xxx
但是在 google-cloud-storage 貌似没有 ACCESS_KEY_ID、 ACCESS_KEY_SECRET 吗?
貌似需要通过 json 文件来做鉴权?有什么简单的 example 可以参考吗?
回答:
没有,谷歌的云存储非常的奇葩,没有正常 oss、minio 那种 access_key、secret_key 来做身份验证,而是把事情搞得极其复杂,复杂到你不看一整个下午的文档,根本无法入手!
解决方案是什么呢?
方案有超级多!
但是我只介绍一个超级简单的、符合云原生需要的:
以服务帐号身份进行身份验证
大概思路就是:
- 创建一个服务账号
- 以该服务账号的名义,创建一个凭据(是一个 json 文件)
这个凭证(也就是 json 文件)大概长成下面这样:
{ "type": "xxx",
"project_id": "xxx",
"private_key_id": "xxxx",
"private_key": "xxxx",
"client_email": "xxx",
"client_id": "xxxxxx",
"auth_uri": "xxxx",
"token_uri": "xxxx",
"auth_provider_x509_cert_url": "xxxxx",
"client_x509_cert_url": "xxxx"
}
然后使用相关的 sdk 库,连接到 gcs
下面以 python 举例子:
需求:判断 gcs 中是否存在指定对象
from google.cloud import storagefrom google.auth.credentials import Credentials
def has_object(bucket_name: str, obj_file_path: str) -> bool:
"""
参考: https://cloud.google.com/storage/docs/samples/storage-list-files-with-prefix?hl=zh-cn
"""
storage_client = storage.Client.from_service_account_json(
str(BASE_DIR/'auth'/'xxxx.json')
)
blobs = list(storage_client.list_blobs(bucket_name, prefix=obj_file_path))
logger.debug(f'一共有 {len(blobs)} 个对象')
return bool(blobs)
以上是 gcs 没有 ACCESS_KEY_ID、 ACCESS_KEY_SECRET 吗 的全部内容, 来源链接: utcz.com/p/938509.html