Почему элемент условия в политике ресурсов шлюза API AWS не срабатывает? - PullRequest
2 голосов
/ 21 сентября 2019

Я пытаюсь понять, как запускается элемент условия в политиках ресурсов для AWS API-Gateway.

Я пытался использовать SourceIP для блокировки всего трафика, разрешив только 128.0.0.0/1 и 0.0.0.0 / 1, но мне удавалось использовать мой API с одного и того же IP-адреса оба раза.Я также пытался заблокировать мой API с помощью CurrentTime.Но ничто из того, что я добавляю к своему состоянию, похоже, не мешает мне вызывать мой API.Что я неправильно понимаю?

Моя текущая попытка заблокировать мой API от всех вызовов такова:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountID>:root"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:<AccountID>:<API>/*/*",
            "Condition": {
                "DateGreaterThan": {
                    "aws:CurrentTime": "2019-12-15T12:00:00Z"
                }
            }
        }
    ]
}

Насколько я понимаю, с указанием «DateGreaterThan» «CurrentTime» до декабря 2019 года, когда онв настоящее время сентябрь 2019 года, этот API не должен вызываться в течение следующих трех месяцев.

Может кто-нибудь показать мне, куда я иду с трека?

Заранее спасибо!

PS: у меня правильная авторизация в теле с использованием AWS PublicKey / SecretKey.Я просто хочу заблокировать мой вызов с условием.

PPS: я забыл упомянуть, что я подтвердил, что мое развертывание API использует эту политику ресурсов, поскольку мой API отклонял вызовы до того, как я добавил свой AWSPublicKey / SecreyKey.(Я включил авторизацию AWS_IAM)

По просьбе Джои Килпатрика, вот моя обновленная (все еще неэффективная) политика ресурсов.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountID>:user/Service_Account"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:<AccountID>:<API>/*/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "0.0.0.0/1"
                }
            }
        }
    ]
}

В этом случае я использую API с 147.xxx IP, поэтому я ожидаю, что этот API возвратит 403. Я также проверил с ранее заявленным условием «CurrentTime».

1 Ответ

1 голос
/ 21 сентября 2019

Сначала я хочу отметить, что ограничение SourceIP до 128.0.0.0/1 и 0.0.0.0/1 не запрещает использование IP-адреса, поскольку каждый IP-адрес находится в одном из этих двух блоков CIDR.

Но это не вашеСамая большая проблема: вы не можете ограничивать какие-либо разрешения от вашего root пользователя.Это по замыслу.Посмотрите, почему это плохая идея использовать root user здесь .

...