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

Posted

技术标签:

【中文标题】Amazon SES 从实例配置文件元数据服务器检索凭证时出错。 (客户端错误:404)【英文标题】:Amazon SES Error retrieving credentials from the instance profile metadata server. (Client error: 404) 【发布时间】:2016-02-01 03:27:40 【问题描述】:

在让 AWS SES 按以下方式工作时遇到一些问题;我想从我的网站向用户发送电子邮件。看起来凭证没有得到验证,但是我使用了从 IAM 生成的正确凭证(我也尝试了服务器根密钥,它给了我同样的错误)。我已经没有关于如何进一步解决/调试的想法,所以任何指导都将不胜感激。

执行时收到错误:

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

采取的步骤

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

    我创建了一个具有“对 SES 的完全访问权限”的 IAM 配置文件

    我已经使用 phar 文件安装了适用于 php 的 AWS 开发工具包

    我已经编写了下面的 php 代码,直接提供了 SES 的正确安全访问代码

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】:

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

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

2) 除了 1),您还可以创建 ~/.aws/credentials 文件。您可以在此处添加以下行:[默认] 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 角色向应用程序授予权限 Running on Amazon EC2 Instances") 本指南:AWS IAM User Guide 了解步骤和过程。这里,密钥和访问密钥是自动获取的,您无需执行任何操作。您只需设置默认区域使用步骤 1)(即导出 AWS_DEFAULT_REGION=someregion)。

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

【讨论】:

嗨,斯里 - 非常感谢这个结构良好的答案。我在我的代码中使用最简单的方法 1 和我的根键,但仍然收到错误。我在想——这可能是因为我使用的是旧版本的 SDK,因为我使用的是 phar 文件而不是作曲家。我已经使用作曲家重新安装了 SDK,但现在出现此错误“警告:include_once(/home/ec2-user/vendor/autoload.php):无法打开流:/var/www/ 中的权限被拒绝” - 任何关于如何解决的想法 - 我认为这是由于 Apache 访问根文件夹,但我不确定..再次感谢您的帮助 你试过了吗:***.com/questions/1484595/…

以上是关于Amazon SES 从实例配置文件元数据服务器检索凭证时出错。 (客户端错误:404)的主要内容,如果未能解决你的问题,请参考以下文章

Amazon SES 电子邮件地址未验证

AWS Elastic Beanstalk SPF 记录和 Amazon SES

发送电子邮件时如何向 Amazon SES 服务提供 AWS 密钥?

EOFError 错误尝试通过带有 Rails 3.1.3 的 SMTP 使用 Amazon SES

如何从 Amazon SES 检索响应?

Postfix 处理 Amazon SES 最大发送速率错误