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

如何在AWS Amplify托管的Next.js应用中正确使用AWS SDK?

解决Next.js + AWS SDK v3在Amplify部署后的凭证问题

官方推荐的正确方案:使用Amplify的IAM服务角色

Amplify部署的前端应用会自动关联一个IAM服务角色,AWS SDK v3会自动从运行环境中获取临时凭证,无需手动配置AWS_ACCESS_KEY_ID等变量,同时完全兼容本地的~/.aws/credentials配置,具体步骤如下:

  1. 登录Amplify控制台,进入你的应用,点击「Settings」→「IAM service role」,复制该角色的ARN。
  2. 打开IAM控制台,找到这个角色,点击「Permissions」→「Add permissions」→「Create inline policy」。
  3. 根据业务需求创建权限策略(比如S3上传、SES发邮件的权限),示例S3上传权限策略:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::你的存储桶名称/*"
        }
      ]
    }
    
  4. 保存策略后,Amplify应用的运行环境会自动继承该角色的权限,SDK无需额外配置即可正常工作。

为什么之前的方案存在问题?

  • Amplify会过滤所有AWS_前缀的环境变量,所以你手动设置的AWS_ACCESS_KEY_ID等变量无法被应用读取。
  • 手动解析process.env.secrets并硬编码凭证的做法极度危险:Next.js前端代码会被打包编译,凭证可能暴露在客户端代码中,导致AWS账号泄露。
  • 该方案还会破坏本地运行逻辑,因为本地环境不存在process.env.secrets变量。

兼容本地与部署的代码写法

保持SDK的默认初始化逻辑即可,SDK会自动按优先级加载凭证:

import { S3Client } from "@aws-sdk/client-s3";
import { SESClient } from "@aws-sdk/client-ses";

// 仅指定区域,无需手动传入credentials
const s3Client = new S3Client({ region: "你的AWS区域" });
const sesClient = new SESClient({ region: "你的AWS区域" });
  • 本地环境:SDK自动读取~/.aws/credentials中的凭证。
  • Amplify部署环境:SDK自动获取IAM服务角色的临时凭证。

关于文档匮乏的说明

Amplify的IAM服务角色属于隐式默认配置,官方文档更侧重Amplify CLI的全栈开发流程,纯前端部署的场景说明较少。不少开发者会忽略这个默认角色,转而尝试手动配置凭证,导致走弯路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:50:23