S3 cp使用根密钥从AWS cli访问AccessDenied

时间:2015-07-27 17:39:45

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

我在EC2实例上安装了AWS cli,我通过运行//Dilbert Comic Server var http = require('http'), fs = require('fs'), request = require('request'), url = require('url'), cheerio = require('cheerio'), DilbertURL = 'http://dilbert.com/strip/' + getDateTime(); http.createServer(function(req, res) { request(DilbertURL, function(error, response, body) { var $ = cheerio.load(body); $('div.container-fluid').each(function(i, element) { var src = $('.img-responsive.img-comic').attr("src"); download(src, 'Dilbert.jpg', function() { var img = fs.readFileSync('./Dilbert.jpg'); res.writeHead(200, { 'Content-Type': 'image/gif' }); res.end(img, 'binary'); }); }); }); }).listen(1337, '127.0.0.1', function(err){ if(err){ console.log("Failed to start web server:", err); }else{ console.log('Server running at http://127.0.0.1:1337/'); } }); var download = function(uri, filename, callback) { request.head(uri, function(err, res, body) { console.log('content-type:', res.headers['content-type']); request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; function getDateTime() { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; month = (month < 10 ? "0" : "") + month; var day = date.getDate(); day = (day < 10 ? "0" : "") + day; return year + "-" + month + "-" + day ; } 并为其提供了我的AWSAccessKeyId和AWSSecretKey密钥来配置它,所以如果我运行命令var physPath = monster.physicsBody physPath.dynamic = true physPath.categoryBitMask = PhysicsCategory.Monster physPath.contactTestBitMask = PhysicsCategory.Projectile physPath.collisionBitMask = PhysicsCategory.None 它会返回我的名字S3桶(称之为“mybucket”)。

但是,如果我再尝试aws configure,我会收到类似

的错误
aws s3 ls

我认为通过运行aws configure并给它我的根密钥,我有效地给了aws cli它需要进行身份验证的所有内容吗?有没有关于复制到S3存储桶而不是列出它们的东西?

3 个答案:

答案 0 :(得分:17)

以为我会添加一个非常类似的问题,我可以在其中列出存储桶但无法写入返回错误的给定存储桶

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied

如果存储桶使用服务器端加密,您需要添加--sse标志才能写入此存储桶。

答案 1 :(得分:7)

Root Access密钥和Secret密钥具有与AWS交互的完全控制权和完全权限。请尝试再次运行aws configure以重新检查设置,然后重试。

PS:强烈建议不要使用root访问密钥 - 请考虑创建一个IAM(使用root权限管理员权限)并使用它们。

答案 2 :(得分:3)

如果您设置了环境变量AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_REGION,AWS CLI会为它们提供更高的优先级,而不是您使用aws configure指定的凭据。

所以,就我而言,bash命令unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY解决了这个问题。