【发布时间】:2019-02-16 13:05:20
【问题描述】:
根据 AWS,我的政策不起作用。 JSONlint 说我有一个有效的 json。有语法问题,但我没有看到。
此政策包含以下错误:政策不符合身份和访问管理 (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"
}
}
}
}
]
}
【问题讨论】:
-
在这里吐槽,但看起来每个语句中第一个
StringEquals之后的大括号可能没有在正确的时间关闭? -
大括号没问题,在哪里。 json 这样不敏感。我认为问题在于我如何编写多个条件和键值。第一次尝试这个。我可以让 1 个条件检查正常工作。 docs.aws.amazon.com/IAM/latest/UserGuide/…docs.aws.amazon.com/IAM/latest/UserGuide/policies-grammar.html
-
@HyperAnthony 证明是绝对正确的。当然,只要你不小心想出了一个也是有效 JSON 的结构,JSON 对此并不“敏感”——这就是这里发生的情况——但是键和值明显不对齐,使序列化陷入混乱.解决该问题会发现第二个问题,其中对象具有重复的键,这可能会导致某些值存储在位桶中,而不是存储在行另一端的反序列化结构中。
标签: amazon-web-services amazon-iam