Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中从EC2获取凭据_Javascript_Amazon Web Services_Amazon S3 - Fatal编程技术网

在javascript中从EC2获取凭据

在javascript中从EC2获取凭据,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我已经实现了一个javascript函数,它从ajax获取AWS凭据并将文件上传到s3。 现在,我希望避免从ajax获取凭据,而从ec2检索凭据。 代码如下: function upload_file(entity_key_arg){ var accessKeyId,secretAccessKey,s3region,Bucket,link_to_file; $.ajax({ async : true, 'type' : "POST",

我已经实现了一个javascript函数,它从ajax获取AWS凭据并将文件上传到s3。 现在,我希望避免从ajax获取凭据,而从ec2检索凭据。 代码如下:

function upload_file(entity_key_arg){
    var accessKeyId,secretAccessKey,s3region,Bucket,link_to_file;
    $.ajax({
        async : true,
        'type' : "POST",
        'global' : false,
        'dataType' : 'json',
        'url' : getUrl('getConfigFile'),
        'data' : {
            'token' : sessionStorage.getItem("token")
        },
        'success' : function(data) {
            if(data.msg == "Error"){
                throw_to_login_page();
            }
            var ssToken = data.data.ssToken;
            accessKeyId = data.data.S3AccessKey;
            secretAccessKey = data.data.secretAccessKey;
            s3region = data.data.S3Region;
            link_to_file = data.data.link_to_file;
            Bucket = data.data.Bucket;
            AWS.config.update({
                accessKeyId: accessKeyId,
                secretAccessKey: secretAccessKey,
                region: s3region
            });
            //AWS.Credentials(sessionToken = ssToken);
            var s3 = new AWS.S3();
              var file = document.getElementById('file_select').files[0];
              if (file == null) {
                return alert('Please choose a file to upload first.');
              }
              if(file.size >= 1024 * 1024 * 5){
                  alert("The Maximum file size is 5MB")
              }
              else{
                  var file_description = $("#attach_file_description_field").val(); 
                  var file_name_from_input = $("#file_name_field").val();   
                  file_type = file.name.split(".")[file.name.split(".").length-1];
                  var fileName = data.data.client_key+"/Files/"+entity_key_arg+"_"+file_name_from_input+"."+file_type;
                  var link_to_file = link_to_file + fileName

                  var params = {
                    Bucket: Bucket,
                    Key: fileName,
                    Body: file,
                    ACL: 'public-read'
                  };

                  s3.upload(params, function(err, data) {
                    if (err) {
                      return alert('There was an error uploading your photo: ', err.message);
                    }
                    else{
                        $("#add_file_modal").css("display","none");
                        $.post(getUrl('insert_file'),
                        {   
                            'token' : sessionStorage.getItem("token"),
                            'entity_key': entity_key_arg, 
                            'entity_type': new RegExp("ALR").test(entity_key_arg) || new RegExp("MAN").test(entity_key_arg)? "ALERT":"CUST",
                            'file_path': link_to_file,
                            'file_name': $("#file_name_field").val(),
                            'file_desc': $("#attach_file_description_field").val()
                        },function(ans){
                            if(ans.msg == "Error"){
                                throw_to_login_page();
                            }
                            get_attachments(entity_key_arg);
                            populate_audit_table(entity_key_arg);
                        });
                    }
                  });
              }
            }
        }
    ); 
}
我已经为aws创建了一个完全访问s3的IAM角色,并将其连接到ec2。 上面的JS函数是web应用程序的一部分,它使用tomcat部署在ec2内部。CORS也是可以的,但是有了这些,一旦我在我的函数中注释了凭证部分,我就不能上传文件了

/*AWS.config.update({
            accessKeyId: accessKeyId,
            secretAccessKey: secretAccessKey,
            region: s3region
        });*/
我一直被拒绝访问。 当我尝试通过CLI将文件从ec2上传到s3时,我成功了,并且在需要的地方没有凭据,因此附加到ec2的IAM角色可以访问s3

对部署在机器内部的js文件的访问被拒绝的原因可能是什么?我如何调试这个?
(CORS已完全打开..)这真是令人沮丧。

当您使用cli上载时,您是否正在执行与
ACL:“公共读取”相当的cli操作?具体来说,
--acl public read
?提供该参数需要更多的权限,而不仅仅是上载具有默认ACL的对象。My EC2的inbounds规则几乎可以使用并启用所有类型:http、https tcp和相关端口,甚至ssh。这与此无关。S3有两种不同的权限与所讨论的操作相关,可以有权限上载对象,但不能设置其ACL。如果在命令中包含
--acl public read
,请验证aws cli命令是否有效。完成。也适用于CLI上载命令中的--acl public read可能会出现什么问题?