2017-03-07 38 views
5

を経由してポリシーを作成する:ここでMalformedPolicyDocumentエラーテラフォームを実行しているときに、私は次のエラーを取得していますテラフォーム

* aws_iam_role_policy.rds_policy: Error putting IAM role policy my-rds-policy: MalformedPolicyDocument: The policy failed legacy parsing 

は、リソースの私の定義は次のとおりです。

resource "aws_iam_role_policy" "rds_policy" { 
    name = "my-rds-policy" 
    role = "${aws_iam_role.rds_role.id}" 
    policy = <<EOF 
    { 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetBucketLocation" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObjectMetaData", 
       "s3:GetObject", 
       "s3:PutObject", 
       "s3:ListMultipartUploadParts", 
       "s3:AbortMultipartUpload" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket/backups/*" 
      ] 
     } 
    ] 
} 
EOF 
} 

JSONポリシードキュメントはよく形成されており、私は何も明らかに見ることができません。

+2

。あなたがそれを黙らせるとどうなりますか? heredocのものは時にはかなり特殊なものになることがあります。 – ydaetskcoR

+1

@ydaetskcoRうわー、奇妙なことにはうまくいきました。それを答えとして投稿し、正しい解決策としてマークします。 –

答えて

6

EOF heredocの先頭にインデントがないことを確認する必要があります。これは、JSONポリシーがインデントされた中括弧で始まるべきでないためです。

は、だから、この単純な変更で問題ないはず:EOFが、それはすべきではないとき、それはインデントているように見えた後、最初のブレースを残し

resource "aws_iam_role_policy" "rds_policy" { 
    name = "my-rds-policy" 
    role = "${aws_iam_role.rds_role.id}" 
    policy = <<EOF 
{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetBucketLocation" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObjectMetaData", 
       "s3:GetObject", 
       "s3:PutObject", 
       "s3:ListMultipartUploadParts", 
       "s3:AbortMultipartUpload" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket/backups/*" 
      ] 
     } 
    ] 
} 
EOF 
} 
関連する問題