В типичных приложениях разработчикам приходится создавать и обслуживать множество серверов, которые выполняют аутентификацию, авторизацию и проверку данных, а также бизнес-логику разработчика. Приложения, использующие Cloud Storage for Firebase используют Firebase Authentication и Firebase Security Rules для Cloud Storage для обработки бессерверной аутентификации, авторизации и проверки данных.
Использование Cloud Storage и Cloud Storage Security Rules означает, что вы можете сосредоточиться на создании удобного пользовательского опыта без необходимости управлять инфраструктурой или писать сложный код аутентификации и авторизации на стороне сервера!
Обзор
Cloud Storage Security Rules используются для определения того, кто имеет доступ на чтение и запись к файлам, хранящимся в Cloud Storage , а также как структурированы файлы и какие метаданные они содержат. Базовым типом правила является правило allow , которое разрешает операции read и write , если выполняется необязательно заданное условие. Некоторые примеры правил:
// 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>; }
Контекст оценки правила также предоставляется через объекты request и resource , которые предоставляют такую информацию, как контекст аутентификации ( 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; }
Узнайте больше о Cloud Storage Security Rules в разделе «Защита файлов» .
Примеры правил
Cloud Storage Security Rules должны сначала указать service (в нашем случае firebase.storage ) и сегмент Cloud Storage (через match /b/{bucket}/o ), относительно которого оцениваются правила. Правила по умолчанию требуют Firebase Authentication , но вот несколько примеров других общих правил с другим контролем доступа.
По умолчанию
// Only authenticated users can read or write to the folder
service firebase.storage {
match /b/{bucket}/o {
match /someFolder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Общественный
// Anyone can read or write to the folder, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
service firebase.storage {
match /b/{bucket}/o {
match /someFolder/{fileName} {
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>/file.txt"
match /user/{userId}/{fileName} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Частный
// Access to files through Cloud Storage for Firebase is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
}
}
}
Во время разработки вы можете использовать общедоступные правила вместо правил по умолчанию, чтобы сделать ваши файлы общедоступными для чтения и записи. Это очень полезно для прототипирования, так как вы можете начать работу без настройки Firebase Authentication . Однако, поскольку Cloud Storage использует общий сегмент с вашим приложением App Engine по умолчанию, это правило также делает общедоступными любые данные, используемые этим приложением.
Пользовательские правила позволяют вам предоставить каждому из ваших аутентифицированных пользователей собственное личное хранилище файлов. Вы также можете полностью заблокировать свои файлы, используя частные правила, но имейте в виду, что ваши пользователи не смогут ничего читать или записывать через Cloud Storage с помощью этих правил. Пользователи, получающие доступ к файлам из вашего приложения App Engine или API Google Cloud Storage могут по-прежнему иметь доступ.
Редактировать правила
Cloud Storage предоставляет простой способ редактировать Cloud Storage Security Rules на вкладке «Правила» в разделе «Хранилище» консоли Firebase . На вкладке «Правила» вы можете быстро и легко просматривать и редактировать текущие правила. Эти правила развертываются нажатием кнопки «Опубликовать» или сохранением файла ( ctrl/cmd + s ). Правила немедленно загружаются на серверы Cloud Storage , но для их вступления в силу может потребоваться до пяти минут.
Интерфейс командной строки Firebase также можно использовать для развертывания правил. Если вы выберете Storage при запуске firebase init , в каталоге вашего проекта будет создан файл storage.rules с копией правил по умолчанию . Вы можете развернуть эти правила с помощью команды firebase deploy . Если в вашем проекте есть несколько сегментов, вы можете использовать цели развертывания для развертывания правил во всех сегментах одновременно из одной папки проекта.
Узнайте больше о том, как работает безопасность на основе файлов, в разделе «Защита файлов» или разберитесь с безопасностью на основе пользователей в разделе «Безопасность пользователей» .