我很确定这是 GCP 目前的一个实际错误。我是 GCP 组织的组织管理员(我已对此进行了四次检查,并且我已使用正确的帐户登录)。
但是,当我转到“管理资源”并尝试创建新文件夹时,它不允许我选择组织作为位置,因为我“没有所需的 resourcemanager.folders.create 权限”。如果我尝试在组织内的项目中创建文件夹,则会收到“未知错误”。
我是最初创建组织和所有项目的用户,也是该域中唯一存在的 G-Suite 用户。
roles/editorTerraform GCP google_service_account 和 google_project_iam_binding 资源,用于在 IAM 主体中附加已删除的 Google API 服务代理和 GCP 默认计算引擎默认服务帐户。由于 IAM 主体被删除,GKE 集群无法删除/创建,尽管它仍然保留在 IAM 服务账户中。
这里的问题是它从 IAM 主体中消失(我写为“已删除”),并且 Compute Engine 默认服务帐户受到威胁,因此无法再管理 Compute Engine,包括 GKE 集群/节点。
\n\n我相信这是一个 Terraform 错误,但请帮助了解我是否遗漏了一些可以防止该问题的东西。
\n另请告知是否有办法将 Compute Engine 默认服务帐户恢复到具有编辑者角色的 IAM 主体中。
\n$ terraform version\nTerraform v1.0.4\non linux_amd64\n+ provider registry.terraform.io/hashicorp/google v4.6.0\nRun Code Online (Sandbox Code Playgroud)\n.terraform.lock.hcl
\n# This file is maintained automatically by "terraform init".\n# Manual edits may …Run Code Online (Sandbox Code Playgroud) service-accounts google-cloud-platform terraform terraform-provider-gcp gcp-iam
我没有使用 JSON 密钥。我使用创建任何新客户端时使用的默认凭据加载机制。
但有什么方法可以反思当前的信用呢?
import google.auth
creds, project = google.auth.default()
# I can get the project id
print(project)
# I can get the oauth stuff
print(creds.client_secret)
print(creds.client_id)
Run Code Online (Sandbox Code Playgroud)
但是如何获取当前活动的用户或 Google 服务帐户的电子邮件名称呢?
我试过这个
print(creds.service_account_email)
Run Code Online (Sandbox Code Playgroud)
但它返回一个错误:
AttributeError: 'Credentials' object has no attribute 'service_account_email'
Run Code Online (Sandbox Code Playgroud)
这应该是该类的属性。
我想获取用户或谷歌服务帐户的电子邮件名称。
与此文章相关:以编程方式获取 GCP 上的当前服务帐户
从该帖子的示例中,如果不是 GSA,是否有办法获取用户的电子邮件名称?
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)