веб-сервисы Amazon — учетные данные для SES, использующие AWS SDK PHP (SMTP / IAM)

Я новичок в мире AWS, и я не из тех, кто работает в сфере безопасности, поэтому у меня возникают проблемы с концепциями, связанными с AWS IAM и настройками SMTP.

Я установил AWS PHP SDK, выполнив все шаги, проверил домен (а также успешно отправил несколько тестовых сообщений из консоли AWS), а также несколько отдельных адресов электронной почты, на которые я хочу отправить тестовые сообщения, но часть, которую я не получаю, — это SMTP / IAM.

У меня есть базовый скрипт Amazon, который они предоставляют, но я не совсем понимаю, что мне нужно делать при создании учетных данных SMTP и / или IAM, и я искал все, не имея возможности действительно найти ответ или понять, что Документы Amazon говорят.

Код, который я использую, приведен ниже, но часть, которой я полностью озадачен, заключается в том, как именно мне следует сгенерировать ключи доступа для этого конкретного элемента (мне нужно только отправлять электронные письма, не обрабатывать отказов и т. Д.) И какой лучший способ доступ к ним из сценария есть (т.е. я предполагаю, что они должны храниться вне фактического сценария в заблокированном каталоге?).

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

use Aws\Ses\SesClient;

require 'vendor/autoload.php';

$client = SesClient::factory(array(
'key' => 'SECRET_KEY',
'secret' => 'SECRET_SECRET',
'region' => 'eu-west-1',
'version' => '2010-12-01'
));

$emailSentId = $client->sendEmail(array(
// Source is required
'Source' => 'donotreply@mydomain.com',
// Destination is required
'Destination' => array(
'ToAddresses' => array('sendto@mydomain.com')
),
// Message is required
'Message' => array(
// Subject is required
'Subject' => array(
// Data is required
'Data' => 'SES Testing',
'Charset' => 'UTF-8',
),
// Body is required
'Body' => array(
'Text' => array(
// Data is required
'Data' => 'My plain text email',
'Charset' => 'UTF-8',
),
'Html' => array(
// Data is required
'Data' => '<b>My HTML Email</b>',
'Charset' => 'UTF-8',
),
),
),
'ReplyToAddresses' => array( 'donotreply@mydomain.com' ),
'ReturnPath' => 'donotreply@mydomain.com'
));




?>

Я попытался зайти в консоль SES и сгенерировать там SMTP-ключи и вставить их прямо в скрипт (просто для проверки работоспособности, я удалил их из скрипта и удалил эти ключи в целях безопасности), но не сделал этого. действительно понимаю, должен ли я их использовать или мне нужно создать дополнительного пользователя IAM, или мне нужно генерировать эти динамические комбинации, на которые ссылались (с удовольствием приму совет по этому вопросу для метода ставок) … в Любой, который бросил мне следующую ошибку:

Неустранимая ошибка: необработанное исключение «Aws \ Exception \ CredentialsException» с сообщением «Ошибка получения учетных данных с сервера метаданных профиля экземпляра. (Ошибка клиента: GET http://169.254.169.254/latest/meta-data/iam/security-credentials/ привело к 404 Not Found ответ: Aws \ Credentials {closure} (Array) # 1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(152): GuzzleHttp \ Promise \ Promise :: callHandler (2, Array, Array) # 2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(60): GuzzleHttp \ Promise \ Promise :: GuzzleHttp \ Promise {closure} () # 3 / var / www / html / vendor / guzzlehttp / guzzle / src / Handler / CurlMultiHandler.php (96): GuzzleHttp \ Promise \ TaskQueue-> run () # 4 / var / www в / var / www / html / vendor / aws / aws-sdk-php / src /Credentials/InstanceProfileProvider.php в строке 79

В любом случае, надеюсь, кто-то понимает, о чем я спекулятив — с удовольствием предоставлю любую дополнительную информацию, но я не думаю, что я добавляю много значения к проблеме с этого момента, поскольку я уверен, что вытекает из этого вопроса, я не Я действительно не понимаю, с какой стороны это связано с безопасностью.

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

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

G-Man

2

Решение

Если кто-то столкнется с той же проблемой, чтобы заставить мою работать после нахождения здесь подсказки (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html), Я сделал следующее:

  1. Проверить электронную почту / домены
  2. Создан пользователь IAM с AmazonSESFullAccess (при необходимости измените)
  3. Вставил ключи в скрипт выше в разделах:

    'key' => 'SECRET_KEY',
    'secret' => 'SECRET_SECRET',
    
  4. Тем не менее, это не удалось с той же ошибкой, когда я запустил его.

  5. Однако, изменив вышеприведенное на следующее, запустил успешно и отправил письмо …

    'credentials' => [
    'key'    => 'SECRET_KEY',
    'secret' => 'SECRET_SECRET'],
    

Надеюсь, кто-то найдет это полезным.

Ура !!

11

Другие решения

Существует два способа использования AWS SES. Одним из них является использование SMTP-интерфейса, а другим — использование SES API напрямую.

При использовании SES SMTP генерация ключей SMTP, как вы это делали, является правильным способом, и imo, самый простой способ, если все, что вы хотите сделать, — это отправить несколько электронных писем. Если вы когда-либо использовали какой-либо другой SMTP-сервер для отправки электронных писем из вашего приложения, то интерфейс SES-SMTP является заменой для замены — никаких изменений кода не потребуется, вы просто сгенерировали учетные данные и используете их.

С другой стороны, если вы используете API-интерфейс SES напрямую, вместо этого вы будете использовать обычные учетные данные IAM.

Использование учетных данных с Amazon SES

Для взаимодействия с Amazon Simple Email Service (Amazon SES) вы используете учетные данные безопасности, чтобы проверить, кто
Вы и есть ли у вас разрешение на взаимодействие с Amazon SES.
Существуют различные типы учетных данных и учетные данные, которые вы используете
зависит от того, что вы хотите сделать. Например, вы используете ключи доступа AWS
при отправке электронного письма с помощью API Amazon SES и учетных данных SMTP
когда вы отправляете электронное письмо, используя SMTP-интерфейс Amazon SES.

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-credentials.html

1