S3 Bucket安全性,开放访问受公共IP和VPC端点限制

时间:2016-04-04 22:07:32

标签: amazon-web-services amazon-s3 amazon-vpc

基于一些主要显示如何通过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"
        }
      }
    }
  ]
}

1 个答案:

答案 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来评估条件可用的密钥。