簡體   English   中英

GCP:使用 Terraform 從服務帳戶中刪除 IAM 策略

[英]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后對其進行修改

注意:設置角色時,請確保您的應用引擎具有有效的權限才能正常工作。

I. 使用提供的 Terraform 代碼作為模板並修改它

我建議您的一個簡單技巧是(1)首先使用您擁有的基本 terraform 代碼設置您的基礎設施,然后(2)根據您的期望更新/修補您的基礎設施(3)現在您可以進行terraform refreshterraform 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.

二、 使用 Terraform 導入

Google Cloud Platform 工具 - gcloudterraform和其他幾個開源平台現已上市,可以讀取您現有的基礎設施並為您編寫 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-askhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM