{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Allow-access-only-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbccc"
},
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbddd"
}
},
"Principal": "*"
}
]
}
至少一个字符串比较返回true,并且无法从任何地方访问S3存储桶。 以前从未尝试过。但是以下内容应起作用。来自:
使用IAM策略条件以进行细粒度访问控制
"StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbccc"
},
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbddd"
}
}
。
StringNotEquals
Allow
权限
自言自语:使用
Deny
权限而不是Allow
Deny
,然后与数组一起使用
StringEquals
。所有值都将作为
OR
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Allow-access-only-from-two-VPCs",
"Action": "s3:*",
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
},
"Principal": "*"
}
]
}
ForAnyValue
和
ForAllValues
,它使您可以测试A内部的多个值。
Condition
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Deny-access-except-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"ForAllValues:StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
},
"Principal": "*"
}
]
}
和
StringNotEquals
我可以肯定的是,这只会将您限制为有条件的2个VPC。
StringNotEqualsIgnoreCase
我不知道问问题时是否有所不同,但是结论是{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Deny-access-except-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc"]
},
"StringNotEqualsIgnoreCase": {
"aws:sourceVpc": ["vpc-111ddeee"]
}
},
"Principal": "*"
}
]
}
的,好像是在做:StringNotEqual
Iscrect.
在正常比较被否定的情况下发生否定。因此,这是有效的:
incoming-value != value0 OR incoming-value != value1 OR ...
!(incoming-value == value0 OR incoming-value == value1 OR ...)
incoming-value != value0 AND incoming-value != value1 AND ...
,输入值必须不匹配给定多个值的。 with键在键上,带有值
StringNotEqual
将正如您期望的那样起作用(您实际上是否尝试过?)。条件只会返回true
DENY
StringNotEqual
评估),aws:sourceVpc
["vpc-111bbccc", "vpc-111bbddd"]
有不同的目的,而不是这个目的。 true
更像是:如果输入密钥具有多个值本身,请确保该集合是您在条件下放置的密钥的值的子集。对于一个有价值的传入键,可能没有理由使用
true
。当背景时,我在API网关策略中使用了这种行为,否认除了匹配VPCE的所有人,所有人都会呼叫 - 与您非常相似。一切都很好。 您正确!
DENY
确实确实按预期的是您的场景工作,并且如您提到的那样有不同的目的。
如果源为“ VPC-111BBCCC”,则带有提供的数组的条件将返回false。
StringNoteQuals:此条件检查值的值是否不等于指定数组中的任何值。阵列值:该数组包含“ VPC-111BBCCC”和“ VPC-111BBDDD”。
SourceVPC值:在这种情况下,SourceVPC明确是“ VPC-111BBCCC”。 由于
ForAllValues
的值与数组中的第一个值匹配,因此
ForAllValues
条件评估为false。我建议考虑更新“验证的答案”,以反映此准确的解释,以避免对其他用户的任何潜在混淆。