AWS JS SDK-强制性凭证

时间:2018-07-30 08:04:06

标签: aws-sdk-js

我有一个具有公共读取访问权限的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);
});

因此,我的问题是:

  1. 是否需要凭据,否则,我的配置不正确吗?
  2. 如果需要凭据,我将如何配置它们以用于对公共存储桶进行客户端调用。

预先感谢

2 个答案:

答案 0 :(得分:0)

好吧,显然,这是必需的凭据。使用SDK进行不需要身份验证的可公开访问的呼叫时,这对我来说有点奇怪?

http://docs.amazonaws.cn/en_us/AWSJavaScriptSDK/guide/browser-configuring.html#Configuring_the_SDK_in_the_Browser

答案 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)
}