javascript AWS S3Client未正确加载凭据

iecba09b  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(100)

我有一个问题与S3客户端从aws sdk v3:
如果我按照文档中的说明使用S3Client,并使用环境变量提供的凭据,则会得到错误The AWS Access Key Id you provided does not exist in our records.
起初我以为是因为我没有使用正确的AWS_ACCESS_KEY_ID,但是在客户端初始化之后添加这一行修复了这个问题,并记录了正确的值:

s3.config.credentials().then(console.log)

最让我烦恼的是,如果我在其他任何地方拨打这条线路(即:在异步函数中),它不能解决这个问题。

  • 为什么这个异步函数调用修复了执行的其余部分?
  • 它只是临时修复客户端吗?(客户端在多次函数调用时保持示例化状态)
  • 承诺是否可以延迟结束:在客户第一次打电话之后
  • 为什么在s3调用之前调用它时不起作用(不管有没有await)?

下面是我的代码:

const s3Config: S3ClientConfig = {}
s3Config.endpoint = new HttpRequest({...} as Endpoint) // used with a local s3 server
const s3 = new S3Client(s3Config);

// this is the hack
s3.config.credentials().then(console.log)

export const upload = async (...) => {
    // here it does not work
    // await s3.config.credentials().then(console.log)

    const streamUpload = new Upload({client: s3,...})
    return await streamUpload.done()
}

export const getTempLink = async (...) => {
    // here it does not work
    // await s3.config.credentials().then(console.log)

    //* Get the pre-signed url
    const command = new GetObjectCommand({Bucket,Key})
    return await getSignedUrl(s3 as any, command as any, { expiresIn })
}

谢谢你的帮忙!

t8e9dugd

t8e9dugd1#

我也有类似的问题
首先是aws-sdkaws-sdk/client-s3之间的差异
我的问题是,在.env文件中,键的名称如下所示

ACCESS_KEY_ID, 
SECRET_ACCESS_KEY, 
AWS_SESSION_TOKEN

那不起作用,所以我改变了名字,就像下面和准备去。它采取了凭据。

AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
AWS_SESSION_TOKEN,

请记住,AWS具有用于凭据的chain of precedence

相关问题