我的策略不适用于AWS。 JSONlint说我有一个有效的json。有一个语法问题,但我没有看到它。带有多个条件的AWS IAM策略语法错误
此策略包含以下错误:策略不符合身份和访问管理(IAM)策略语法。有关IAM策略语法的更多信息,请参阅AWS IAM策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {"ec2:ResourceTag/sf_env": "dev",
"StringEquals": {"ec2:Region": "us-west-2"
}
}
}
},
{
"Effect": "Allow",
"Action": "rds:*",
"Resource": "*",
"Condition": {
"StringEquals": { "ec2:ResourceTag/sf_env": "dev",
"StringEquals": { "ec2:Region": "us-west-2"
}
}
}
},
{
"Sid": "AllowHealthCheckOnly",
"Effect": "Allow",
"Action": "elasticloadbalancing:Describe*",
"Resource": "*",
"Condition": {
"StringEquals":{ "ec2:ResourceTag/sf_env": "dev",
"StringEquals":{ "ec2:Region": "us-west-2"
}
}
}
},
{
"Sid": "ConfigureHealthCheckOnly",
"Effect": "Allow",
"Action": "elasticloadbalancing:ConfigureHealthCheck",
"Resource": "arn:aws:elasticloadbalancing:us-west-2:xxxxxxxxxxxx:loadbalancer/instance1",
"Condition": {
"StringEquals": { "ec2:ResourceTag/sf_env": "dev",
"StringEquals": { "ec2:Region": "us-west-2"
}
}
}
},
{
"Sid": "FullElasticCacheManagedPolicyPermissions",
"Effect": "Allow",
"Action": [
"elasticache:*",
"ec2:DescribeAvailibilityZones",
"ec2:DescribeVpcs",
"ec2:DescribeAccountAttributes",
"ec2:DescribeSeucrityGroups",
"cloudwatch:GetMetricStatistics",
"cloudwatch:DescribeAlarms",
"sns:ListTopics",
"sns:ListSubscriptions"
],
"Resource": "*",
"Condition": {
"StringEquals": { "ec2:ResourceTag/sf_env": "dev",
"StringEquals": { "ec2:Region": "us-west-2"
}
}
}
}
]
}
Spitballing在这里,但它看起来像在每个语句中的第一个'StringEquals'可能没有在正确的时间关闭后的大括号? –
大括号可以,它们在哪里。 json对此并不敏感。我认为问题在于我如何写出多重条件和关键值。第一次尝试这个。我可以得到1个条件检查工作就好了。 http://docs.aws.amazon.com/IAM/latest/UserGuide/conditions-setoperators.html http://docs.aws.amazon.com/IAM/latest/UserGuide/policies-grammar.html – ficestat
@HyperAnthony转身绝对正确。当然,只要你不小心想出了一个同样有效的JSON结构 - 这就是发生在这里的事情 - 但是JSON对这个并不“敏感”,但是关键和值明显不符合要求,会导致序列化陷入混乱。解决这个问题揭示了第二个问题,即对象具有重复键,可能会导致某些值存储在位桶中,而不是存储在行另一端的反序列化结构中。 –