当前位置: 首页 > 知识库问答 >
问题:

Amazon SES异常:IAM用户无权对资源执行“SES:SendRawEmail”

毋宏茂
2023-03-14

我是AWS新手,我尝试使用Elastic beanstalk在AWS EC2实例中部署Springboot应用程序。我想利用AWS SES服务向订阅的应用程序用户发送通知。

作为其中的一部分,在AWS SDK SES API和IAM凭据的帮助下,我能够使用springboot应用程序发送验证用户电子邮件,但我也想发送未验证用户的电子邮件,因此,我已请求AWS支持团队将我的IAM用户从AWS SES沙箱中解救出来,并增加每天发送电子邮件的限制,AWS支持团队已满足此请求。

在将我的IAM用户移出SES沙箱后,当我尝试为已验证和未验证的用户发送电子邮件时,我遇到以下错误。

org.springframework.mail.MailSendException: Failed messages: com.amazonaws.services.simpleemail.model.AmazonSimpleEmailServiceException:
 User `arn:aws:sts::4***436****2:assumed-role/aws-elasticbeanstalk-ec2-role/i-066edeefc2ed72b10' is not authorized to perform 
 `ses:SendRawEmail' on resource `arn:aws:ses:ap-south-1:4***436****2:identity/ra******ar@gmail.com' 
 (Service: AmazonSimpleEmailService; Status Code: 403; Error Code: AccessDenied; Request ID: 5eeb1f17-a283-4d9f-bca9-ac981ee546c4; 
 Proxy: null); message exception details (1) are:

Failed message 1:
com.amazonaws.services.simpleemail.model.AmazonSimpleEmailServiceException: 
User `arn:aws:sts::4***436****2:assumed-role/aws-elasticbeanstalk-ec2-role/i-066edeefc2ed72b10' is not authorized to perform 
`ses:SendRawEmail' on resource `arn:aws:ses:ap-south-1:4***436****2:identity/ra******ar@gmail.com@gmail.com' 
(Service: AmazonSimpleEmailService; Status Code: 403; Error Code: AccessDenied; Request ID: 5eeb1f17-a283-4d9f-bca9-ac981ee546c4; Proxy: null)

波姆。xml:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ses</artifactId>
    <version>1.11.777</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

AWS邮件配置类:

import org.springframework.cloud.aws.mail.simplemail.SimpleEmailServiceJavaMailSender;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.mail.javamail.JavaMailSender;

import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;

@Configuration
public class AwsMailConfig {

  // Used to fetch AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
  private CustomPropertyConfig customPropertyConfig;

  public AwsMailConfig(final CustomPropertyConfig customPropertyConfig) {
    this.customPropertyConfig = customPropertyConfig;
  }

  @Profile("prod")
  @Bean("AWSCredentialsProvider")
  public AWSCredentialsProvider amazonAWSCredentialsProviderProduction() {
      return new EC2ContainerCredentialsProviderWrapper();
  }

  @Bean
  @Profile("prod")
  public AmazonSimpleEmailService amazonSimpleEmailServiceProduction() {

    return AmazonSimpleEmailServiceClientBuilder.standard()
        .withRegion(Regions.AP_SOUTH_1)
        .build();
  }

  @Bean
  public JavaMailSender javaMailSender(AmazonSimpleEmailService amazonSimpleEmailService) {
    return new SimpleEmailServiceJavaMailSender(amazonSimpleEmailService);
  }
}

电子邮件发件人服务类别:

import java.nio.charset.StandardCharsets;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import com.ebike.aws.emailutil.Mail;

@Service
public class AWSEmailSenderService {

    private JavaMailSender javaMailSender;

    public AWSEmailSenderService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    @Async
    public void sendEmail(Mail mail) throws MessagingException {

        try {

            MimeMessage message = getMimeMessage(mail);
            javaMailSender.send(message);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private MimeMessage getMimeMessage(Mail mail) throws MessagingException {

        MimeMessage message = javaMailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
                StandardCharsets.UTF_8.name());

        String html = mail.getEmailBody();

        helper.setTo(mail.getTo());
        helper.setText(html, true);
        helper.setSubject(mail.getSubject());
        helper.setFrom(mail.getFrom());
        return message;
    }
}

Mail.java有一个方法来获取邮件对象

public Mail getMail() {
    Mail mail = new Mail();
    mail.setFrom(fromEmailID);
    mail.setTo(toEmailId);
    mail.setSubject(subject);
    mail.setEmailBody(emailBody);
    return mail;
}

在获得IAM用户未被授权执行“ses:SendRawEmail”异常后,我尝试添加策略以授予所有可能的权限,但我知道我必须在策略本身中进行修改,但在搜索了一段时间后,我无法理解,我已经浏览了此链接,但没有帮助或我无法理解。

目前IAM用户有以下AWS策略:

我不知道,下面是不是适用自定义政策的合适地方

请帮助我了解如何使用AWS SES为未经验证的电子邮件ID发送电子邮件,并为IAM用户授予所有可能的权限或策略。

共有1个答案

单琛
2023-03-14

此错误与IAM用户无关,而是与弹性豆茎的aws-elasticbeanstalk-ec2-role有关。

因此,您必须转到IAM角色,找到有问题的角色,并向其添加所需的权限。

 类似资料:
  • 所以我试图初始化一个现有的“反应”放大项目,其中配置了大约8个服务。当我运行放大推送时,除了以下内容,一切似乎都很好,也很成功,我得到了这个错误: 以下是给定地址的cloudwatch日志: 我试图创建角色“snsb927798344500 staging”并添加所需的策略,但当我尝试重新运行命令时,我收到一个错误,称。所以我认为是amplify在每一次推送中创建了角色,并且在过程失败后删除了它。

  • 我用的是nodejs,serverless和aws dynamodb。我试图创建一个lambda,在这里我调用一个API,获取数据(1000条记录),现在,我想将这些数据插入到我的dynamodb中。 我使用batchWrite来实现这一点,并通过创建每个包含25个json对象的bucket来使用它。但我得到了一个错误:<br><code>AccessDeniedException: 当我在没有批

  • 我找不到问题,因为私有API网关的资源策略如下所示: 我错过了什么?

  • 我正在尝试将文件从一个账户(源账户)中的 S3 存储桶移动到另一个账户(目标账户)中的 S3 存储桶,我正在使用 sagemaker 笔记本,因此我有一个 sagemaker 角色。我在我的团队帐户中也有一个角色,它具有完全的s3访问权限和完全的管理员访问权限,并且在信任关系中,我为目标帐户角色arn和sagemaker角色arn提供了一个角色。目标帐户在其信任策略中还具有我的团队角色 arn 和

  • 我的经理在AWS中为我分配了一个IAM角色,我正在尝试建立一个Amazon数据管道。在尝试激活管道时,我反复遇到如下权限问题和授权问题。 警告:验证角色“DataPipelineDefaultRole”时出错。错误:状态代码:403,AWS服务:AmazonIdentityManagement,AWS请求ID:fbf1935a-bcf1-11e3-82d4-cd47aac2f228,AWS错误代码

  • 我有一个 AWS 账户,在该账户中,我代入一个名为 A() 的角色,我从该角色通过 Web 控制台创建了另一个名为 B() 的角色,并将管理员策略附加到该角色 这是cli配置 我从 创建 当我试图得到角色细节时 我收到以下错误 调用假设角色操作时发生错误 (访问消除): 用户: arn:aws:iam::