gpt4 book ai didi

google-cloud-platform - 以编程方式获取 GCP 上的当前服务帐户

转载 作者:行者123 更新时间:2023-12-05 00:44:48 26 4
gpt4 key购买 nike

在未设置 GOOGLE_APPLICATION_CREDENTIALS 的情况下,是否有办法以编程方式访问 GCP 实例上当前使用的服务帐户的电子邮件?(即使用默认服务帐户时)

我查看了 GCP 文档,但 only resource I found不能与 default Service Account 一起使用当没有设置 GOOGLE_APPLICATION_CREDENTIALS 时。我知道使用 gcloud 可以做到这一点(参见 this SO questiondocumentation ),但是这些解决方案在 ContainerOptimisedOS 上运行时不适用.我与 GCP 支持团队来来回回花了几周时间,但他们得出的结论是无法帮助我,并将我重定向到 StackOverflow 寻求帮助。

最佳答案

John 的解决方案在任何语言上都非常有效,无需任何外部库。但是,当部署了元数据服务器时,它仅适用于 Google Cloud 环境。您无法在您的计算机上执行此测试。

我建议只使用一段 Python 代码(使用 Google OAuth 库,但它适用于具有此库的其他语言)来询问库当前的凭据。如果凭据是服务帐户(来自计算机上的 GOOGLE_APPLICATION_CREDENTIALS、ADC(应用程序默认凭据)或元数据服务器),则您已打印电子邮件,否则,您会收到警告消息,因为您使用了用户帐户凭据

    import google.auth

credentials, project_id = google.auth.default()

if hasattr(credentials, "service_account_email"):
print(credentials.service_account_email)
else:
print("WARNING: no service account credential. User account credential?")

请注意,如果使用默认服务帐户,此方法将打印 default 而不是整个电子邮件地址。


编辑 1

    ctx := context.Background()
credential,err := google.FindDefaultCredentials(ctx)
content := map[string]interface{}{}

json.Unmarshal(credential.JSON,&content)
if content["client_email"] != nil {
fmt.Println(content["client_email"])
} else {
fmt.Println("WARNING: no service account credential. User account credential?")
}

关于google-cloud-platform - 以编程方式获取 GCP 上的当前服务帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65821436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com