Google-Cloud-Platform

GCP 服務帳號角色無法正常工作

  • October 1, 2021

在向我的服務帳戶授予角色時,這些角色不會授予我他們所說的權限。

我正在使用 Terraform。我創建了一個新的服務帳戶,如下所示:

gcloud iam service-accounts create terraform \ --display-name "Terraform admin account"

我為此帳戶創建了一個新的 JSON 憑據:

gcloud iam service-accounts keys create service account.json \ --iam-account terraform@PROJECT_ID.iam.gserviceaccount.com

我已將Compute Instance Admin角色授予此服務帳戶,如下所述:https ://cloud.google.com/iam/docs/understanding-roles#role_types

gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:terraform@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.instanceAdmin

我可以看到服務帳戶具有正確的權限:

gcloud projects get-iam-policy PROJECT_ID  \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:terraform"
ROLE
roles/compute.instanceAdmin

而且我仍然一遍又一遍地收到以下錯誤,即使我授予ownereditor角色。

Error: Error reading ComputeNetwork "network-2pal-network": googleapi: Error 403: Required 'compute.networks.get' permission for 'projects/PROJECT_ID/global/networks/mars-production-network-2pal-network', forbidden
Error: Error reading ComputeGlobalAddress "mars-production-lb-ip": googleapi: Error 403: Required 'compute.globalAddresses.get' permission for 'projects/PROJECT_ID/global/addresses/production-lb-ip', forbidden

我完全被困住了。有誰知道如何克服這個問題。它就像 GCP 甚至沒有檢查憑據。這是瘋狂。

謝謝

您是否曾經刪除過 terraform 服務帳戶,只是為了稍後重新創建它?重新創建的同名服務帳戶會出現意外行為。這是 GCP IAM 中的一個已知問題-deleting_and_recreating_service_accounts

根據上面連結的文件 -

為避免混淆,我們建議使用唯一的服務帳戶名稱。
如果這不可能,您可以通過以下方式向新服務帳戶授予角色:

1. 顯式刪除將角色授予舊服務帳戶的所有綁定。
2. 將這些角色重新授予新服務帳戶。

引用自:https://serverfault.com/questions/989027