【问题标题】:Using aws-sdk without credentials在没有凭据的情况下使用 aws-sdk
【发布时间】:2021-11-12 08:32:06
【问题描述】:

我有一个设置为允许公开上市的 s3 存储桶。当我这样做时:

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 正在尝试获取凭据,即使资源在没有凭据的情况下可用。是否可以在不要求凭据的情况下标记要发出的请求?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    为防止 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 可以在 validatesign 侦听器上调用 removeListener 后调用 send() 完成相同的操作。

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 2018-10-27
      • 2021-03-08
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2016-10-31
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多