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

次のステップ