我试图运行一个Python脚本来访问GCP中的Secrets Manager,但我一直遇到上面的错误:“403请求没有足够的身份验证作用域”
我一直在关注GCP文档中的these instructions。我可以使用以下命令行成功访问机密版本:
gcloud secrets versions access {{ version-id }} --secret={{ "secret-id" }}
但无法从文档中使用Python函数访问机密版本
def access_secret_version(project_id, secret_id, version_id):
"""
Access the payload for the given secret version if one exists. The version
can be a version number as a string (e.g. "5") or an alias (e.g. "latest").
"""
# Import the Secret Manager client library.
from google.cloud import secretmanager
# Create the Secret Manager client.
client = secretmanager.SecretManagerServiceClient()
# Build the resource name of the secret version.
name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
# Access the secret version.
response = client.access_secret_version(request={"name": name})
# Print the secret payload.
# snippet is showing how to access the secret material.
payload = response.payload.data.decode("UTF-8")
return payload
我错过了什么
我帐户的IAM权限包含“Secrets Manager Secret Accessor”。我认为这不是问题所在,因为我可以从命令行访问机密版本。但是Python脚本一直在失败
你知道问题是什么吗
@thomas Laport是对的
这很让人困惑,但是,当您运行
gcloud
(CLI)命令时,您以一种方式访问帐户凭据,而当您在本地运行SDK代码时,您(需要)以另一种方式访问凭据。这解释了为什么gcloud
命令可以工作,而代码不能工作;他们访问凭证的方式不同这不是理想的方法,但是,如果你^{} ,你可以配置谷歌的应用程序默认凭证1来验证你的代码
运行该命令,然后重试您的代码,它应该可以工作
应用程序默认凭据可用于所有谷歌SDK,并简化了身份验证过程
最好创建一个服务帐户,如果使用GCP,则为该帐户生成一个密钥,然后使用
GOOGLE_APPLICATION_CREDENTIALS
引用该密钥的位置来运行代码但是,对于快速点击,可以
gcloud auth application-default login
1-谷歌过去有更好的文档来解释应用程序默认凭据,但是,这似乎已经消失了(并被Finding credentials automatically取代)。John Hanley有一个非常清楚和全面的解释:
https://www.jhanley.com/google-cloud-application-default-credentials/
如果您在本地计算机上运行代码,则应安装Google Cloud SDK,并作为您的个人用户帐户向SDK进行身份验证:
这将打开一个浏览器窗口。选择您的用户帐户并按照提示操作。成功后,您的凭据将保存到
gcloud
如果您使用的是官方的Google云客户端库,它将自动检测云SDK并使用这些凭据
相关问题 更多 >
编程相关推荐