Политика корзины S3: соответствие не менее 1 (ИЛИ)

#amazon-web-services #amazon-s3

#amazon-web-services #amazon-s3

Вопрос:

В настоящее время у меня есть политика корзины S3, которая разрешает ПОЛУЧИТЬ доступ ТОЛЬКО в том случае, если пользовательский агент соответствует «ALLOW_USER_AGENT»

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-username-and-password-access",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "aws:UserAgent": [
                        "ALLOW_USER_AGENT"
                    ]
                }
            }
        }
}
 

Я хочу изменить эту политику, чтобы она позволяла ПОЛУЧАТЬ доступ, если пользовательский агент соответствует «ALLOW_USER_AGENT» ИЛИ если исходный IP-адрес равен 11.11.11.11

Вот мой первый взгляд на эту политику. Правильная ли это политика? Я хочу разрешить ПОЛУЧИТЬ доступ, если 1 из этих 2 утверждений верны (не оба)

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-username-and-password-access",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "aws:UserAgent": [
                        "ALLOW_USER_AGENT"
                    ]
                }
            }
        },
        {
          "Sid": "SourceIP",
          "Action": "s3:GetObject",
          "Effect": "Deny",
          "Resource": "arn:aws:s3:::MY_BUCKET/*",

          "Condition": {
            "NotIpAddress": {
              "aws:SourceIp": [
                "11.11.11.11/32",
              ]
            },    
            "Principal": {
                "AWS": "*"
            }
        }
    ]
}
 

Комментарии:

1. Deny политик лучше избегать, поскольку они всегда переопределяют an Allow . Наличие двух политик запрета, которые проверяют отдельные вещи, означает, что доступ будет разрешен только в том случае, если обе политики не применяются. Вместо того, чтобы использовать Deny политики, можете ли вы придумать способ предоставления доступа с помощью Allow политик?

Ответ №1:

В соответствии с вашими запросами правила разрешения / запрета должны быть:

  • C1 (условие 1): aws:UserAgent = ALLOW_USER_AGENT
  • C2 (условие 2): aws:sourceIP = 11.11.11.11 /32

введите описание изображения здесь

Соответствующая политика корзины будет:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "deny-if-both-conditions-are-true",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:UserAgent": "ALLOW_USER_AGENT"
                },
                "IpAddress": {
                    "aws:SourceIp": "11.11.11.11/32"
                }
            }
        },
        {
            "Sid": "deny-if-neither-conditions-are-met",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "11.11.11.11/32"
                },
                "ForAnyValue:StringNotEquals": {
                    "aws:UserAgent": "ALLOW_USER_AGENT"
                }
            }
        }
    ]
}
 

Я протестировал эту политику и работает, как ожидалось. Кроме того, я обновил оператор «ForAllValues» на «ForAnyValue».
Используйте команду curl с параметром «-A», чтобы установить любой пользовательский агент.


Ссылка:

Создание условия с несколькими ключами или значениями