これまで、セキュリティはアプリ開発において最も複雑な部分の 1 つでした。ほとんどのアプリでは、認証(ユーザーは誰なのか)と承認(ユーザーは何を行えるのか)を処理するサーバーの構築と実行をデベロッパーが行う必要があります。認証と承認は設定が難しく、特に、正確に設定することはとても困難ですが、プロジェクトの成功に欠かせない重要な要素です。
Firebase Authentication によってユーザーの認証が簡単になるように、Cloud Storage 用の Firebase Security Rules によってユーザーの承認とリクエストの検証が簡単になります。Cloud Storage Security Rules では、パスベースの権限を指定できるため、複雑な構造を管理できます。わずか数行のコードで、Cloud Storage リクエストを特定のユーザーに限定する承認ルールや、アップロード サイズを制限する承認ルールを作成できます。
Firebase Realtime Database には、Firebase Realtime Database Security Rules という同様の機能があります。
認証
ユーザーが誰なのかを把握することは、アプリケーション構築の重要な部分です。Firebase Authentication には、簡単に操作でき、しかも安全なクライアント側専用の認証ソリューションがあります。Cloud Storage の Firebase Security Rules は、ユーザーベースのセキュリティのために Firebase Authentication と連携します。ユーザーが Firebase Authentication で認証されると、Cloud Storage Security Rules の request.auth
変数が、そのユーザーの一意の ID(request.auth.uid
)とトークン内の他のすべてのユーザー情報(request.auth.token
)を含むオブジェクトになります。ユーザーが認証されていない場合、request.auth
は null
になります。これにより、データアクセスをユーザー単位で安全に制御できます。詳しくは、認証のセクションをご覧ください。
承認
ユーザーの識別はセキュリティの一部にすぎません。ユーザーが誰なのか把握できたら、Cloud Storage 内のファイルに対するユーザーのアクセス権を制御する方法が必要になります。
Cloud Storage を使用すると、Google のサーバー上にあるファイルやパスごとに認可ルールを指定して、アプリ内のファイルへのアクセスを決定できます。たとえば、デフォルトの Cloud Storage Security Rules では、すべてのファイルに対して read
または write
オペレーションを行うために、常に Firebase Authentication が必要です。
service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
セキュリティ ルールは、Firebase コンソールで Firebase アプリを選択し、[Storage] セクションの [Rules
] タブを表示して編集できます。
データの検証
Cloud Storage 用の Firebase Security Rules は、ファイル名とパスの検証、contentType
や size
などのファイル メタデータ プロパティの検証といったデータ検証にも使用できます。
service firebase.storage { match /b/{bucket}/o { match /images/{imageId} { // Only allow uploads of any image file that's less than 5MB allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }
次のステップ
Cloud Storage バケットのルール作成計画を開始する。
セキュリティ ルールを使用したデータのセキュリティ保護について詳しく学ぶ。