Не могу отправить электронную почту с помощью AWS SES: я не настроил ее должным образом? - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь отправить электронную почту из приложения NodeJS, работающего на компьютере EC2, но я получаю ошибку об отказе в доступе , которую я не ожидал.Я следовал этой документации и теперь мой сценарий (реальные домены, адреса и идентификаторы были изменены):

  • Домен example.com проверен и настроен в регионе us-east-1отправить по электронной почте в AWS SES.Все еще в режиме песочницы, на случай, если это имеет значение
  • Адрес my@email.com проверен, поэтому я могу отправлять на него электронные письма.Я могу отправить электронное сообщение с noreply@example.com на my@email.com с помощью консоли AWS.
  • К MyEC2MachineRole прикреплена следующая политика, так что он может отправлять только электронные письмаиспользуя домен example.com.Эта политика похожа на пример в документах (за исключением отсутствующих Principal):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "ses:SendEmail",
            "ses:SendRawEmail"
          ],
          "Resource": "arn:aws:ses:us-east-1:111111111111:identity/example.com"
        }
      ]
    }
    

Когда я пытаюсь запустить следующий код,на основе документации SDK :

const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });

async function main() {
  try {
    const client = new AWS.SES({ apiVersion: '2010-12-01' });
    const result = await client.sendEmail({
      Destination: {
        ToAddresses: ['my@email.com']
      },
      Message: {
        Body: {
          Text: {
            Charset: 'UTF-8',
            Data: 'Test',
          },
        },
        Subject: {
          Charset: 'UTF-8',
          Data: 'Test e-mail',
        },
      },
      Source: 'noreply@example.com'
    }).promise();
    console.log('Sent', result);
  } catch (err) {
    console.error('Error', err);
  }
}
main();

появляется следующая ошибка:

Пользователь arn:aws:sts::111111111111:assumed-role/MyEC2MachineRole/i-0123456789abcdefg не авторизован для выполнения ses:SendEmail на ресурсеarn:aws:ses:us-east-1:111111111111:identity/my@email.com

Если я изменю адрес назначения на любой другой адрес электронной почты в домене example.com, он будет работать.Также это работает, если я изменил Resource в политике на *.

Разве Resource не является адресом / доменом, который отправляет электронную почту?Почему он пытается работать с ресурсом, связанным с адресом назначения?Связано ли это с тем, что конфигурация AWS SES все еще находится в режиме песочницы?

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

Используете ли вы учетные данные, связанные с пользователем IAM?В этом случае пользователю IAM необходимо назначить политику (AmazonSESFullAccess), которая разрешит эти конкретные действия в SES.

0 голосов
/ 21 марта 2019

Теперь, когда учетной записи нет в песочнице, ошибка перестала возникать.Находясь в изолированной программной среде, могут потребоваться дополнительные разрешения для отправки электронной почты, например разрешения для работы с целевым ресурсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...