【问题标题】:s3cmd put - The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256s3cmd put - 不支持您提供的授权机制。请使用 AWS4-HMAC-SHA256
【发布时间】:2016-06-15 23:03:45
【问题描述】:

我正在尝试使用法兰克福或都柏林实例中的 s3cmd 从 ec2 将文件上传到 s3:

s3cmd put -r folder  s3://bucket

但是,我得到:

ERROR: S3 error: 400 (InvalidRequest): The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.

我看到this question 建议通过以下方式将配置设置为 V4:

signatureVersion: 'v4'

我如何使用 s3cmd 命令来做到这一点?

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-ec2


    【解决方案1】:

    您必须使用最新版本 1.6.1

    只需按照以下方式或您可能想要使用的任何其他方式升级 s3cmd。

    pip install --upgrade
    

    【讨论】:

    • 我的版本是 1.1.0-beta3,但是当我运行 sudo apt-get --only-upgrade install s3cmd 时,我得到 s3cmd 已经是最新版本。 0 个已升级,0 个新安装,0 个要移除,155 个未升级。
    • 您正在使用过时的软件包或过时的操作系统。如果您不知道如何使用您的操作系统,请在另一个问题中提出您的原始问题。
    • 它与操作系统无关。 linux 存储库不是最新的:s3tools.org/download,因此,升级建议不适用于该库 - 我需要手动下载它
    • 我明白了,在这种情况下,只需使用 PIP 安装它。 :)
    【解决方案2】:

    我有同样的问题。地区是亚太地区(孟买)。它的实际区域ap-south-1。这是链接 http://docs.aws.amazon.com/general/latest/gr/rande.html 还使用 cmd 配置了 AWSCLI aws 配置设置 default.s3.signature_version s3v4 这是链接 http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html

    完整的工作代码在这里

    var express = require('express');
    var app = express();
    var http = require('http').Server(app);
    var fs = require('fs');
    var aws = require('aws-sdk');
    var S3FS = require('s3fs');
    
    var s3fsImpl = new S3FS('ipxstorage/products', { accessKeyId:'Use your accesskey', secretAccesskey:'use your sck', region:'ap-south-1'});
    var multiparty = require('connect-multiparty');
    var multipartyMiddleware = multiparty();
    aws.config.update({ signatureVersion:'v4'});
    
    app.use(express.static(__dirname + '/public'));
    app.set('views', __dirname+'/public/');
    app.engine('html', require('ejs').renderFile);
    app.use(multipartyMiddleware);
    
    app.post('/upload', function(req, res){
        console.log(req.files.file);
        var file = req.files.file;
        var stream = fs.createReadStream(file.path);
        return s3fsImpl.writeFile(file.originalFilename, stream).then( function(){
            console.log('File Saved...');
    
            res.redirect('/')
        });
    });
    
    
    <form action="upload" method="POST" enctype="multipart/form-data">                    
                       <div class="file-field input-field">
                           <div class="btn"><span>Browse File</span><input name="file" type="file"></div>
                           <div class="file-path-wrapper">
                               <input class="file-path validate" type="text">
                           </div>
    
                       </div>                    
                       <button class="btn" type="Submit">Submit</button>
                   </form>
    

    【讨论】:

    • 还配置了aws configure set default.s3.signature_version s3v4
    猜你喜欢
    • 2014-12-19
    • 2017-12-06
    相关资源
    最近更新 更多