GCP:使用 Terraform 从服务帐户中删除 IAM 策略

问题描述 投票:0回答:2

我正在使用以下模块创建应用程序引擎:

google_app_engine_flexible_app_version

默认情况下,Google 创建具有

Default App Engine Service Account
权限的
roles/editor

我想减少我的 AppEngine 的权限。 因此,我想删除

roles/editor
权限并将其添加为我的自定义角色。

为了删除它,我知道我可以使用

gcloud projects remove-iam-policy-binding
cli。 但我希望它成为我的地形计划的一部分。

google-app-engine google-cloud-platform terraform terraform-provider-gcp
2个回答
0
投票

这是您可能会考虑使用的一种情况

google_project_iam_policy

这可以用来淘汰编辑角色,但它会淘汰所有您未在政策中明确列出的其他内容!

当心 - 如果您不确定自己在做什么,则存在将自己锁定在项目之外的风险。

另一种选择是使用自定义服务帐户。 使用 terraform 创建帐户并应用所需的角色。 使用

gcloud app deploy --service-account={custom-sa}
将服务部署到使用自定义帐户的应用程序引擎。

但您可能仍希望从默认服务帐户中删除编辑者角色。鉴于您已经有 gcloud 命令来执行此操作,

gcloud projects remove-iam-policy-binding
,您可以使用资源 terraform-google-gcloud 从 terraform 执行命令。

另请参阅此功能请求


0
投票

如果您使用 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

后对其进行修改

注意:设置角色时,请确保拥有有效的权限,以便您的应用引擎正常工作。

我。使用提供的 Terraform 代码作为模板并对其进行修补

我建议你的一个简单技巧是 (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.

二.使用 Terraform 导入

Google Cloud Platform 工具 -

gcloud
terraform
和其他几个开源平台现已推出,可以读取您现有的基础设施并为您编写 Terraform 代码。

所以你可以检查

terraform import
或 Google 的文档 - https://cloud.google.com/docs/terraform/resource-management/import#:~:text=Terraform%20can%20import%20existing%20infrastruct,manage% 20your%20deployment%20in%20Terraform.

但是要使用这种方法,您必须首先设置您的基础设施。您可以从 Google Console UI 完全手动执行此操作,也可以先使用 terraform,然后更新它。

作为 III 选项,您可以联系/雇用 Terraform 专家来为您完成此任务,但 I 和 II 选项最适合许多情况。

© www.soinside.com 2019 - 2024. All rights reserved.