通过 GCP 云功能安全访问存储?

时间:2021-03-18 17:02:38

标签: python google-cloud-platform google-cloud-functions google-cloud-storage service-accounts

我需要在 GCP 中编写一个云函数,该函数响应 HTTP 请求并具有对 GCP 云存储的服务帐户访问权限。我的函数将接收一个字符串和阈值参数。它将从云存储中检索一个 csv 文件,计算提供的文本字符串与 csv 文件中实体之间的相似度,并返回满足阈值要求的实体。

从谷歌的云功能教程中,我还没有看到任何可以访问云存储、访问其中的服务帐户等的内容。

谁能链接资源或以其他方式解释如何从 A 到 B?

1 个答案:

答案 0 :(得分:2)

让魔法发生吧!

事实上,没有什么是魔法。对于大多数 GCP 产品,您都有一个可以授予所需权限的服务帐号。在 Cloud Functions 上,默认服务帐户是具有此模式 <projectID>@appspot.gserviceaccount.com 的 AppEngine 默认服务帐户。

在部署 Cloud Functions 时,您可以通过使用此参数 --service-account= 来使用自定义服务帐户。更安全,因为您的 Cloud Functions 可以拥有自己的服务帐户,但权限有限(App Engine 默认服务帐户默认为项目编辑器,太宽了!!)

因此,此服务会自动加载您的云功能,并且 Google Cloud 身份验证库可以通过 Metadata server 访问它。凭据取自运行时上下文,它是环境的默认凭据

关于你的代码,就这么简单

    from google.cloud import storage

    client = storage.Client() # Use default credentials
    bucket = client.get_bucket('myBucket')
    blobs = bucket.list_blobs()
    for blob in blobs:
        print(blob.size)

在您的工作站上,如果您想执行相同的代码,您可以通过运行此命令来使用您自己的凭据 gcloud auth application-default login 如果您更喜欢使用服务帐户密钥文件(我强烈不建议这样做,但是这不是主题),您可以将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为文件路径作为值