Voy*_*Voy 10 google-compute-engine service-accounts google-cloud-platform google-container-os google-cloud-iam
GOOGLE_APPLICATION_CREDENTIALS当没有设置时,是否有一种方法可以以编程方式访问 GCP 实例上当前使用的服务帐户的电子邮件?(即使用默认服务帐户时)
我查看了 GCP 文档,但我发现的唯一资源在未设置时无法与默认服务帐户一起使用。GOOGLE_APPLICATION_CREDENTIALS我知道可以使用gcloud(请参阅此SO问题或文档)来做到这一点,但是这些解决方案在ContainerOptimizedOS上运行时不适用。我花了几周时间与 GCP 支持团队沟通,但他们最终无法帮助我,并将我重定向到 Stack Overflow 寻求帮助。
gui*_*ere 14
约翰的解决方案在任何语言上都非常有效,无需任何外部库。但是,它仅适用于部署了元数据服务器的 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?")
Run Code Online (Sandbox Code Playgroud)
请注意,如果使用默认服务帐户,此方法将打印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?")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8940 次 |
| 最近记录: |