Я новичок в мире 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' => '[email protected]',
// Destination is required
'Destination' => array(
'ToAddresses' => array('[email protected]')
),
// 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( '[email protected]' ),
'ReturnPath' => '[email protected]'
));
?>
Я попытался зайти в консоль 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
Если кто-то столкнется с той же проблемой, чтобы заставить мою работать после нахождения здесь подсказки (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html), Я сделал следующее:
Вставил ключи в скрипт выше в разделах:
'key' => 'SECRET_KEY',
'secret' => 'SECRET_SECRET',
Тем не менее, это не удалось с той же ошибкой, когда я запустил его.
Однако, изменив вышеприведенное на следующее, запустил успешно и отправил письмо …
'credentials' => [
'key' => 'SECRET_KEY',
'secret' => 'SECRET_SECRET'],
Надеюсь, кто-то найдет это полезным.
Ура !!
Существует два способа использования 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