You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何通过IAM实例配置文件实现Monit与Amazon SES集成?

Monit 与 Amazon SES 通过IAM实例配置文件集成的解决方案

核心说明

Monit 本身不支持直接通过IAM实例配置文件完成与Amazon SES的SMTP认证,因为其内置邮件客户端仅支持静态配置SMTP用户名/密码,无法自动从EC2绑定的IAM实例配置文件获取临时凭证或调用SES API。

可行方案

若不愿在monitrc中存储SMTP凭证,推荐以下两种方案:

  • 方案一:用Shell脚本调用AWS CLI发送告警(推荐)
    利用EC2已绑定的IAM实例配置权限,直接通过AWS CLI调用SES API发邮件,绕过Monit内置邮件功能:

    1. 编写发送邮件的Shell脚本(示例):
      #!/bin/bash
      # 接收Monit传入的主题和内容参数
      ALERT_SUBJECT="$1"
      ALERT_BODY="$2"
      # 替换为你的验证发件人和收件邮箱
      SENDER="monit-alerts@your-verified-domain.com"
      RECIPIENT="admin@example.com"
      
      aws ses send-email \
        --from "$SENDER" \
        --destination "ToAddresses=$RECIPIENT" \
        --message "Subject={Data=$ALERT_SUBJECT,Charset=UTF-8},Body={Text={Data=$ALERT_BODY,Charset=UTF-8}}" \
        --region eu-central-1
      
    2. 给脚本添加执行权限:
      chmod +x /opt/scripts/send-ses-alert.sh
      
    3. 修改monitrc,将邮件通知替换为执行脚本:
      # 示例:监控Nginx进程
      check process nginx with pidfile /var/run/nginx.pid
        start program = "/usr/bin/systemctl start nginx"
        stop program = "/usr/bin/systemctl stop nginx"
        if failed port 80 protocol http then exec "/opt/scripts/send-ses-alert.sh 'Nginx服务异常' '服务器$(hostname)上的Nginx进程已停止'"
      
  • 方案二:动态生成临时SMTP凭证(复杂度高)
    若坚持使用Monit内置邮件功能,可通过脚本定期基于IAM角色生成SES临时SMTP凭证,自动更新monitrc中的SMTP配置并重启Monit。但此方案需处理凭证过期(最长有效期1小时),且涉及配置文件修改与服务重启,稳定性不如方案一。

补充提示

Amazon SES的SMTP认证需专用SMTP凭证,而非IAM用户的Access Key,且Monit无AWS SDK集成能力,无法自动获取临时SMTP凭证。因此直接调用SES API的脚本方案是最简洁可靠的选择。

内容的提问来源于stack exchange,提问作者Ferhat S. R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:13:15