2015-12-25 87 views
2

我是AWS的新手,我不是來自安全背景的人,所以圍繞AWS IAM和SMTP設置的概念讓我感到頭暈目眩。使用AWS開發工具包進行SES的憑證PHP(SMTP/IAM)

我已經按照所有步驟安裝了AWS PHP SDK,驗證了域(以及成功從AWS控制檯發送一些測試電子郵件)以及我想發送測試的一些個人電子郵件地址電子郵件,但我沒有得到的部分是SMTP/IAM。

我已經得到了亞馬遜提供的基本腳本,但我並不真正瞭解我在創建SMTP憑據和/或IAM時需要做什麼,並且我已經搜索了所有內容而無法真正找到回答或理解亞馬遜文檔的內容。

我正在使用的代碼如下,但我完全困惑的部分正是我應該如何爲這個特定項目生成我的訪問密鑰(我只需要發送電子郵件,不需要處理跳動等)以及什麼從腳本訪問這些腳本的最好方法是(也就是說,我認爲它們應該存儲在實際腳本的鎖定目錄之外)。

<?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用戶,或者如果我應該生成這些已經提到的動態組合(很樂意就此採取專家建議)投注方法)...在任何向我拋出以下錯誤:

Fatal error: Uncaught exception 'Aws\Exception\CredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. (Client error: GET http://169.254.169.254/latest/meta-data/iam/security-credentials/ resulted in a 404 Not Found response: 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 in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php on line 79

無論如何,希望有人明白我是rambl我很樂意提供任何額外的細節,但是我不認爲我從這裏開始爲這個問題增加很多價值,因爲我肯定從這個問題中得出結論,我並不真正瞭解它的安全性方面。

這將真正成爲一個聖誕奇蹟,如果我能得到這個工作,瞭解基本概念,仍然有一些頭髮的時候留下的最後一個肉餡餅下山我的喉嚨。

在此先感謝!

G-Man

回答

1

有兩種使用AWS SES的方法。一種是使用SMTP接口,另一種是直接使用SES API。

當使用SES SMTP,產生他們的方式,你做的SMTP鍵是適當的方式,以及國際海事組織,最簡單的方法,如果你想要做的就是發送一些電子郵件。如果你曾經使用過任何其他SMTP服務器從您的應用程序發送電子郵件,那麼SES-SMTP接口是一個簡易替換 - 更改代碼將被要求,您剛纔生成的證書並使用它們。

另一方面,如果您直接使用SES API,則可以使用常規IAM憑證。

Using Credentials With Amazon SES

To interact with Amazon Simple Email Service (Amazon SES), you use security credentials to verify who you are and whether you have permission to interact with Amazon SES. There are different types of credentials, and the credentials you use depend on what you want to do. For example, you use AWS access keys when you send an email using the Amazon SES API, and SMTP credentials when you send an email using the Amazon SES SMTP interface.

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

+0

感謝EJB ......我完全與你在兩種不同的方法,但它似乎在AWS代碼中有一個小問題,我將作爲下面的附加答案發布......看起來你的答案已經解決了別人的問題雖然 - 感謝輸入! –

9

如果有人運行到同樣的問題,到這裏尋找線索(http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html),僅次於我的工作,我做了以下內容:

  1. 驗證電子郵件/域
  2. 使用AmazonSESFullAccess創建IAM用戶(必要時進行修改)
  3. 將密鑰插入scr ipt上面的部分:

    'key' => 'SECRET_KEY', 
    'secret' => 'SECRET_SECRET', 
    
  4. 但是,當我運行它時出現同樣的錯誤。

  5. 改變上述以下內容然而,成功運行,並且發送電子郵件...

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

希望有人認爲這是有用的。

乾杯!

+0

不錯的編碼。我正在關注你的腳本。我已經安裝了AWS PHP SDK。我們是否需要將SMTP主機和SMTP端口設置爲啓用SMTP? – hyip

+0

你只需要第5步,第2步就沒有必要了 –

相關問題