【问题标题】:S3 bucket policy multiple conditionsS3 存储桶策略多条件
【发布时间】:2021-07-20 23:55:35
【问题描述】:

我希望授予对存储桶的访问权限,该存储桶将允许我的 VPC 中的实例以及通过我们的数据中心的机器对其进行完全访问。如果没有aws:SouceIp 行,我可以限制对VPC 在线机器的访问。

我需要该策略起作用,以便只能从 VPC 内的机器和我的办公室访问存储桶。

{
    "Version": "2012-10-17",
    "Id": "Policy1496253408968",
    "Statement": [
        {
            "Sid": "Stmt1496253402061",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xyz-sam-test/*",
                "arn:aws:s3:::xyz-sam-test"
            ],
            "Condition": {
                "StringLike": {
                    "aws:sourceVpc": "vpc-dcb634bf",
                    "aws:SourceIp": "<MY PUBLIC IP>"                                  
                }
            }
        }
    ]
}

【问题讨论】:

  • 您的问题是什么?您正在尝试什么,遇到了什么困难?
  • 更新了我的问题。
  • 您是否尝试将其创建为两个单独的 ALLOW 策略——一个使用 sourceVPC,另一个使用 SourceIp?这将创建一个 OR,而上述策略可能会创建一个 AND。

标签: amazon-s3


【解决方案1】:

当两个键的StringNotLike 条件与这些特定通配符匹配时,您可以生成一个策略,其EffectDeny 访问存储桶。

{
    "Version": "2012-10-17",
    "Id": "Policy1496253408968",
    "Statement": [
        {
            "Sid": "Stmt1496253402061",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xyz-sam-test/*",
                "arn:aws:s3:::xyz-sam-test"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:sourceVpc": "vpc-dcb634bf",
                    "aws:SourceIp": "<MY PUBLIC IP>"                                  
                }
            }
        }
    ]
}

第二个条件也可以分离成它自己的语句。 AWS 在语句中应用逻辑 OR。 1

{
    "Version": "2012-10-17",
    "Id": "Policy1496253408968",
    "Statement": [
        {
            "Sid": "Stmt1496253402061",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xyz-sam-test/*",
                "arn:aws:s3:::xyz-sam-test"
            ],
            "Condition": {
                "StringLike": {
                    "aws:sourceVpc": "vpc-dcb634bf",                                
                }
            }
        },
        {
            "Sid": "Stmt1496253402062",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xyz-sam-test/*",
                "arn:aws:s3:::xyz-sam-test"
            ],
            "Condition": {
                "StringLike": {
                    "aws:SourceIp": "<MY PUBLIC IP>"                                  
                }
            }
        }
    ]
}

【讨论】:

    【解决方案2】:

    AWS 具有预定义的条件运算符和键(如 aws:CurrentTime)。各个 AWS 服务还定义了特定于服务的键。

    例如,假设您希望用户 John 在以下条件下访问您的 Amazon SQS 队列:

    时间是下午 12:00 之后。 2019 年 7 月 16 日

    时间是下午 3:00 之前。 2019 年 7 月 16 日

    请求来自 192.0.2.0 到 192.0.2.255 或 203.0.113.0 到 203.0.113.255 范围内的 IP 地址。

    您的条件块具有三个独立的条件运算符,并且必须满足所有三个条件,John 才能访问您的队列、主题或资源。

    下面显示了条件块在您的策略中的样子。 aws:SourceIp 的两个值使用 OR 进行评估。三个独立的条件运算符使用 AND 进行评估。

    "Condition" :  {
          "DateGreaterThan" : {
             "aws:CurrentTime" : "2019-07-16T12:00:00Z"
           },
          "DateLessThan": {
             "aws:CurrentTime" : "2019-07-16T15:00:00Z"
           },
           "IpAddress" : {
              "aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]
          }
    }
    

    参考:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 2012-11-23
      • 2021-01-19
      • 2021-03-31
      相关资源
      最近更新 更多