我正在尝试运行Python脚本来访问GCP中的秘密管理器,但我一直遇到上面的错误:"403请求没有足够的身份验证范围"
我一直遵循GCP文档中的这些说明。我可以使用
命令行成功访问秘密版本
gcloud secrets versions access {{ version-id }} --secret={{ "secret-id" }}
但不能使用docs
中的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-laporte是正确的。
这很令人困惑,但是,当您运行gcloud
(CLI)命令时,您以一种方式访问帐户凭据,当您在本地运行SDK代码时,您(需要)以不同的方式访问凭据。这解释了为什么gcloud
命令可以工作,而您的代码不能;他们访问凭据的方式不同。
这不是理想的方式,但是,如果你gcloud auth application-default login
你可以配置谷歌的应用程序默认凭据1来验证你的代码。
运行该命令,然后再试一次,它应该可以工作。
应用程序默认凭证可用于所有谷歌sdk,并简化认证过程。
最好创建一个服务帐户,如果运行off-GCP,则为该帐户生成一个密钥,然后使用GOOGLE_APPLICATION_CREDENTIALS
引用密钥的位置以运行代码。
但是,为了快速点击,gcloud auth application-default login
是可以的。
1-谷歌曾经有更好的文档来解释应用程序默认凭证,但是,这似乎已经消失了(并被自动查找凭证所取代)。John Hanley有一个非常清晰和全面的解释:
https://www.jhanley.com/google-cloud-application-default-credentials/
如果您在本地机器上运行代码,则应该安装Google Cloud SDK并以您的个人用户帐户向SDK进行身份验证:
gcloud auth login --update-adc
将打开一个浏览器窗口。选择您的用户帐户并按照提示操作。成功后,您的凭据将保存到gcloud
。
如果你使用的是官方的谷歌云客户端库,它会自动检测云SDK并使用这些凭据。