在没有密钥和访问密钥 ID 的情况下使用 AWS API 发送电子邮件

Sending email using AWS API without Secret Key and Access Key Id

我对 AWS 几乎一无所知。但是我想在我的 Springboot 项目中使用 AWS SDK 通过 SES 发送电子邮件。我将以委托用户的身份发送电子邮件,而我所拥有的只是身份用户的 ARN。我尝试了 AWS 网站上提供的代码并将 X-SES-SOURCE-ARN header 设置为身份用户的 ARN,但出现 Unable to load AWS credentials from any provider in the chain 错误。我需要添加任何类型的 ACCESS-KEY-IDSECRET-KEY 吗?

您可能会将 IAM 身份与 email/domain 身份混淆。

IAM 处理 API 调用 (AWS sigv4) 的授权。

SES 身份是服务内部的,仅代表授权的发送电子邮件地址或域(已执行验证步骤)。

要成功拨打电话,您需要同时具备以下两个条件:

  1. 一个 IAM 委托人,授权帐户中的 ses:SendEmail
  2. 在您的 API 调用中作为源 ARN 传递的账户中经过验证的电子邮件或域身份。

如果您使用的是发送授权策略,则需要进行更多设置,但本质上是相同的。

您可以在名为AwsCredentials.properties的文件中添加accessKey和secretKey。接下来,当您配置 AWS SES 客户端时,您将加载该文件,如以下 Cognito 示例所示。

public AWSCognitoIdentityProvider getAmazonCognitoIdentityClient() {
    ClasspathPropertiesFileCredentialsProvider propertiesFileCredentialsProvider = new ClasspathPropertiesFileCredentialsProvider();

    return AWSCognitoIdentityProviderClientBuilder.standard().withCredentials(propertiesFileCredentialsProvider)
            .withRegion(props.getRegion()).build();

}