Запретить доступ к AWS S3 всем IP-адресам, кроме определенных диапазонов - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть S3 Bucket («myBucket»), к которому имеет доступ только пользователь, назовем его «s3user».У меня есть политика IAM, прикрепленная к этому пользователю, следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::myBucket"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion"
            ],
            "Resource": "*"
        }
    ]
}

Я прикрепил эту политику IAM к пользователю "s3User", предоставив доступ только для чтения к "myBucket".Пока все хорошо.

Теперь я добавил вторую политику, но теперь не политику IAM, а политику S3 Bucket, а именно:

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::myBucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/27",
                        "2.3.4.1/28",
                        "5.6.7.8/29"
                    ]
                }
            }
        }
    ]
}

Я ожидал, что это явное отрицание приведет котклонить все запросы, не поступающие из указанных исходных IP-диапазонов.Но он все еще позволяет мне перечислять содержимое корзины с других IP-адресов.Кажется, что политика сегмента не имела никакого эффекта вообще.

Согласно этой статье AWS S3 , когда у вас есть несколько политик, все они применяются, и явные запреты имеют приоритет над явными разрешениями, так что я думаю, что должен работать, но это не так.

Есть идеи, почему я не могу отклонять запросы к корзине на основе адресов sourceIP?

Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2019

Вы должны обновить свою политику Deny, чтобы включить в нее операции, которые выполняются над самим контейнером, а не над его содержимым (/*):

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "DenyOutsideIPfromBucket",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::myBucket/*", "arn:aws:s3:::myBucket"],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/27",
                        "2.3.4.1/28",
                        "5.6.7.8/29"
                    ]
                }
            }
        }
    ]
}

Конечно, если только пользователи имеют доступк корзине относятся политики IAM, вы можете просто добавить условие IpAddress в исходную политику IAM, чтобы они могли использовать корзину только с заданным набором IP-адресов.Это позволит избежать необходимости политики Deny.

...