【问题标题】:Terraform bad policyTerraform 坏策略
【发布时间】:2018-06-29 20:38:00
【问题描述】:

您好,我的 terraform 中有以下策略定义,但它不断返回格式错误

resource "aws_iam_role_policy" "task-policy" {
  name   = "docker-flowcell-restore-task-policy"
  role   = "${aws_iam_role.task-role.id}"
  policy = "${file("${path.module}/policies/role-docker-flowcell-restore-${var.environment}-ecs-policy.json")}"
}

一段时间以来一直在努力寻找其中的错误。

这是错误

aws_iam_role_policy.task-policy: Error putting IAM role policy docker-flowcell-restore-task-policy: MalformedPolicyDocument: Syntax errors in policy.

这是失败的政策

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid":"AllowWritesS3",
      "Action": [
        "s3:GetObject",
        "s3:RestoreObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "Temp_name_for_post",
        "Temp_name_for_post"
      ]
    },
    {
      "SID": "Allow for user for upload S3 bucket",
      "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload"
      ],
      "Resource":[
        "temp_name_for_post",
        "temp_name_for_post"
      ]
    }
  ]
}

【问题讨论】:

  • 这可能是策略本身的错误,为策略变量解析的内容是有效的 json/有效策略吗?发布错误可能会有所帮助。
  • 我在帖子中添加了错误/该角色可以来自的每个文件都是格式正确的 json 文件。
  • 您的 iam 政策似乎格式不正确。 Here 是有关 iam 语法和语法的文档。查看策略有什么问题的另一个选项是将该文件的内容复制到 aws 控制台中的 iam 策略验证器中。
  • 我明白了,错误出在任务策略正在读取的 JSON 文件之一中?
  • 在我看来就是这样

标签: amazon-web-services terraform


【解决方案1】:

不幸的是,AWS 并没有准确地告诉您语法错误是什么,因此您必须自己找到它们。有时您可以通过肉眼做到这一点;其他时候,您可能只想按照 Jeffrey 的建议使用 AWS 控制台 - 并且可能一个接一个地取出每个语句然后重新验证,以查看错误所在(这比等待 Terraform 完成要快得多)。

在您的情况下,您需要:

  • 在您的第二个语句中将 SID 更改为 Sid
  • 更改第二条语句中的Sid 值,使其中没有空格(例如"AllowForUserForUploadS3Bucket")
  • 使用有效的 S3 ARN 而不是 "temp_name_for_post",例如 "arn:aws:s3:::my-bucket/*" 来引用名为 my-bucket 的存储桶中的所有对象

更改这些项目后,该策略现在通过 AWS 控制台为我验证。

【讨论】:

  • 嗨,蒂姆,您介意指点一下策略验证器的方向吗?
  • 当然,它不是一个独立的验证器,您基本上只需跳转到IAM policy section,创建一个新策略,选择 JSON 选项卡,然后粘贴您的策略文本。单击 Review Policy,然后它会告诉您是否有任何问题。如果它继续到下一个屏幕,你一切都很好(你不必保存它)。
  • 此验证很有帮助,但请注意“策略验证器仅检查 JSON 策略语法和语法。它不会验证您的 ARN、操作名称或条件键是否正确。” docs.aws.amazon.com/IAM/latest/UserGuide/… 验证后可以使用的另一个工具是策略模拟器:policysim.aws.amazon.com/home/index.jsp?#
【解决方案2】:

您的 iam 政策似乎格式不正确。 Here 是有关 iam 语法和语法的文档。查看策略有什么问题的另一个选项是将该文件的内容复制到 aws 控制台中的 iam 策略验证器中。 Sid 字段不是必需的,但如果存在,它在策略中必须是唯一的,并且不能包含空格。

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 2021-09-14
    • 2021-05-28
    • 2020-10-30
    • 1970-01-01
    • 2020-09-17
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多