Google cloud platform Terraform为服务帐户设置IAM策略时出错。。。需要iam.serviceAccounts.setIamPolicy权限
我试图使用Terraform在GCP上创建一个非常简单的结构:一个计算实例+存储桶。我在GCP文档和Terraform文档中做了一些研究,所以也提出了一些问题,但仍然无法理解这里的诀窍是什么。有一种方法可以使用Google cloud platform Terraform为服务帐户设置IAM策略时出错。。。需要iam.serviceAccounts.setIamPolicy权限,google-cloud-platform,terraform,Google Cloud Platform,Terraform,我试图使用Terraform在GCP上创建一个非常简单的结构:一个计算实例+存储桶。我在GCP文档和Terraform文档中做了一些研究,所以也提出了一些问题,但仍然无法理解这里的诀窍是什么。有一种方法可以使用google\u project\u iam\u binding,但通过一些文章阅读似乎是危险的(阅读:不安全的解决方案)。还有一个只有GCP描述的一般答案,nit使用tf术语,这仍然有点混乱。在结束类似的问题时,我确认域名所有权是通过谷歌控制台验证的 因此,我得出以下结论: data“g
google\u project\u iam\u binding
,但通过一些文章阅读似乎是危险的(阅读:不安全的解决方案)。还有一个只有GCP描述的一般答案,nit使用tf术语,这仍然有点混乱。在结束类似的问题时,我确认域名所有权是通过谷歌控制台验证的
因此,我得出以下结论:
data“google\u iam\u策略”“管理”{
装订{
role=“roles/iam.serviceAccountUser”
成员=[
“用户:myemail@domain.name",
“serviceAccount:${google_service_account.serviceAccount.email}”,
]
}
}
资源“谷歌服务”帐户“服务帐户”{
帐户\u id=“sa-1”
}
资源“谷歌服务账户iam策略”“管理账户iam”{
service\u account\u id=google\u service\u account.servicecomport.name
policy\u data=data.google\u iam\u policy.admin.policy\u data
}
资源“谷歌存储桶iam策略”策略{
bucket=google\u storage\u bucket.storage\u bucket.name
policy\u data=data.google\u iam\u policy.admin.policy\u data
}
资源“谷歌计算网络”“专有网络”{
name=“专有网络”
自动创建子网络=“真”
}
资源“谷歌计算实例”“实例1”{
name=“实例-1”
机器类型=“f1微型”
启动盘{
初始化参数{
image=“cos云/cos稳定”
}
}
网络接口{
network=google\u compute\u network.vpc\u network.self\u link
访问配置{
}
}
}
资源“谷歌存储桶”“存储桶”{
name=“bucket-1”
地点=“美国”
强制销毁=真
网站{
主页面后缀=“index.html”
未找到\u page=“404.html”
}
科尔斯{
原点=[”http://the.domain.name"]
方法=[“获取”、“头部”、“放置”、“发布”、“删除”]
响应头=[“*”]
最大使用时间=3600秒
}
}
但是如果我应用terraform,日志会显示这样的错误
错误:为服务帐户“trololo”设置IAM策略时出错:googleapi:错误403:对服务帐户trololo执行此操作需要权限IAM.serviceAccounts.setIamPolicy.,禁止
2020/09/28 19:19:34[跟踪]状态管理器.文件系统:删除锁元数据文件.terraform.tfstate.lock.info
在main.tf第35行的资源“谷歌服务账户iam策略”“管理账户iam”中:
35:资源“谷歌服务账户iam策略”“管理账户iam”{
2020/09/28 19:19:34[跟踪]状态管理器文件系统:使用fcntl flock解锁terraform.tfstate
错误:googleapi:错误403:您试图创建的bucket是另一个用户拥有的域名,已被禁止
在main.tf第82行的资源“google_storage_bucket”“storage_bucket”中:
还有一些无用的调试信息。怎么了?哪个帐户缺少什么权限以及如何安全地分配这些权限?我发现了问题。与往常一样,在90%的情况下,问题都出现在计算机前面 以下是帮助我理解和解决问题的步骤:
terraform destroy
也是非常重要的,因为不会回滚新基础架构更改的不成功部署(例如DB迁移),因此您必须使用destroy或手动清理“user:${var.admin_email}”
用户帐户IAM策略,因为它没有用;所有内容都必须由新创建的服务帐户管理角色/IAM.serviceAccountAdmin
,而不是用户
-感谢@Wojtek_B的提示之后一切都会顺利进行!检查Terraform使用的服务帐户是否具有所需的权限(您的帐户必须有一个。这不是
“google\u iam\u策略”中定义的吗?
?上面写着role=“roles/iam.serviceAccountUser”
,您需要管理员-而不是用户。