【问题标题】:How to declare an AWS IAM Role in Terraform from a JSON file?如何从 JSON 文件在 Terraform 中声明 AWS IAM 角色?
【发布时间】: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


【解决方案1】:

aws_iam_role 文档页面中,没有显示如何从 JSON 文件加载策略的示例,但这对我有用:

resource "aws_iam_role" "my_role" {
  name               = "my_role"
  assume_role_policy = file("${path.module}/my/path/my_policy.json")
}

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2021-02-03
    • 2020-10-31
    • 1970-01-01
    • 2021-05-17
    • 2020-04-25
    • 1970-01-01
    • 2020-01-06
    • 2019-12-08
    相关资源
    最近更新 更多