Cloud Storage 用の Firebase セキュリティ ルールを理解する

これまで、セキュリティはアプリ開発において最も複雑な部分の 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 StorageFirebase Security Rules は、ユーザーベースのセキュリティのために Firebase Authentication と連携します。ユーザーが Firebase Authentication で認証されると、Cloud Storage Security Rulesrequest.auth 変数が、そのユーザーの一意の ID(request.auth.uid)とトークン内の他のすべてのユーザー情報(request.auth.token)を含むオブジェクトになります。ユーザーが認証されていない場合、request.authnull になります。これにより、データアクセスをユーザー単位で安全に制御できます。詳しくは、認証のセクションをご覧ください。

承認

ユーザーの識別はセキュリティの一部にすぎません。ユーザーが誰なのか把握できたら、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 は、ファイル名とパスの検証、contentTypesize などのファイル メタデータ プロパティの検証といったデータ検証にも使用できます。

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/.*');
    }
  }
}

次のステップ