gcs 没有 ACCESS_KEY_ID、 ACCESS_KEY_SECRET 吗

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 storage

from 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

回到顶部