使用AWS SDK for JavaScript访问AWS S3

时间:2013-11-21 04:16:51

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

现在我正在使用javascript SDK来访问我的s3存储桶,它工作正常,但我直接在javascript中硬编码了我的所有凭据,但在SDK中他们说你可以将它们存储在AWS.config对象中我不知道该怎么做此外,在线资源不提供信息,所以有人可以让我知道如何做到这一点或任何其他更好的方式来做这个而不是硬编码凭证?

    <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>

3 个答案:

答案 0 :(得分:1)

我认为更好的方法是将其存储在〜/ .aws /凭证中。您可以通过创建文件或使用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。

答案 1 :(得分:0)

我认为浏览器不支持此功能。 node.js完全支持AWS Javascript SDK。

阅读本文:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS.html

这是有道理的,因为没有人愿意公开公开私人身份验证/授权信息。

如果你想得到想象,你可能会使用来自另一台服务器(http://en.wikipedia.org/wiki/JSONP)的JSONP传递凭证,并限制使用防火墙访问某些客户端,但它可能会变得有点混乱。


另一方面,为什么不公开公开S3存储桶以进行读取访问,因为浏览器上的javascript仍然是公共的?

答案 2 :(得分:0)

有一种方法可以在浏览器中实现JS上传,而不会泄露您的私人凭据。但它需要一些服务器端逻辑。

请在此处查看答案:S3 upload directly in JavaScript