您好,我在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"
]
}
]
}
答案 0 :(得分:3)
不幸的是,AWS无法准确告诉您语法错误是什么,因此您必须自己找到它们。有时,您可以通过肉眼观察;其他时候,您可能只是想按照Jeffrey的建议使用AWS控制台-也许逐个取出每个语句,然后重新验证,以查看错误的根源(比等待Terraform完成要快得多)。
在您的情况下,您需要:
SID
更改为Sid
Sid
值,使其没有空格(例如"AllowForUserForUploadS3Bucket"
)"temp_name_for_post"
(例如"arn:aws:s3:::my-bucket/*"
)来引用名为my-bucket
的存储桶中的所有对象更改这些项目后,该策略现在通过AWS控制台为我进行验证。
答案 1 :(得分:1)
您的IAM政策似乎格式错误。 here是有关Iam语法和语法的文档。查看该策略有什么问题的另一种方法是将该文件的内容复制到aws控制台中的iam策略验证器中。 Sid字段不是必需的,但如果存在,则它在策略中必须是唯一的,并且不能包含空格。