在没有凭据的情况下使用 aws-sdk
Using aws-sdk without credentials
我有一个 s3 存储桶,设置为允许列出 public。当我这样做时:
aws s3 ls s3://bucket_name/prefix/ --no-sign-request
我设法成功列出存储桶。我想在使用 aws-sdk for Node.js 的应用程序中列出它。在那里,我做:
import AWS from 'aws-sdk';
const s3 = new AWS.S3();
s3.listObjectsV2({Bucket: bucket_name, Prefix: prefix, Delimiter: "/"}, ...
但是我得到一个错误:
message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
2021-09-17T12:40:33.459881+00:00 app[web.1]: code: 'CredentialsError',
2021-09-17T12:40:33.459881+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459882+00:00 app[web.1]: syscall: 'connect',...
2021-09-17T12:40:33.459883+00:00 app[web.1]: time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459884+00:00 app[web.1]: originalError:
2021-09-17T12:40:33.459884+00:00 app[web.1]: { message: 'Could not load credentials from any providers',
2021-09-17T12:40:33.459884+00:00 app[web.1]: code: 'CredentialsError',
2021-09-17T12:40:33.459884+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459885+00:00 app[web.1]: syscall: 'connect',...
2021-09-17T12:40:33.459886+00:00 app[web.1]: time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459886+00:00 app[web.1]: originalError:
2021-09-17T12:40:33.459886+00:00 app[web.1]: { message: 'EC2 Metadata roleName request returned error',
2021-09-17T12:40:33.459887+00:00 app[web.1]: code: 'ECONNREFUSED',
2021-09-17T12:40:33.459887+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459888+00:00 app[web.1]: syscall: 'connect',... }
看起来 SDK 正在尝试获取凭据,即使资源在没有凭据的情况下也可用。是否可以在不要求凭据的情况下标记要发出的请求?
为防止 SDK 需要凭据,您需要使用 makeUnauthenticatedRequest
方法进行任何调用。这允许您调用“具有给定输入参数的服务操作,无需任何身份验证数据”。
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});
s3 = new AWS.S3();
s3.makeUnauthenticatedRequest(
'listObjects',
{ Bucket : '-example-bucket-name-', },
function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
}
);
旧版本的 SDK 可以在 validate
和 sign
侦听器上调用 removeListener
之后调用 send()
完成同样的事情。
我有一个 s3 存储桶,设置为允许列出 public。当我这样做时:
aws s3 ls s3://bucket_name/prefix/ --no-sign-request
我设法成功列出存储桶。我想在使用 aws-sdk for Node.js 的应用程序中列出它。在那里,我做:
import AWS from 'aws-sdk';
const s3 = new AWS.S3();
s3.listObjectsV2({Bucket: bucket_name, Prefix: prefix, Delimiter: "/"}, ...
但是我得到一个错误:
message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
2021-09-17T12:40:33.459881+00:00 app[web.1]: code: 'CredentialsError',
2021-09-17T12:40:33.459881+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459882+00:00 app[web.1]: syscall: 'connect',...
2021-09-17T12:40:33.459883+00:00 app[web.1]: time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459884+00:00 app[web.1]: originalError:
2021-09-17T12:40:33.459884+00:00 app[web.1]: { message: 'Could not load credentials from any providers',
2021-09-17T12:40:33.459884+00:00 app[web.1]: code: 'CredentialsError',
2021-09-17T12:40:33.459884+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459885+00:00 app[web.1]: syscall: 'connect',...
2021-09-17T12:40:33.459886+00:00 app[web.1]: time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459886+00:00 app[web.1]: originalError:
2021-09-17T12:40:33.459886+00:00 app[web.1]: { message: 'EC2 Metadata roleName request returned error',
2021-09-17T12:40:33.459887+00:00 app[web.1]: code: 'ECONNREFUSED',
2021-09-17T12:40:33.459887+00:00 app[web.1]: errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459888+00:00 app[web.1]: syscall: 'connect',... }
看起来 SDK 正在尝试获取凭据,即使资源在没有凭据的情况下也可用。是否可以在不要求凭据的情况下标记要发出的请求?
为防止 SDK 需要凭据,您需要使用 makeUnauthenticatedRequest
方法进行任何调用。这允许您调用“具有给定输入参数的服务操作,无需任何身份验证数据”。
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});
s3 = new AWS.S3();
s3.makeUnauthenticatedRequest(
'listObjects',
{ Bucket : '-example-bucket-name-', },
function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
}
);
旧版本的 SDK 可以在 validate
和 sign
侦听器上调用 removeListener
之后调用 send()
完成同样的事情。