【问题标题】:Failed to retrieve credentials from EC2 Instance Metadata Service无法从 EC2 实例元数据服务检索凭证
【发布时间】:2018-11-22 09:04:42
【问题描述】:

我正在尝试使用 SDK 通过 AWS SES API 发送电子邮件。

我的代码基于此处的官方文档:https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html

我到达await client.SendEmailAsync(sendRequest); 并收到错误消息:

无法从 EC2 实例元数据服务检索凭证。

// initialization
var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2);
var response = new SendEmailResponse();

// build email
var sendRequest = new SendEmailRequest
{
    Source = ToAddress,
    Destination = new Destination
    {
        ToAddresses =
        new List<string> { ReceiverAddress }
    },
    Message = new Message
    {
        Subject = new Content(model.Subject),
        Body = new Body
        {
            Html = new Content
            {
                Charset = "UTF-8",
                Data = model.HtmlBody
            },
        }
    },
};

// send async call to api
try
{
    var response = await client.SendEmailAsync(sendRequest);
}
catch (Exception ex)
{

}

我已确认我的域已通过 AWS 控制台进行验证,并且还显示为“已启用发送”。

我哪里出错了?

【问题讨论】:

  • 您实际上是在 EC2 中运行此代码吗?如果有,该实例是否具有 IAM 实例角色?
  • 我的实现没有在 EC2 上运行。
  • EC2 实例元数据服务是在 EC2 实例上运行的代码可以获取与IAM instance role 关联的临时凭证的当前版本的地方。它仅适用于 EC2 内部。在 EC2 之外运行,您需要以另一种方式配置凭据。

标签: c# amazon-web-services email .net-core amazon-ses


【解决方案1】:

如果有人来到这里时不知道从头开始配置 AWS。只是添加一些细节:

之后我可以在本地访问 AWS 服务

【讨论】:

    【解决方案2】:

    我找到了问题的答案。

    可以通过创建 IAM 用户组和有权访问 SES 服务的用户来解决此问题。

    然后我编辑了我的代码以传递 AccessKeyId 和 SecretAccessKey。

        var client = new AmazonSimpleEmailServiceClient(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
        var response = new SendEmailResponse();
    

    这是有效的。但是为了更安全,建议使用Shared Credentials File

    希望这对其他人有所帮助。

    编辑: 在 AWS SES SDK V2 中,您需要将 AmazonSimpleEmailServiceClient 更改为 AmazonSimpleEmailServiceV2Client

        var client = new AmazonSimpleEmailServiceV2Client(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
        var response = new SendEmailResponse();
    

    【讨论】:

    • 嗨,我正在从 Azure 迁移到 AWS,现在必须经历这个。我在正确的位置有共享凭证文件,设置了所有代码等,但对于本地开发,当 tryign 调用 AmazonSimpleSystemsManagementClient 以获取参数值时,我收到错误“”无法从 EC2 实例元数据获取 IAM 安全凭证服务”有什么想法吗?
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2018-04-18
    • 2019-05-06
    • 2017-11-25
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多