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

如何通过IAM策略为AWS ECS Fargate上的Laravel应用授权SES访问权限

解决方案

你的授权方式本身是可行的,当前CLI可正常调用SES但HTTP请求报错的核心原因是PHP-FPM默认会清理传递给进程的环境变量,导致AWS_CONTAINER_CREDENTIALS_RELATIVE_URI等AWS注入的环境变量没有传递到Laravel运行时,AWS SDK无法读取到容器凭证地址,就会 fallback 到实例元数据服务获取凭证,从而抛出你遇到的报错。

你可以按以下步骤修复:

  1. 配置PHP-FPM允许传递AWS相关环境变量
    编辑PHP-FPM的池配置文件(通常路径为/etc/php/<你的PHP版本>/fpm/pool.d/www.conf),选择以下任意一种配置方式即可:
    • 方式一:关闭环境变量清理
      将配置项clear_env的值修改为no:
    clear_env = no
    
    • 方式二:显式传递所需环境变量(更安全,推荐)
      在配置文件中新增以下行,仅传递需要的AWS变量:
    env[AWS_CONTAINER_CREDENTIALS_RELATIVE_URI] = $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
    env[AWS_REGION] = $AWS_REGION
    
  2. 检查Laravel AWS相关配置
    确保config/services.php中的AWS配置没有硬编码访问密钥,让SDK自动走凭证链获取权限:
'aws' => [
    'region' => env('AWS_REGION', 'us-east-1'),
    'version' => 'latest',
    // 无需配置key、secret字段,留空让AWS SDK自动检测凭证
],

如果你使用Laravel自带的SES邮件驱动,也要确认config/mail.php中的SES配置没有硬编码密钥。
3. 重启PHP-FPM服务或者重新构建容器镜像使配置生效。

你可以临时新增一个输出phpinfo()的路由,通过HTTP访问检查$_SERVER区段是否存在AWS_CONTAINER_CREDENTIALS_RELATIVE_URI变量,确认变量传递成功后即可正常调用SES发送邮件。

内容的提问来源于stack exchange,提问作者shmuels

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:00