Cloud Storage용 Firebase 보안 규칙 이해

지금까지 보안은 앱 개발에서 가장 복잡한 부분 중 하나였습니다. 대부분의 애플리케이션에서 개발자는 인증(사용자가 누구인지) 및 승인(사용자가 무엇을 할 수 있는지)을 처리하는 서버를 직접 구축하여 실행해야 합니다. 인증 및 승인은 제품의 성공에 필수적이지만 설정하기가 어렵고 제대로 구현하기란 더욱 어렵습니다.

Firebase Authentication으로 손쉽게 사용자를 인증할 수 있듯이 Cloud StorageFirebase Security Rules로 손쉽게 사용자를 승인하고 요청을 검증할 수 있습니다. Cloud Storage Security Rules를 사용하면 경로 기반 권한을 지정하여 복잡성을 해소할 수 있습니다. Cloud Storage 요청을 특정 사용자에게만 허용하거나 업로드 크기를 제한하는 승인 규칙을 코드 몇 줄만으로 간편하게 작성할 수 있습니다.

Firebase Realtime Database에도 Firebase Realtime Database Security Rules라는 유사한 기능이 있습니다.

인증

사용자가 누구인지 파악하는 것은 애플리케이션 개발의 중요한 부분이며 Firebase Authentication은 사용하기 쉽고 안전하며 클라이언트 측에서만 구현하면 되는 인증 솔루션입니다. Cloud StorageFirebase Security RulesFirebase 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 Console에서 Firebase 앱을 선택하고 스토리지 섹션의 Rules 탭을 확인하여 이러한 규칙을 수정할 수 있습니다.

데이터 검증

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

다음 단계