【发布时间】:2021-09-28 20:35:47
【问题描述】:
我想使用 Terraform 在 AWS 中预置一个 IAM 角色。我已经将策略声明为 JSON 文件。
从文档中我了解到模块 aws_iam_role 是提供 IAM 角色的,但正如我从注释中看到的那样:
assume_role_policy 与标准 IAM 策略非常相似但略有不同,并且不能使用 aws_iam_policy 资源。但是,它可以使用 aws_iam_policy_document 数据源。请参阅上面的示例,了解其工作原理。
这意味着我根据 aws_iam_policy_document 语法严格遵守 IAM 策略声明(这本身需要我手动转换为另一种格式),但我不知道如何从 JSON 文件导入策略创建我需要的 IAM 角色 - 背后的原因是该策略非常广泛,我希望它位于单独的 JSON 文件中。
谁能建议如何使用 JSON 文件中声明的策略声明 IAM 角色?
【问题讨论】:
-
IAM 角色有两部分:代入角色或信任策略(这允许事物代入角色,无论是用户还是 AWS 服务)和权限策略(角色能够做什么)。您现在将其中哪些作为单独的文件保存?
-
又是你,谢谢你的帮助! :D 所以我努力提供的字段是
assume_role_policy,从文档页面registry.terraform.io/providers/hashicorp/aws/latest/docs/… 看来我只与aws_iam_policy_document数据兼容。但是我可能已经找到了解决方案,并且我可能会以这种方式声明该字段assume_role_policy = jsonencode(file("${path.module}/my/path/my_json.json"))- 它对我来说失败了,因为我没有使用 jsonencode 但现在看起来还不错。你也可以确认一下吗? -
如果该文件是有效的 JSON,那么您不需要
jsonencode。请参阅 terraform.io/docs/language/functions/jsonencode.html 了解该函数的作用(通常将 HCL 映射转换为 JSON)。如果您编辑您的问题以包含有此错误的 minimal reproducible example,那么可能会更容易,然后有人能够准确地告诉您哪里出错了。 -
hmmm 可能我在上一条评论中混淆了,正如您所说,不需要
jsonencode(最近开始接近 Terraform)。我会尝试根据您所说的发布答案,如果有错误请纠正我,代码肯定比 cmets 更具可读性 -
这是我为创建策略而写的一个模块,希望对您有所帮助:github.com/tomarv2/terraform-aws-iam-policies,您可以查看如何传递 json 的示例。
标签: amazon-web-services terraform amazon-iam terraform-provider-aws