我一直在存储桶策略示例中看到这一点,我不知道这是什么
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
这是否意味着用户必须添加具有值“ bucket-owner-full-control”的标头“ s3:x-amz-acl”?这是强制执行实际的ACL还是任意的?可以是任何标头和字符串,还是s3:x-amz-acl和bucket-owner-full-control有意义?
答案 0 :(得分:1)
此策略代码段要求请求包含标头x-amz-acl
(不区分大小写)的罐头ACL规范,值为bucket-owner-full-control
。
对此条件的约束通常用于确保对象的所有者(始终是上载用户,不一定是存储桶的所有者)无法创建存储桶所有者无法读取的对象(不幸的是,“完全控制”是一个错误的名词,因为存储桶拥有者已经可以删除异物,尽管如此,它无法进一步委派该对象的权限。
但这不是任意的。
具体来说:s3:x-amz-acl
是一个S3-specific IAM policy condition key,恰好与它匹配的标题完全相同。
这不是任意的头匹配项,即使有时这种功能可能很方便。大多数其他HTTP标头不受政策条件的限制,例如,您不能使用s3:x-random-http-header
条件。
有global condition keys这样的aws:SecureTransport
可以用来拒绝未使用HTTPS的请求,还有aws:UserAgent
可以根据HTTP User-Agent
标头进行评估,但是请注意已记录的警告,该“不应用于防止未经授权的方发出直接的AWS请求” ,因为它很容易被用户代理伪造。否则,没有太多选项允许/拒绝与标头相关的请求。
与条件键不同,值字符串bucket-owner-full-control
实际上没有在策略中进行验证,因为它只是一个字符串,但是如果您不指定有效值,则它将根本不匹配。
答案 1 :(得分:0)
根据this documentation,BucketOwnerFullControl的用途如下:
指定为存储桶的所有者授予Permission.FullControl。存储桶的所有者不必与对象的所有者相同。
主要用途是用户A将对象放入用户B拥有的存储桶中,并定义了存储桶所有者(用户B)的权限。