Storage 安全规则使用入门

在正常的应用中,开发者必须构建和维护多台服务器,这些服务器用来执行身份验证、授权和数据验证等任务,以及开发者的业务逻辑。使用 Cloud Storage for Firebase 的应用可以借助 Firebase 身份验证和 Cloud Storage 的 Firebase 安全规则来实现无服务器的身份验证、授权和数据验证。

通过使用 Cloud Storage 和存储安全规则,您您可以集中精力专心打造卓越的用户体验,无需管理基础架构或编写复杂的服务器端身份验证和授权代码!

概览

存储安全规则用于确定哪些人对 Cloud Storage 中存储的文件拥有读取和写入权限,也可用于确定文件的层次结构以及文件中包含的元数据。基本的规则类型为 allow 规则,该规则允许在满足选择性指定的条件时执行 readwrite 操作。下面是一些规则示例:

// Rules can optionally specify a condition
allow write: if <condition>;

规则应匹配 (match) 表示 Cloud Storage 引用的文件路径。规则可以匹配 (match) 一个或多个文件路径,并且可以有多条规则匹配 (match) 指定 request 中的文件路径:

// Rules match specific paths
match /images/profilePhoto.png {
  allow write: if <condition>;
}

match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

规则评估所依据的上下文也可通过 requestresource 对象获得,它们可以提供身份验证上下文 (request.auth) 和现有对象的大小 (resource.size) 等信息。

// Rules can specify conditions that consider the request context
match /images/profilePhoto.png {
  allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
}

如需详细了解 Storage 安全规则,请参阅保护文件部分。

示例规则

存储安全规则必须先指定 service(本例中为 firebase.storage)和 Cloud Storage 存储分区(通过 match /b/{bucket}/o),它们将被用作评估规则时的依据。默认规则需要 Firebase 身份验证,不过,下方的示例中包含一些采用不同访问权限控制的其他常用规则。

默认

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

公开

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

用户

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

不公开

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS APIs.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

在开发期间,您可以使用公开规则代替默认规则,将您的文件设置为可公开读写。这对于原型设计非常有用,因为您不需要设置 Firebase 身份验证即可开始此项工作。不过,由于 Cloud Storage 与您的默认 Google App 引擎应用共用存储分区,因此,此规则也会将该应用所用的所有数据设为公开。

用户规则允许您向每个已经过身份验证的用户提供单独的个人文件存储。您也可以使用不公开规则来完全锁定您的文件,不过请注意,如果您使用此类规则,您的用户将无法通过 Cloud Storage 读取或写入任何内容。通过您的 Google App Engine 应用或 GCS API 访问文件的用户可能不会受到影响。

修改规则

Cloud Storage 提供了一种简便的方式,让您可以通过 Firebase 控制台的“Storage”(存储)部分中的规则标签修改 Storage 安全规则。在规则标签中,您可以快速轻松地查看和修改您的当前规则。点击发布或保存文件 (ctrl/cmd + s) 即可部署这些规则。部署后,规则将立即上传到 Cloud Storage 服务器,不过最多可能需要五分钟才能生效。

Firebase CLI 也可用于部署规则。如果您在运行 firebase init 时选择 Storage,则 CLI 会在您的项目目录中创建一个包含默认规则副本的 storage.rules 文件。您可以使用 firebase deploy 命令部署这些规则。如果您的项目中有多个存储分区,则可以使用部署目标从同一项目文件夹中一次将规则部署到所有存储分区。

您可以参阅保障文件安全部分,详细了解基于文件的安全机制的工作原理;也可以参阅用户安全性部分,了解基于用户的安全机制。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面