我有一個s3桶,它被設定為允許向公眾列出。當我做:
aws s3 ls s3://bucket_name/prefix/-no-sign-request
我設法成功地列出了這個桶。我想在一個使用aws-sdk for Node.js的應用程式中列出它。在那里,我做的是:
從'aws-sdk'匯入AWS。
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: '無法從任何供應商那里加載憑證'。
2021-09-17T12:40:33.459884 00:00 APP[web.1]: 代碼。'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元資料roleName請求回傳錯誤'。
2021-09-17T12:40:33.459887 00:00 APP[web.1]:代碼。'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正試圖獲取證書,盡管資源在沒有證書的情況下也是可用的。是否有可能在不要求憑證的情況下將請求標記出來?
uj5u.com熱心網友回復:
為了防止SDK要求憑證,你需要使用makeUnauthenticatedRequest方法來放置任何呼叫。 這允許你在沒有任何認證資料的情況下呼叫 "帶有給定輸入引數的服務的操作"。
var AWS = require('aws-sdk')。
AWS.config.update({regional: 'us-west-2'})。)
s3 = new AWS.S3()。
s3.makeUnauthenticatedRequest(
'listObjects',
{ Bucket : '-example-bucket-name-', },
function(err, data) {
if (err) {
console.log("Error"/span>, err)。
} else {
console.log("Success", data) 。
}
}
);
舊版本的SDK可以在對validate和sign監聽器呼叫send()后完成同樣的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/330519.html
標籤:
