Как авторизовать роль для выполнения «execute-api: Invoke»? - PullRequest
0 голосов
/ 30 мая 2019

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

StatusCodeError: 403 - "{\"Message\":\"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:eu-west-2:*:*"}" 

Сначала я думал, что ошибка вызвана отсутствием разрешений на роль, которая использовалась для создания всего.Я попытался добавить правильные права доступа к используемой роли IAM, в результате чего они стали более открытыми, чем мне бы хотелось.

"Effect": "Allow",
"Action": [
    "execute-api:Invoke",
    "execute-api:ManageConnections"
],
"Resource": "arn:aws:execute-api:*:*:*"

Очевидно, что ничего не удалось исправить, но я заметил, что советник по доступу показывает, что к определенной политике нет доступа.

Затем я перешел к политике ресурсов в API.Ворота, чтобы видеть, было ли там что-то.Я удалил некоторые условия IP-адреса, которые были установлены для ограничения доступа к IP-адресам офиса.

Я заглянул внутрь WAF и Shield и не вижу ничего, что было бы связано с вызовом API.На данный момент я в растерянности, с которого должно начаться мое следующее расследование.

Редактировать

Вот ответ, который я получаю.

"requestId": "********-82f8-11e9-a732-0b550cf3fcd6",
"ip": "*.*.*.*",
"caller": "-",
"user": "-",
"requestTime": "30/May/2019:16:32:50 +0000",
"httpMethod": "GET",
"resourcePath": "/*/ref-data/{proxy+}", "status": "403", "protocol": "HTTP/1.1", "responseLength": "185"

Ответы [ 3 ]

0 голосов
/ 31 мая 2019

Ниже приведены шаги, которые необходимо выполнить.

  1. Для метода API - Make Auth = IAM
  2. Для политики ресурсов API убедитесь, что вы разрешаете трафик, исходящий из выбранногоРоль IAM для определенных / всех методов

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::###############:role/###########"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:ap-southeast-1:###########:/#########/*/POST/####/####/"
        }
    ]
    

    }

  3. Убедитесь, что та же роль IAM связана с объектами, из которых вызывается этот API, например, EC2 - если вашкод находится в EC2

  4. Убедитесь, что ваши вызовы API не являются обычными вызовами curl, они подписаны в виде aws sigv4

Надеюсь, это работает!

0 голосов
/ 31 мая 2019

В этом случае оказалось, что основным препятствием было ограничение IP-шлюзов API, установленное в политике. Я не осознавал, что сделанные изменения не вступили в силу до (пере) развертывания. Как только я сделал это с обновленными ограничениями IP, можно было вызывать конечную точку API.

0 голосов
/ 30 мая 2019

Политика вашей роли, которая допускает execute-api:Invoke, кажется правильной, но предоставленное вами сообщение об ошибке гласит User: anonymous is not authorized to perform.... Если вы ожидаете, что ваша роль будет пытаться выполнить это действие, значит что-то не так, потому что вы пытаетесь выполнить действие с пользователем по имени anonymous.

Роль, которую вы используете для построения своего стека, не обязательно является ролью, которая используется для выполнения функций в этом стеке. Я рекомендую вам дважды проверить все свои сущности IAM и четко определить и понять, что каждая из них пытается сделать. Убедитесь, что все, что вызывает вашу функцию, на самом деле является той ролью, которую вы хотите, с правильной приложенной политикой.

Надеюсь, это поможет!

...