gpt4 book ai didi

google-cloud-platform - 尝试在 GCP 中模拟服务帐户时出现错误 403、 "The caller does not have permission"

转载 作者:行者123 更新时间:2023-12-05 03:24:29 25 4
gpt4 key购买 nike

我有这个相当简单的 Terraform 配置:

terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.19.0"
}

airflow = {
source = "DrFaust92/airflow"
version = "~> 0.6.0"
}
}
}

data "http" "client_id" {
url = var.cloud_composer.airflow_uri
}

resource "google_service_account" "impersonated-gsa" {
account_id = "impersonated"
}

data "google_service_account_access_token" "impersonated" {
target_service_account = google_service_account.impersonated-gsa.email
delegates = []
scopes = ["userinfo-email", "cloud-platform"]
lifetime = "300s"
}

provider "google" {
alias = "impersonated"
access_token = data.google_service_account_access_token.impersonated.access_token
}

data "google_service_account_id_token" "oidc" {
provider = google.impersonated
target_service_account = google_service_account.impersonated-gsa.email
delegates = []
include_email = true
target_audience = regex("[A-Za-z0-9-]*\\.apps\\.googleusercontent\\.com", data.http.client_id.body)
}

provider "airflow" {
base_endpoint = data.http.client_id.url
oauth2_token = data.google_service_account_id_token.oidc.id_token
}

配置大部分是直接从Terraform Airflow provider的文档中复制过来的.

当我尝试在其上运行 Terraform 时,例如 terraform plan,我收到此 403 错误:


│ Error: googleapi: Error 403: The caller does not have permission, forbidden

│ with module.airflow.data.google_service_account_access_token.impersonated,
│ on modules/airflow/providers.tf line 23, in data "google_service_account_access_token" "impersonated":
│ 23: data "google_service_account_access_token" "impersonated" {


我在我的本地终端中运行 Terraform,通过我的 gcloud 用户进行身份验证,如 Terraform docs 中所述.据我所知,我的用户在 GCP 中具有实际的 Owner 角色,不需要更多权限即可完成这项工作。无论如何,我也为自己添加了 roles/iam.serviceAccountTokenCreator 角色,这似乎是执行此操作所必需的,但没有帮助并且错误是相同的。

在这一点上,我不知道我做错了什么,或者即使 Terraform 配置本身是正确的。

有人能给点意见或建议吗?谢谢。

编辑以添加更多详细信息,因为我无法完整回答 John Hanley 的评论:

没错,

  1. 我没有在任何文档中看到 userinfo-email。其实here , herehere总是 userinfo-email。无论如何,我更改为 userinfo.email。这不会影响结果。
  2. 我检查得精疲力竭,事实上,我的用户帐户(我配置为运行 Terraform 的唯一帐户)是所有者。我不可能与任何其他非所有者用户一起运行 Terraform。
  3. 好的,现在为了三重检查,我在 GCP 仪表板中手动创建了一个服务帐户,为其分配了 Owner 角色,还为其分配了 Service Account Token Creator 角色。然后我将本地配置为使用它运行 Terraform,错误完全相同。

所以,一定是TF配置的错误。

最佳答案

  1. userinfo-email 范围无效。它应该是 userinfo.email

  2. 您声明您正在使用具有所有者 角色的帐户。但是,该错误消息表明您没有在 Terraform 中使用该身份。

  3. 使用用户身份可能会导致错误(API 配额)。您应该使用服务帐户。我建议分配一个服务帐户,为其分配所需的角色,并使用该服务帐户初始化 Terraform 提供程序。

关于google-cloud-platform - 尝试在 GCP 中模拟服务帐户时出现错误 403、 "The caller does not have permission",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72291420/

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