Вопрос или проблема
Недавно я заметил, что в моем приложении Django, работающем на AWS, возникает следующая ошибка
Произошла ошибка (AccessDenied) при вызове операции GetSendQuota: Пользователь: arn:aws:iam::123412341234:user/USER-IAM-NAME не имеет права выполнять: ses:GetSendQuota с явным запретом в политике на основе идентификации
У моего пользователя есть полный доступ к SES через прямую политику AmazonSESFullAccess
.
Чтобы убедиться, что GetSendQuota
явно указано, я также добавил эту встроенную политику
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail",
"ses:GetSendQuota"
],
"Resource": "*"
}
]
}
Я не понимаю, как это исправить. Буду очень признателен за помощь.
ИЗМЕНЕНИЕ Эта проблема началась 2 октября. Я вижу электронные письма на эту дату, но после нее — нет. В то время изменения в системе не вносились
Ответ или решение
Ошибка "Access Denied" при отправке электронных писем через AWS SES в приложении Elastic Beanstalk на Django
Ошибка, с которой вы столкнулись, указывает на проблемы с разрешениями IAM в вашей учетной записи AWS. В данном случае сообщение об ошибке:
An error occurred (AccessDenied) when calling the GetSendQuota operation: User: arn:aws:iam::123412341234:user/USER-IAM-NAME is not authorized to perform: ses:GetSendQuota with an explicit deny in an identity-based policy
показывает, что у пользователя, который пытается выполнить действие, есть явный отказ в доступе (explicit deny) в политиках IAM, несмотря на наличие политики AmazonSESFullAccess
.
Причины и возможные решения проблемы
-
Явные и неявные отказа в доступе:
AWS IAM использует модель разрешений, где явный отказ имеет более высокий приоритет, чем явное разрешение. Это значит, что даже если ваша политикаAmazonSESFullAccess
предоставляет доступ ко всем функциям SES, существующая политика, запрещающая доступ, может блокировать запрос.Шаги для решения:
- Проверьте все политики, связанные с вашим IAM пользователем и группами, к которым он принадлежит, на наличие явных отказов для действия
ses:GetSendQuota
. - Убедитесь, что в IAM "Service Control Policies" (SCP), если вы используете AWS Organizations, также нет отказов на уровне учетной записи или организационной единицы (OU).
- Проверьте все политики, связанные с вашим IAM пользователем и группами, к которым он принадлежит, на наличие явных отказов для действия
-
Настройка IAM и политики:
Убедитесь, что настройки IAM выполнены правильно. Попробуйте временно предоставить полную доступность к SES в вашем IAM пользователе для тестирования:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:*", "Resource": "*" } ] }
Если после применения этой политики проблема устраняется, вам стоит подробнее разобрать текущие политики и найти источник отказа.
-
Логи CloudTrail:
Для более детального анализа вы можете воспользоваться AWS CloudTrail для отслеживания, кто и когда пытался получить доступ к действиям SES. CloudTrail позволит вам увидеть, какое событие вызвало отказ и какие политики действовали в момент запроса. -
Изменения в службе SES:
Согласно вашему сообщению, проблема возникла 2 октября, и вы упомянули отсутствие каких-либо изменений с вашей стороны. Проверьте изменения, которые могли быть произведены в ваших IAM политиках и конфигурациях SES, в том числе возможные изменения в настройках безопасности или управление доступом. -
Использование правил IAM:
Убедитесь, что вы используете правильное наименование ресурсов в вашем inline policy. Если ваша политика включает параметры ресурса, хотя бы некоторое предоставление ресурса должно совпадать с тем, что вы пытаетесь сделать.
Заключение
Необходимо внимательно проверить политики пользователя и связанные с ним группы в IAM, а также настройки безопасности AWS. Отключение явных отказов и использование IAM с полными разрешениями на SES могут помочь идентифицировать проблему.
Если после выполнения всех предложенных действий проблема все еще сохраняется, рекомендуется связаться с поддержкой AWS для более глубокого анализа вашей ситуации.