使用AWS SDK for JavaScript访问AWS S3
现在我正在使用javascript SDK访问我的s3 bucket,它工作正常,但是我已经直接在javascript中硬编码了我的所有凭据,但是在SDK中,他们说你可以将这些存储在AWS.config对象中,我不知道如何做。另外,在线资源没有提供信息,所以请有人告诉我如何做,或者其他更好的方法来做,而不是硬编码的凭据使用AWS SDK for JavaScript访问AWS S3,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,现在我正在使用javascript SDK访问我的s3 bucket,它工作正常,但是我已经直接在javascript中硬编码了我的所有凭据,但是在SDK中,他们说你可以将这些存储在AWS.config对象中,我不知道如何做。另外,在线资源没有提供信息,所以请有人告诉我如何做,或者其他更好的方法来做,而不是硬编码的凭据 <script type="text/javascript"> AWS.config.accessKeyId = 'dddddddddd';
<script type="text/javascript">
AWS.config.accessKeyId = 'dddddddddd';
AWS.config.secretAccessKey = 'rrrrrrrrrrrrrrrreeeeeeeeeeeeeeeeeeeee';
AWS.config.region = 'us-east-1';
// create the AWS.Request object
var bucket = new AWS.S3({ params: { Bucket: 'some.bucket' } });
bucket.listObjects(function (err, data) {
if (err) {
document.getElementById('status').innerHTML =
'Could not load objects from S3';
} else {
document.getElementById('status').innerHTML =
'Loaded ' + data.Contents.length + ' items from S3';
for (var i = 0; i < data.Contents.length; i++) {
document.getElementById('objects').innerHTML +=
'<li>' + data.Contents[i].Key + '</li>';
}
}
});
</script>
AWS.config.accessKeyId='dddddddddd';
AWS.config.secretAccessKey='rrrrrrrrrrrrrrrreeeeeeeeee';
AWS.config.region='us-east-1';
//创建AWS.Request对象
var bucket=new AWS.S3({params:{bucket:'some.bucket'}});
bucket.listObjects(函数(错误、数据){
如果(错误){
document.getElementById('status').innerHTML=
'无法从S3加载对象';
}否则{
document.getElementById('status').innerHTML=
'已加载'+data.Contents.length+'来自S3'的项目;
对于(var i=0;i”+data.Contents[i].Key+”;
}
}
});
我认为浏览器不支持此功能。node.js完全支持AWS Javascript SDK
请阅读以下内容:
这有点道理,因为没有人愿意公开私有身份验证/授权信息
如果你想变得更花哨,你可以使用JSONP从另一台服务器()传递凭证,并使用防火墙限制对某些客户端的访问,但这可能会有点混乱
另一方面,既然浏览器上的javascript是公开的,为什么不公开S3 bucket进行读取访问呢?有一种方法可以在浏览器中实现JS上传,而不暴露您的私人凭据。但是,它确实需要一些服务器端逻辑
请参见此处的答案:我认为更好的方法是将其存储在~/.aws/credentials中。您可以通过创建文件或使用cli命令使用aws configure来完成此操作,回答问题后,它将生成此文件:
[default]
aws_access_key_id = THEACCESSKEYHERE
aws_secret_access_key = THESECRETACCESSKEYHERE
和~/.aws/config:
[default]
output = json (or whatever you prefer here)
region = us-east-1 (or whatever region you are using)
这可以在不必为您需要的AWS的每个命令或调用手动添加它的情况下工作。您在javascript中添加了什么,以便从.AWS/credentials文件加载它们?@Dtor
console.log(process.env.AWS\u secret\u access\u key)
AWS不包含很多公共身份验证/授权信息吗?(参见CognitoSDK示例)。我的理解是,如果我错了,请纠正我,授权可以基于每个身份,并且为附加到IAM角色的登录生成会话密钥,并且系统“足够安全”,因为这些密钥通过HTTPS传递、锁定到域并过期。而且。。可以开启完美的前向保密功能。因此,身份访问密钥
可以来自身份池登录,而不必是bucket的实际管理员访问密钥
。有意义吗?对于仍然访问此站点的任何人,accessKeyId
和secretaccesskey
都是不推荐的。我选择使用这种方法: