S3:通过访问密钥+ javascript授予对xml列表的访问权限

时间:2016-12-28 12:45:08

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

我有一个javascript代码,它获取s3存储桶的xml列表http://BUCKETNAME.s3.REGION.amazonaws.com/并将其用作播放列表:

    AWS.config=
    { "accessKeyId": "ACCESS KEY",
    "secretAccessKey": "SECRET KEY",
    "region": "REGION" };
    // Create S3 service object
    s3 = new AWS.S3();

    var params = {
    Bucket: 'BUCKET NAME', /* required */
    Delimiter: '',
    EncodingType: 'url',
    Marker: '',
    MaxKeys: 0,
    Prefix: '',
    RequestPayer: 'requester'
    };


    s3.listObjects(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else
    {
        console.log('the list is approved '); // successful response
     // Here is the function that convert the file list in the xml to an array
        var b = document.documentElement;
    b.setAttribute('data-useragent', navigator.userAgent);
    b.setAttribute('data-platform', navigator.platform);
    var radioName;
    var radioTitle;
    var tracklength= 0;
    // setupPlayer function
    function setupPlayer(href,name){
        radioName= href;
        radioTitle= name;

     $.ajax({
            type: "GET",
            url: "http://BUCKETNAME.s3.REGION.amazonaws.com/?prefix=radio/"+radioName+"/",
            dataType: "xml",
            success: function(xml){
                //tracklength=0;
                tracks =[];
                $(xml).find('Contents').each(function(){
                    tracklength=tracklength+1;
                    tracks.push({
                        "track": tracklength,
                        "file" : $(this).find('Key').text()
                    });
                });
                radio(tracks);

            },
            error: function() {
                alert("An error occurred while processing XML file.");
            }
        });
    }
    }

正如您所看到的,在此代码中,我将获取XML文件并添加一个广播名称(即文件夹名称),之后ajax会将此文件夹中的所有文件名保存到数组{{1} }。

如果有Everyone的列表被授予者权限,则此代码可以正常运行。所以这里不需要aws配置。我可以在tracks函数中的else语句中运行代码,它会给我相同的响应。

我想要的是仅授予对此密钥的授权访问权限,以使此功能在没有访问密钥和密钥的情况下不起作用。

因此除了拥有访问密钥和密钥的人之外,没有人可以访问xml列表。

这可能吗?

(这不是完整的代码,但你有了想法,访问存储桶的XML文件并获取密钥将它们保存到数组中。)

1 个答案:

答案 0 :(得分:0)

您应该使用s3.getObject(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property)来获取xml文件而不是$ .ajax调用。