[英]My account has certain permissions on GCP console but not in Terraform/command line
在 GCP 控制台上,我可以成功創建 GCE 虛擬機,並為共享 VPC 子網中的虛擬機創建主地址和別名 IP 地址。
但奇怪的是,當我嘗試使用 Terraform 重復該過程時,出現以下錯誤:
Error: Error creating Address: googleapi: Error 403: Required 'compute.addresses.createInternal' permission for 'projects/xxx/regions/us-central1/addresses/yyy', forbidden
我在 'compute.instances.setDeletionProtection' 上也遇到了另一個權限錯誤,嘗試略有不同。
其他要分享的信息:
resource "google_compute_address" "alias-ips" {
name = var.name
address_type = "INTERNAL"
purpose = "GCE_ENDPOINT"
region = var.region
subnetwork = "https://www.googleapis.com/compute/v1/projects/${var.subnet_project}/regions/${var.region}/subnetworks/${var.subnet}"
project = var.project
}
接下來我將嘗試使用gcloud
創建相同的資源。 但我懷疑它也會產生任何有用的錯誤。
更新1:
我嘗試gcloud
創建一個虛擬機。 我能夠創建虛擬機及其主要和別名 IP。 但是當我嘗試設置刪除保護(使用gcloud compute instances update XXX --deletion-protection
或在創建 VM 時使用選項--deletion-protection
時,我再次收到 403 錯誤。但令人困惑的是我可以創建 IP . 這可能意味着我寫的 TF 不是完全正確的方式,或者 TF 處理別名 IP 創建的方式與gcloud
不同。
更新 2:
根據請求,我通過gcloud auth application-default login
為 TF 設置了 GCP authN。 我從未接觸過GOOGLE_APPLICATION_CREDENTIALS
,所以它是空的。 我很確定我使用的是相同的帳戶/身份。 我在運行 Terraform 的環境中運行 Terraform 以在我使用的其他 GCP 項目中執行所有操作都沒有問題,在那里我的權限限制較少。
我們最終發現這是因為我們的管理員為我創建的自定義角色缺少這兩個權限:
在他們為我添加了這兩個權限之后,我就可以完成我的工作了。 對我來說,兩個阻塞問題分別是兩個權限,1)無法在共享 VPC/子網中創建 IP 地址; 2) 無法為虛擬機開啟“刪除保護”。
因此,GCP 或 Terraform 檢查權限的方式沒有問題,我的身份驗證也沒有問題。 我認為這是一個更大的問題,但結果只是兩個權限阻止了我創建 VM。
我可以有計算實例管理員角色和/或計算網絡用戶角色,這樣我就不會遇到這個問題。 我們的管理員決定不直接授予我(開發人員)這兩個角色的原因是它們包含的權限太寬泛。
但我仍然懷疑創建別名 IP 時 GCP Console 與 Terraform/gcloud 中的矛盾行為。 我猜是 GCP Console 使用了一些非標准的 API,這與 Terraform/gcloud 的工作方式不同。 它背后可能存在錯誤或某些未記錄的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.