我有一个具有公共读取访问权限的S3存储桶。我有一个Web应用程序,并且要在其中使用AWS开发工具包JS进行客户端调用以列出存储桶中的对象。
我没有凭据的用例,但是在初始化客户端时似乎需要凭据,因为我不断收到“配置中缺少凭据”错误。
import S3 from 'aws-sdk/clients/s3';
var s3 = new S3({
apiVersion: '2006-03-01',
});
// the above initialises without error
var params = {
Bucket: 'my_bucket',
Delimiter: '/',
Prefix: "some-path/"
}
// throws Missing credentials in config
s3.listObjects(params, function (err, data) {
if(err)throw err;
console.log(data);
});
因此,我的问题是:
预先感谢
答案 0 :(得分:0)
好吧,显然,这是必需的凭据。使用SDK进行不需要身份验证的可公开访问的呼叫时,这对我来说有点奇怪?
答案 1 :(得分:0)
绝对需要凭据,fwiw,这是我进行简单测试的方法:
import { config as env } from 'https://deno.land/x/dotenv/mod.ts' // https://github.com/pietvanzoen/deno-dotenv
import { S3Client, ListObjectsV2Command } from 'https://cdn.skypack.dev/@aws-sdk/client-s3' // https://github.com/aws/aws-sdk-js-v3
const {AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY} = env()
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/modules/credentials.html
const credentials = {
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/s3clientconfig.html
const config = {
region: 'us-east-1',
credentials,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/s3client.html
const client = new S3Client(config)
export async function list() {
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/listobjectsv2commandinput.html
const input = {
Bucket: 'my_bucket'
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/command.html
const cmd = new ListObjectsV2Command(input)
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/listobjectsv2command.html
return await client.send(cmd)
}