尝试将对象放入 s3 存储桶时,配置中缺少凭据
Posted
技术标签:
【中文标题】尝试将对象放入 s3 存储桶时,配置中缺少凭据【英文标题】:Missing credentials in config when trying to put object to s3 bucket 【发布时间】:2022-01-02 14:02:55 【问题描述】:我有一个快速服务正在尝试将对象写入 s3 存储桶,但我收到以下错误:
配置中缺少凭据
我在本地担任我的 AWS 角色,它将我的凭据设置在 .aws/credentials
中,然后在我的 Dockerfile 中我将它们复制到我的容器中。
RUN mkdir "/home/node/.aws" && touch "/home/node/.aws/config" && touch "/home/node/.aws/credentials"
RUN echo "$AWS_CREDENTIALS" > "/home/node/.aws/credentials"
文档说:
开发工具包会自动检测 AWS 凭证设置为您的变量 环境并将它们用于 SDK 请求,无需 在您的应用程序中管理凭据。环境变量 您设置为提供您的凭据是:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN(可选)
所以我在使用 sdk 时不必手动管理我的凭据?
目前写入s3桶的代码:
import s3 from 'aws-sdk/clients/s3';
const s3Client = new s3(region: process.env['region']);
async upload()
const params =
Bucket: process.env['bucket'],
Key: 'test.json',
Body: somejsonfile
const res = s3Client.upload(params).promise();
return results;
【问题讨论】:
【参考方案1】:node是执行此代码的正确用户吗?
文件/home/node/.aws/credentials
是不是像这样:
[default]
aws_access_key_id = <AAK>
aws_secret_access_key = <ASK>
要调试,您可以尝试以下操作: 您可以尝试直接在代码中添加您的 AWS 凭证:
AWS.config.update(
accessKeyId: "<AAK>",
secretAccessKey: "<ASK>",
"region": "<REGION>"
);
或者,您可以尝试删除 /home/node/.aws/credentials
文件并将凭据移至 /home/node/.aws/config
文件:
[default]
region=<REGION>
output=json
aws_access_key_id = <AAK>
aws_secret_access_key = <ASK>
另外,您可以尝试在 Dockerfile 中添加凭据和区域作为环境变量:
ENV AWS_ACCESS_KEY_ID=<AAK>
ENV AWS_SECRET_ACCESS_KEY=<ASK>
ENV AWS_DEFAULT_REGION=<REGION>
【讨论】:
以上是关于尝试将对象放入 s3 存储桶时,配置中缺少凭据的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 PUT 将 PDF 作为 blob 上传到 S3 存储桶时被禁止 403
将对象上传到 S3 存储桶时如何触发 AWS Cloudformation 堆栈的更新?