如何使用implicit GOOGLE_APPLICATION_CREDENTIALS
environment variable provided to a Cloud Function签署Cloud Storage URL?
当存在GOOGLE_APPLICATION_CREDENTIALS
环境变量时,以下内容在本地工作,但在Cloud Function内部运行时,失败,并出现KeyError
。
google_credentials = service_account.Credentials.from_service_account_file(
os.environ['GOOGLE_APPLICATION_CREDENTIALS']
)
client_email = google_credentials.service_account_email
credential_scope = '{}/auto/storage/goog4_request'.format(datestamp)
credential = '{}/{}'.format(client_email, credential_scope)
# ...
signature = binascii.hexlify(
google_credentials.signer.sign(string_to_sign)
).decode()
有问题的云功能将部署在多个环境中,因此我想避免必须实际部署凭据文件-可以运行。
在适当的情况下,我正在使用Python 3.7,并将解决方案基于this示例。
答案 0 :(得分:1)
部署功能时,不需要GOOGLE_APPLICATION_CREDENTIALS。请查看此[1],以了解如何处理经过身份验证的请求。
从[2]中可以看到,Cloud Storage客户端库可能需要IAM(iam.googleapis.com)API和iam.serviceAccounts.signBlob权限。即使Cloud Functions具有“默认应用程序凭据”,它(通常)也不包括iam.serviceAccounts.signBlob权限。
您可能会在文档中看到,您还需要确保您的服务帐户具有适当的角色。您还可以选择要使用您的功能运行哪个服务帐户。
请让我知道此信息是否有助于解决您的问题。
[1] https://cloud.google.com/functions/docs/writing/http#authentication_and_cors
[2] https://cloud.google.com/functions/docs/writing/http#uploading_files_via_cloud_storage