错误:使用 Python 访问 gcloud 机密时"google.api_core.exceptions.PermissionDenied: 403 Request had insufficient



我正在尝试运行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并使用这些凭据。

相关内容

  • 没有找到相关文章

最新更新