错误:“google.api_core.exceptions.PermissionDenied:403请求的身份验证作用域不足”,当使用Python访问gcloud机密时

2024-06-06 10:36:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图运行一个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脚本一直在失败

你知道问题是什么吗


Tags: thename版本脚本clientidsecretaccess
2条回答

@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 auth login  update-adc

这将打开一个浏览器窗口。选择您的用户帐户并按照提示操作。成功后,您的凭据将保存到gcloud

如果您使用的是官方的Google云客户端库,它将自动检测云SDK并使用这些凭据

相关问题 更多 >