具有“bucket-owner-full-control”值的 s3:x-amz-acl 是什么意思?

red*_*888 7 amazon-s3 amazon-web-services amazon-iam

我一直在存储桶策略示例中看到这一点,但我不知道它是什么

"Condition": {
    "StringEquals": {
        "s3:x-amz-acl": "bucket-owner-full-control"
    }
Run Code Online (Sandbox Code Playgroud)

这是否意味着用户必须添加具有值“bucket-owner-full-control”的标题“s3:x-amz-acl”?这是强制执行实际的 acl 还是任意的?它可以是任何标头和字符串,还是对 s3:x-amz-acl 和 bucket-owner-full-control 有重要意义?

Mic*_*bot 8

此策略片段要求请求包含固定 ACL 的规范,使用标头x-amz-acl(不区分大小写),值为bucket-owner-full-control

对此条件的约束通常用于确保对象的所有者(始终是上传用户,不一定是存储桶的所有者)无法创建存储桶所有者无法读取的对象(“完全控制" 是一个不幸的用词不当,因为存储桶所有者已经可以删除外部对象,尽管如此不能进一步委派对该对象的权限)。

但这不是随意的。

具体来说:s3:x-amz-acl特定S3 的 IAM 策略条件键,其名称恰好与其匹配的标头完全相同。

它不是任意的标头匹配,即使这样的功能有时可能很方便。大多数其他 HTTP 标头不受策略条件的约束,并且您不能使用,例如s3:x-random-http-header条件。

有像 这样的全局条件键aws:SecureTransport可用于拒绝不使用 HTTPS 的请求,并aws:UserAgent根据 HTTPUser-Agent标头进行评估,但请注意记录在案的警告,“不应使用此键来防止未经授权的各方直接发出 AWS 请求"因为它很容易被用户代理伪造。否则,允许/拒绝与标头相关的请求的选项并不多。

与条件键不同,值字符串bucket-owner-full-control实际上并未在策略中进行验证,因为它只是一个字符串,但如果您不指定有效值,它将永远不会匹配。