Amazon SES从实例配置文件元数据服务器检索凭据时出错。 (客户端错误:404)

时间:2015-10-31 22:45:36

标签: php amazon-web-services amazon-ec2 amazon-ses

在使用AWS SES时遇到一些问题;我想从我的网站向用户发送电子邮件。看起来没有验证凭据,但是我使用了从IAM生成的正确凭据(我也尝试过服务器根密钥,它给了我同样的错误)。我已经完成了如何进一步解决/调试的想法,所以任何引导都会非常感激。

执行时收到错误:

从实例配置文件元数据服务器检索凭据时出错。 (客户端错误:404)

采取的步骤

  1. 我已设置SES并验证了电子邮件地址等

  2. 我创建了一个IAM配置文件,其中包含对SES的完全访问权限

  3. 我已使用phar文件

  4. 安装了适用于php的AWS开发工具包
  5. 我已经编写了下面的PHP代码,直接提供了SES的正确安全访问代码

  6. require 'aws/aws.phar';
    use Aws\Ses\SesClient;
    
    //More code here
    
    $client = SesClient::factory(array(
        'key' => 'xxxxxxxxxxxxx',
        'secret' => 'xxxxxxxxxxx',
        'region' => 'us-west-2',
        'version' => '2010-12-01'
    ));
    
    //code to build the $msg here as array
    
    try{
         $result = $client->sendEmail($msg);
    
         //save the MessageId which can be used to track the request
         $msg_id = $result->get('MessageId');
         echo("MessageId: $msg_id");
    
         //view sample output
         print_r($result);
    } catch (Exception $e) {
         echo($e->getMessage());
    }
    //view the original message passed to the SDK
    print_r($msg);
    

    提前感谢您的帮助 - 这总是一个很棒的社区!如果我能提供其他任何东西,请告诉我

    约翰

1 个答案:

答案 0 :(得分:1)

您可以使用多种方法为SDK提供凭据。请参阅文档: Providing Credentials to SDK

1)使用您创建的IAM配置文件中的值设置环境变量:AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_DEFAULT_REGION。

2)您也可以创建〜/ .aws / credentials文件而不是1)。您可以在此处添加以下行:
[默认]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
aws_default_region =区域

1)或2)肯定会有效,而且很直接。

3)您还可以创建实例配置文件。您需要创建IAM角色和实例配置文件。您的实例需要在创建实例时分配实例配置文件。请参见第183页(如页面底部所示。主题名称为"使用IAM角色授予应用程序权限 在本指南的Amazon EC2实例和#34;)上运行:AWS IAM User Guide 以了解步骤和过程。在这里,秘密密钥和访问密钥会自动被选中,您不必做任何事情。您只需要使用步骤1)设置默认区域(即导出AWS_DEFAULT_REGION = someregion)。

4)您已经尝试过第4种方法,可能是您的设置中存在一些我不知道的问题。