我一直在策略示例中看到这个,我不知道是什么
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
这是否意味着用户必须添加具有" bucket-ather-full-control"的标题" s3:x-amz-acl"?这是执行实际的ACL还是任意的?可以是任何标题和字符串,还是S3:X-AMZ-ACL和Bucket所有者-Full-Control?
此策略摘要要求使用标题x-amz-acl
(不敏感)的cans ACL的规范,并带有值bucket-owner-full-control
。
通常使用对此条件的约束来确保对象的所有者(始终是上传用户,不一定是存储桶的所有者)不能创建一个对象,该对象无法读取("完全控制"是不幸的错误称呼,因为存储桶所有者已经可以删除异物,尽管如此,但不能进一步将权限委派给对象的权限)。
但不是任意的。
特别是:s3:x-amz-acl
是S3特定的IAM策略条件密钥,恰好与其匹配的标题完全相同。
这不是任意的标头匹配,即使有时这样的功能可能很方便。大多数其他HTTP标头不受政策条件的约束,您不能使用,例如s3:x-random-http-header
条件。
可以使用不使用HTTPS的请求,而aws:UserAgent
则有一些全局条件键,而CC_6则可以根据HTTP User-Agent
标头进行评估,但请注意,不应使用此记录的警告。为了防止未经授权的各方提出直接的AWS请求" ,因为用户代理很容易锻造。否则,没有很多选择允许/拒绝与标题相关的请求。
与条件密钥不同,值字符串bucket-owner-full-control
实际上没有在策略中验证,因为它只是字符串,但是如果您不指定有效的值,它将永远不会匹配。
根据此文档,bucketownerfullcontrol的目的如下:
指定授予存储桶的所有者许可。存储桶的所有者不一定与对象的所有者相同。
主要用例是当用户A将对象放入用户B拥有的存储桶中时,这定义了存储桶所有者的权限(用户B)。
只是一个想法,要为患有AWS病的任何人尝试一下。
let awsUploadExp = AWSS3TransferUtilityUploadExpression()
awsUploadExp.setValue("bucket-owner-full-control", forRequestParameter: "x-amz-acl")