我正在使用以下模块创建应用程序引擎:
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_project_iam_policy
这可以用来淘汰编辑角色,但它会淘汰所有您未在政策中明确列出的其他内容!
当心 - 如果您不确定自己在做什么,则存在将自己锁定在项目之外的风险。
另一种选择是使用自定义服务帐户。 使用 terraform 创建帐户并应用所需的角色。 使用
gcloud app deploy --service-account={custom-sa}
将服务部署到使用自定义帐户的应用程序引擎。
但您可能仍希望从默认服务帐户中删除编辑者角色。鉴于您已经有 gcloud 命令来执行此操作,
gcloud projects remove-iam-policy-binding
,您可以使用资源 terraform-google-gcloud 从 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
或 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 选项最适合许多情况。