Amazon web services 无法在S3中的匿名对象上设置任何ACL
我有一个根AWS帐户拥有的S3存储桶 bucket的一个子目录Amazon web services 无法在S3中的匿名对象上设置任何ACL,amazon-web-services,amazon-s3,acl,Amazon Web Services,Amazon S3,Acl,我有一个根AWS帐户拥有的S3存储桶 bucket的一个子目录uploads向世界开放,即(在bucket级别): 当我以匿名用户身份上传文件时(不提供任何AWS凭据),我确实可以写入uploads目录。但是,IAM用户和父(根)用户都无法对上载的文件应用任何修改,例如重命名或移动,并且无论使用何种界面、AWS控制台或API,都会出现问题 使用POST和参数上载匿名对象 'acl':'bucket owner full control'或者'acl':'public read write' AC
uploads
向世界开放,即(在bucket级别):
当我以匿名用户身份上传文件时(不提供任何AWS凭据),我确实可以写入uploads
目录。但是,IAM用户和父(根)用户都无法对上载的文件应用任何修改,例如重命名或移动,并且无论使用何种界面、AWS控制台或API,都会出现问题
使用POST
和参数上载匿名对象
'acl':'bucket owner full control'
或者'acl':'public read write'
ACL策略(即使在上载参数中明确提及)是否可能对没有所有者的对象(由匿名者上载)没有影响?如果是这样,有没有办法在上传或追溯时更改文件的所有权
上传文件时为什么不考虑ACL策略?
为什么我不能重命名或移动上传的文件?
补充资料 POST请求由名为的cordova插件发出,该插件默认使用
POST
,但如果需要,可以使用PUT
。以下是执行上载的代码:
var upload_options = {
headers: {
'Content-Length': 4900000,
'Connection': 'close',
'acl': 'bucket-owner-full-control'
},
params: {
'key': 'uploads/' + fileName,
'Content-Type': 'image/jpeg'
}
};
var s3 = new FileTransfer();
s3.upload(imageURI, encodeURI("https://<my-bucket>.s3-eu-west-1.amazonaws.com/"), upload_success, upload_fail, upload_options);
var上传\u选项={
标题:{
“内容长度”:4900000,
“连接”:“关闭”,
“acl”:“存储桶所有者完全控制”
},
参数:{
“key”:“uploads/”+文件名,
“内容类型”:“图像/jpeg”
}
};
var s3=新文件传输();
s3.上传(imageURI,encodeURI(“https://.s3-eu-west-1.amazonaws.com/)、上载成功、上载失败、上载选项);
修改策略声明以添加“条件”:{“StringEquals”:{“s3:x-amz-acl”:[“bucket owner full control”]}
您可能会得到答案——您的上载可能会导致acl未设置,这将只允许在设置的地方上传。我刚刚尝试了应用条件,这导致上传被拒绝(AccessDenied)。这意味着POST请求在某种程度上构建得很糟糕。等等,POST
?显示正在进行上传的代码。@Michael sqlbot我刚刚更新了问题。您认为将PUT
与x-amz-acl
一起使用而不是POST
和acl
标题会有帮助吗?同时我也在尝试。只是尝试了强制PUT
方法并使用x-amz-acl
头,我得到了MalformedXML
“您提供的XML格式不正确,或者没有根据我们发布的模式进行验证”。因此,我担心我必须深入研究FileTransfer
的代码,看看它在引擎盖下做了什么。。。
var upload_options = {
headers: {
'Content-Length': 4900000,
'Connection': 'close',
'acl': 'bucket-owner-full-control'
},
params: {
'key': 'uploads/' + fileName,
'Content-Type': 'image/jpeg'
}
};
var s3 = new FileTransfer();
s3.upload(imageURI, encodeURI("https://<my-bucket>.s3-eu-west-1.amazonaws.com/"), upload_success, upload_fail, upload_options);