
在 AWS Amplify 托管的 Next.js 应用中,当尝试上传文件到 S3 时,即使环境变量已正确配置,也可能遭遇 `CredentialsError: Missing credentials in config` 错误。此问题通常源于 Amplify 应用关联的 IAM 角色权限不足,而非 S3 客户端配置错误。解决方案涉及为 Amplify 的 IAM 角色(特别是未经身份验证的角色)添加 S3 操作的内联策略,并相应地配置 S3 存储桶策略,以确保应用程序具备必要的访问权限。
在本地开发环境中,使用 process.env.ACCESS_KEY_AWS 和 process.env.SECRET_KEY_AWS 在 S3 客户端实例化时提供凭证通常是有效的。然而,当应用程序部署到 AWS Amplify 时,其凭证管理机制有所不同。Amplify 应用通常会利用在 amplify init 过程中设置的 IAM 角色来执行 AWS 服务操作。这意味着,即使您在 S3 客户端中显式传入 accessIdKey 和 secretAccessKey,Amplify 后端在执行操作时,很可能仍然会优先使用其关联的 IAM 角色凭证。因此,Missing credentials 错误往往是 IAM 角色权限不足的误导性提示。
在遇到此类问题时,开发者通常会检查以下几点:
尽管这些检查是必要的,但对于 Amplify 环境中的特定问题,它们往往不足以解决 CredentialsError。核心问题在于 Amplify 应用所扮演的 IAM 角色。
解决此问题的关键在于为 Amplify 应用的 IAM 角色授予正确的 S3 权限,并确保 S3 存储桶策略允许这些操作。
首先,您需要识别 Amplify 应用所使用的 IAM 角色。对于不涉及 Cognito 身份验证的上传场景,通常是 Amplify 的“未经身份验证的角色”(Unauthenticated Role)。
步骤:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}/public/*"
],
"Effect": "Allow"
}
]
}解释:
除了 IAM 角色权限,S3 存储桶本身也需要有相应的策略来允许外部访问。
步骤:
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}/*",
"arn:aws:s3:::{BUCKET_NAME}"
]
}
]
}解释:
完成上述 IAM 角色和 S3 存储桶策略配置后,您的 Next.js 应用中的 S3 实例化代码可能不再需要显式传入 accessIdKey 和 secretAccessKey。Amplify 应用将自动使用其关联 IAM 角色的凭证。
// 原始代码:
// const s3 = new S3({
// accessIdKey: process.env.ACCESS_KEY_AWS,
// secretAccessKey: process.env.SECRET_KEY_AWS,
// });
// 优化后(依赖Amplify IAM角色):
const s3 = new S3({
// 如果Amplify IAM角色已正确配置,这些可能不再需要
// region: "sa-east-1", // 建议保留区域配置
});本地开发环境通常直接使用您在 ~/.aws/credentials 或通过环境变量配置的 AWS 凭证,这些凭证通常与具有 AmazonS3FullAccess 权限的 IAM 用户关联。而 AWS Amplify 生产环境则依赖于为您的应用配置的 IAM 角色。如果该角色没有足够的 S3 权限,即使您的本地 IAM 用户有权限,生产环境也会失败。
通过正确配置 Amplify 应用的 IAM 角色和 S3 存储桶策略,您可以解决在 Next.js 应用中遇到的 CredentialsError,确保文件能够顺利上传到 S3。
以上就是AWS Amplify Next.js 应用中 S3 凭证错误的解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号