帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

访问控制

QingStor 的访问控制方式有三种:

  • Bucket Policy (存储空间策略)
  • Bucket ACL (存储空间访问控制列表)
  • Bucket CORS (存储空间的跨源资源共享策略)

存储空间策略(Bucket Policy)

通过 Bucket Policy,可以向其他青云 QingCloud 用户赋予相应存储空间及其对象的访问 权限, 其语义覆盖 API ACL, 及Resource ACL。Bucket Policy 对于 QingStor 资源的访 问控制粒度介于 Bucket ACL 和 Object ACL(对象访问控制列表,即将推出)的一种访问控 制方式。Bucket Policy 可以实现Bucket ACL 和 Object ACL 所不能实现的一些功能, 比如,防盗链。

相关API

设置 Bucket Policy PUT Bucket Policy

获取 Bucket Policy GET Bucket Policy

删除 Bucket Policy DELETE Bucket Policy

存储空间访问控制列表(Bucket ACL)

Bucket ACL 对于 QingStor 资源的访问控制粒度比起 Bucket Policy 和 Object ACL 要 更大一些,使用起来也更加简单。其所授予被授权者的权限列表仅可为 “READ” (可读), “WRITE” (可写), 或 “FULL_CONTROL” (可读写)。

相关API

设置 Bucket ACL PUT Bucket ACL

获取 Bucket ACL GET Bucket ACL

存储空间的跨源资源共享策略(Bucket CORS)

当您利用 JavaScript AJAX 向 QingStor 发起的请求属于跨源请求时, Bucket CORS 可以 对 QingStor 下的存储空间 (Bucket) 进行 CORS 规则的配置,从而可以创建直接与 QingStor 进行富交互的 web application,以及限制源对您在 QingStor 中资源的访问。

相关API

获取 Bucket CORS GET Bucket CORS

删除 Bucket CORS DELETE Bucket CORS

发起 Object OPTIONS OPTIONS Object

如何授权存储空间或对象操作的请求

Bucket Policy 的优先级高于 Bucket ACL。当某个请求被 Bucket Policy 允许(“allow”) 或拒绝(“deny”)时 ,Bucket ACL 将被忽略; 当该请求未被 Bucket Policy 匹配时, 服务端将继续检查 Bucket ACL 以确定该请求是否该被执行。

假设 Bucket “mybucket” 为被授权者 “user-henry” 所设置的 Bucket ACL 和 Bucket Policy 如下:

"ACL"{"user-henry": "FULL_CONTROL"}
"bucket_policy": {
    "statement": [
        {
            "id": "deny user-henry deleting object from this bucket",
            "user": "user-henry",
            "action": "delete_object",
            "effect": "deny",
            "resource": ["mybucket/*"]
        }
    ],
}

即使用户 user-henry 拥有对 “mubucket” 的可读写权,但因为 Bucket Policy 禁止其 删除 “mybucket” 下的所有 Object, 所以 user-henry 对 “mybucket” 发起的 Object 删除操作都将被拒绝。

Bucket Policy的应用

可以利用 Bucket Policy 中的 condition 实现一些条件访问控制,比如防盗链。

condition的详细介绍请参见 Bucket Policy Condition

防盗链白名单示例

注解

此防盗链规则生效的前提为 Bucket ACL 中未设置公开的读权限。

"bucket_policy": {
    "statement": [
        {
            "id": "allow example1.com to get object from this bucket",
            "user": "*",
            "action": "get_object",
            "effect": "allow",
            "resource": ["mybucket/*"],
            "condition": {
                "string_like": {"Referer": "*.example1.com"},
                "string_not_like": {"Referer": "*.service.example1.com"}
            }
        }
    ]
}

其中 *.example1.com 为域名白名单。

防盗链黑名单示例

"bucket_policy": {
    "statement": [
        {
            "id": "deny example2.com getting object",
            "user": "*",
            "action": "get_object",
            "effect": "deny",
            "resource": ["mybucket/*"],
            "condition": {
                "string_like": {"Referer": "*.example2.com"}
            }
        }
    ]
}

其中 "*.example2.com 为域名黑名单。