设置云存储地形后端时出错:"Error impersonate: status code 403: The caller does not have permission"



我正在尝试使用GCP云存储设置一个地形远程后端。我首先从CLI创建了一个服务帐户:

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --display-name $SERVICE_ACCOUNT_NAME

然后添加角色。从我在云存储(GCS)文档中读到的,roles/storage.objectAdmin角色应该赋予GCS对象的全部权限:

gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --role roles/storage.objectAdmin

我有以下main.tf文件:

terraform {
required_version = "1.2.2"
required_providers {
google = {
source  = "hashicorp/google"
version = "4.13.0"
}
}
backend "gcs" {
}
}
provider "google" {
project = "project-sandbox"
region  = "europe-west1"
impersonate_service_account = "my-test-svc@project-sandbox.iam.gserviceaccount.com"
}

下面是我的remote.backend文件:

bucket = "my_example_sandbox_bucket_985gd5d"
prefix = "terraform/state"
impersonate_service_account = "my-test-svc@project-sandbox.iam.gserviceaccount.com"

然而,当我运行terraform init -backend-config=remote.backend时,我得到以下错误:

Initializing the backend...
╷
│ Error: Failed to get existing workspaces: querying Cloud Storage failed: Get "https://storage.googleapis.com/storage/v1/b/my_example_sandbox_bucket_985gd5d/o?alt=json&delimiter=%2F&pageToken=&prefix=terraform%2Fstate%2F&prettyPrint=false&projection=full&versions=false": impersonate: status code 403: {
│   "error": {
│     "code": 403,
│     "message": "The caller does not have permission",
│     "status": "PERMISSION_DENIED"
│   }
│ }

我试图给我的服务帐户更多的角色,如roles/iam.serviceAccountTokenCreator作为使用GCS作为后端状态的Terraform文档,这是必需的。然而,错误仍然存在。我的地形有问题吗?还是我错过了什么角色?我可以试着给它所有者的角色,但这似乎有点极端,因为它应该只需要写文件到桶。

请检查以下内容:

  1. 需要启用组织策略API
  2. 服务帐户需要具有组织级别的Organization Policy Administrator角色。
  3. 服务帐户用户和服务帐户令牌创建者角色应该分配给主体帐户以模拟服务帐户。
  4. 您的ADC(应用程序默认凭证)需要配置为与您的terraform apply用户/组织相同的用户。如果没有,您可以再次运行gcloud auth application-default login并使用正确的用户重新创建ADC。

相关内容

  • 没有找到相关文章

最新更新