[英]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.