糟糕的地形政策

时间:2018-06-28 23:19:49

标签: amazon-web-services terraform

您好,我在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"
      ]
    }
  ]
}

2 个答案:

答案 0 :(得分:3)

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

在您的情况下,您需要:

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

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

答案 1 :(得分:1)

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