![](/img/trans.png)
[英]Assigning IAM Policy to an existing Cloud Build Service Account in Google cloud using terraform fails
[英]GCP: Remove IAM policy from Service Account using Terraform
我使用以下模塊創建應用引擎: google_app_engine_flexible_app_version
。
默認情況下,Google 會創建一個具有roles/editor
權限的Default App Engine Service Account
。
我想減少我的 AppEngine 的權限。 因此,我想刪除roles/editor
權限並將其添加到我的自定義角色中。
為了刪除它,我知道我可以使用gcloud projects remove-iam-policy-binding
cli。 但我希望它成為我的 terraform 計划的一部分。
如果您使用https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/app_engine_flexible_app_version來創建您的基礎架構,那么您一定已經在其中看到了以下行。
role = "roles/compute.networkUser"
此角色在設置您的基礎設施時使用,您可以在參考https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/iam_deny_policy后對其進行修改
注意:設置角色時,請確保您的應用引擎具有有效的權限才能正常工作。
我建議您的一個簡單技巧是(1)首先使用您擁有的基本 terraform 代碼設置您的基礎設施,然后(2)根據您的期望更新/修補您的基礎設施(3)現在您可以進行terraform refresh
和terraform plan
找到更新代碼所需的差異。
以下不相關,僅作為示例。
resource "google_dns_record_set" "default" {
name = google_dns_managed_zone.default.dns_name
managed_zone = google_dns_managed_zone.default.name
type = "A"
ttl = 300
rrdatas = [
google_compute_instance.default.network_interface.0.access_config.0.nat_ip
]
}
以上是使用 Terraform 創建 DNS 記錄的代碼。 在上述步驟 1、2 和 3 之后,我得到以下差異來更新我的代碼
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# google_dns_record_set.default will be updated in-place
~ resource "google_dns_record_set" "default" {
id = "projects/mmterraform03/managedZones/example-zone-googlecloudexample/rrsets/googlecloudexample.com./A"
name = "googlecloudexample.com."
~ ttl = 360 -> 300
# (4 unchanged attributes hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
Google Cloud Platform 工具 - gcloud
、 terraform
和其他幾個開源平台現已上市,可以讀取您現有的基礎設施並為您編寫 Terraform 代碼。
所以你可以檢查terraform import
或谷歌的文檔 - https://cloud.google.com/docs/terraform/resource-management/import#:~:text=Terraform%20can%20import%20existingyour%20deployment,manage%2 %20in%20Terraform 。
但是要使用這種方法,您必須首先設置您的基礎設施。 您要么從 Google 控制台 UI 完全手動完成,要么先使用 terraform 然后更新它。
作為 III 選項,您可以聯系/聘請 Terraform 專家為您完成此任務,但 I 和 II 選項最適合許多情況。
另請注意,請https://stackoverflow.com/help/how-to-ask , https://stackoverflow.com/help/minimal-reproducible-example 。 StackOverflow 通常不鼓勵基於意見的問題和如何/做什么問題。
這是您可能考慮使用google_project_iam_policy
的一種情況
這可以用來取消編輯角色,但它會取消您未在策略中明確列出的所有其他內容!
當心- 如果您不確定自己在做什么,就有將自己鎖定在項目之外的風險。
另一種選擇是使用自定義服務帳戶。 使用 terraform 創建帳戶並應用所需角色。 使用gcloud app deploy --service-account={custom-sa}
將服務部署到使用自定義帳戶的應用引擎。
但您可能仍希望從默認服務帳戶中刪除 Editor 角色。 鑒於您已經擁有 gcloud 命令來執行此操作, gcloud projects remove-iam-policy-binding
您可以使用資源terraform-google-gcloud從 terraform 執行命令。
另請參閱此功能請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.