基于一些主要显示如何通过IP或VPC或VPCE等单独选项进行限制的资源,这是我正在尝试使用的,这会有用吗?
尝试仅从公共IP打开对S3存储桶的访问:“12.34.56.78/32”和VPC端点:“vpce-xxxxxxxx”
{
"Version": "2008-10-17",
"Id": "S3Policy-Restrict-Access",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws-us-gov:s3:::myrestrict-access-test/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"12.34.56.78/32"
]
},
"StringNotEquals": {
"aws:sourceVpce": "vpce-xxxxxxxx"
}
}
}
]
}
答案 0 :(得分:1)
答案是与...IfExists Condition Operators
相关的AWS文档您可以将IfExists添加到任何条件运算符名称的末尾,但 Null条件 - 例如,StringLikeIfExists。你这样说 "如果策略密钥出现在请求的上下文中,则进行处理 策略中指定的密钥。如果钥匙不存在,我不会 关心;因为没有比较而没有通过比较。"其他 语句中的条件元素仍然可能导致不匹配, 选中时使用但不是缺少密钥... IfExists。
使用IfExists的示例
许多条件键描述了某种类型的信息 资源,仅在访问该类型的资源时存在。这些 条件键不存在于其他类型的资源上。这个 当策略声明仅适用于一个时,不会导致问题 资源类型。但是,有一种情况是单一声明 可以应用于多种类型的资源,例如策略时 语句引用来自多个服务或给定的操作 服务中的操作访问几种不同的资源类型 在同一服务内。在这种情况下,包括条件键 仅适用于策略声明中可能导致的其中一个资源 策略语句中的Condition元素失败,使得 陈述"效果"不适用。
{
"Version": "2012-10-17",
"Statement": {
"Sid": "THISPOLICYDOESNOTWORK",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {"StringLike": {"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]}}
}
}
上述策略的目的是使用户能够启动任何 类型为t1,t2或m3的实例。但是,启动一个实例 除了实例之外,实际上还需要访问许多资源 本身;例如,图像,密钥对,安全组等 根据所需的每个资源评估整个语句 启动实例。这些额外的资源没有 ec2:InstanceType条件键,因此StringLike检查失败,并且 用户未被授予启动任何实例类型的能力。至 解决这个问题,请改用StringLikeIfExists条件运算符。 这样,只有条件键存在时才会进行测试。你可以 阅读以下内容:"如果正在检查的资源有 " EC2:InstanceType"条件键,然后只允许该操作 键值以" t1。"," t2。"或" m3。*"开头。如果资源是 已检查没有该条件密钥,请不要担心。"
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {"StringLikeIfExists": {"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]}}
}
}
你的条件应该是:
"Condition": {
"NotIpAddressIfExists": {
"aws:SourceIp": [
"12.34.56.78/32"
]
},
"StringNotEqualsIfExists": {
"aws:sourceVpce": "vpce-xxxxxxxx"
}
}
<强> 解释 强>
定义策略时,如果请求是通过VPC端点发出的,则源IP密钥不可用。同样,如果请求来自VPC端点之外,则VPC相关密钥不可用。需要使用IfExists来评估条件可用的密钥。