【问题标题】:How to provide multiple StringNotEquals conditions in AWS policy?如何在 AWS 策略中提供多个 StringNotEquals 条件?
【发布时间】:2018-02-14 04:03:56
【问题描述】:

我正在尝试编写拒绝所有流量的 AWS S3 存储桶策略,除非它来自两个 VPC。我正在尝试编写的策略如下所示,两个StringNotEquals 之间有一个逻辑与(除非它是无效策略):

{
   "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": "*"
     }
   ]
}

如果我使用这个:

"StringNotEquals": {
       "aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
     }

然后至少有一个字符串比较返回 true,并且无法从任何地方访问 S3 存储桶。

【问题讨论】:

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


    【解决方案1】:

    以前从未尝试过。但是以下应该可以。来自:Using IAM Policy Conditions for Fine-Grained Access Control

        "Condition": {
            "ForAllValues:StringNotEquals": {
                "aws:sourceVpc": [
                    "vpc-111bbccc",
                    "vpc-111bbddd"
                ]
            },
    

    【讨论】:

      【解决方案2】:

      原始 JSON 的问题:

      "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": "*"
           }
         ]
      }
      

      使用集合运算符

      IAM 策略允许使用ForAnyValue and ForAllValues,这使您可以测试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": "*"
           }
         ]
      }
      

      使用 StringNotEqualsStringNotEqualsIgnoreCase 的 hack 组合

      我相当肯定这可行,但它只会将您的条件限制为 2 个 VPC。

      {
         "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": "*"
           }
         ]
      }
      

      【讨论】:

        猜你喜欢
        • 2021-07-11
        • 1970-01-01
        • 2020-01-23
        • 2015-01-18
        • 2020-12-05
        • 1970-01-01
        • 2012-11-26
        • 2020-08-03
        • 2021-10-06
        相关资源
        最近更新 更多