Cloud Storage용 Firebase 보안 규칙 이해

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

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

Firebase 실시간 데이터베이스에도 Firebase 실시간 데이터베이스 보안 규칙이라는 유사한 기능이 있습니다.

인증

사용자가 누구인지 파악하는 것은 애플리케이션 개발의 중요한 부분이며 Firebase 인증은 사용하기 쉽고 안전하며 클라이언트 측에서만 구현하면 되는 인증 솔루션입니다. Cloud Storage용 Firebase 보안 규칙은 Firebase 인증과 연동하여 사용자 기반 보안을 구현합니다. 사용자가 Firebase 인증으로 인증되면 Cloud Storage 보안 규칙의 request.auth 변수가 사용자의 고유 ID(request.auth.uid) 및 기타 모든 사용자 정보를 토큰(request.auth.token)에 포함하는 객체가 됩니다. 사용자가 인증되지 않은 경우 request.authnull입니다. 이를 통해 데이터 액세스를 사용자별로 안전하게 제어할 수 있습니다. 자세한 내용은 인증 섹션을 참조하세요.

승인

사용자 식별은 보안의 일부에 불과합니다. 사용자가 누구인지 알아냈으면 Cloud Storage의 파일에 대한 액세스를 제어할 방법이 필요합니다.

Cloud Storage를 사용하면 Google 서버에 상주하는 파일별 및 경로별 승인 규칙을 지정하고 앱의 파일에 대한 액세스 권한을 결정할 수 있습니다. 예를 들어 기본 Cloud Storage 보안 규칙은 모든 파일에 대해 read 또는 write 작업을 수행하려면 Firebase 인증을 필요로 합니다.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Firebase Console에서 Firebase 앱을 선택하고 스토리지 섹션의 Rules 탭을 확인하여 규칙을 수정할 수 있습니다.

데이터 검증

Cloud Storage용 Firebase 보안 규칙은 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/.*');
    }
  }
}

다음 단계