[Note] Firebase api키에 대한 참고 사항
saseungmin opened this issue · 0 comments
saseungmin commented
📌 Firebase api키에 대한 참고 사항
- 정리해놓은 블로그 참고
- 이전에는 아래와 같이 Firebase의 api key를
.env로 관리하였다.
FIREBASE_API_KEY= "your api-key"
FIREBASE_AUTH_DOMAIN = "your auth-domain"
FIREBASE_DATA_BASEURL = "your data-baseurl"
FIREBASE_PROJECT_ID = "your project-id"
FIREBASE_STORAGE_BUCKET = "your storage-bucket"
FIREBASE_MESSAGING_SENDER_ID = "your messaging-sender-id"
FIREBASE_APP_ID = "your app-id"
FIREBASE_MEASUREMENT_ID = "your measurement-id"
- pull request 단계에서 firebase api test를 통과하기 위해서 firebase의 api key가 필요했다.
- 테스트를 할때는 api호출되는 부분을 mocking해서 할려고 했으나, 쉽게 진행하기 힘들었다.
🤔 Firebase apiKey를 공개하는 것이 안전합니까?
- 찾아보다가 firebase의 api key에 관해서 스택 오버플로우에 Is it safe to expose Firebase apiKey to the public? 라는 제목으로 올라온 질문을 확인할 수 있었다. (링크 참고)
- 거기에 Google의 Firebase 엔지니어분께서 답변을 해주셨다.
- 내용은 대충 다음과 같았다.
apiKey는 Google 서버에서 Firebase 프로젝트만 식별합니다. 누군가가 그것을 아는 것은 보안 위험이 아닙니다. 사실, 그들이 당신의 Firebase 프로젝트와 상호 작용하기 위해서는 그들이 그것을 알아야합니다. 이 동일한 구성 데이터는 Firebase를 백엔드로 사용하는 모든 iOS 및 Android 앱에도 포함됩니다.
- 답변은 공개를 해도 상관없다. 보안에 문제가 되지 않는다. 라는 답변이였지만, 무려 4년 전 질문이였고 그래도 API Key인데 라는 의심이 있어서 더 찾아보았다.
- 그래서 공식 문서에서 그 답을 찾을 수 있게 되었다. (링크 참고) 내용은 다음과 같다.
Firebase 용 API 키는 일반적인 API 키와 다릅니다. API 키가 일반적으로 사용되는 방식과 달리 Firebase 서비스 용 API 키는 백엔드 리소스에 대한 액세스를 제어하는 데 사용되지 않습니다. Firebase 보안 규칙으로만 수행할 수 있습니다. 일반적으로 API 키를 신속하게 보호해야합니다 (예 : 저장소 서비스를 사용하거나 키를 환경 변수로 설정). 그러나 Firebase 서비스 용 API 키는 코드 또는 체크인 된 구성 파일에 포함해도 괜찮습니다.
- 이런 이유로
.env를 사용하여 관리했던 방법을 현재와 같이 변경하였다. - 그리고 마지막 말에 빨간색 표시로 경고가 있는데 Firebase 보안 규칙를 설정하여 보호하라는 말이 있다.
API 키를 제한하거나 가리지 않고 Firebase 보안 규칙 을 사용하여 데이터베이스 및 저장소 데이터를 보호 하세요.
- 이 부분에 대해서 인지를 하고 공식 문서를 참조하여
rules를 다음과 같이 추가해줬다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /groups/{group} {
allow read: if true; // 읽기는 전부다
allow write: if request.auth.uid != null; // 쓰기는 인증된 사용자만 가능
}
}
}
📌 Firebase api키에 대한 전략 변경(Update 2021-01-08)
- Google APIs에서 이 프로젝트에 대한 사용자 인증 정보 탭의 API 키 목록에서 브라우저 키의 권한을 변경해주었다.
- 이 브라우저 키에서 애플리케이션 제한사항에 HTTP 리퍼러(웹사이트) 옵션을 선택한 뒤 웹사이트 제한사항에 배포되어있는 주소만 허용하게 하면 다른 주소에서는 해당 API키를 사용할 수 없으며, Firebase 프로젝트에서 글을 작성하거나, 로그인, 회원가입등을 할 수 없게 된다.
- 다만, localhost를 사용해서 로컬에서 개발서버로 실행해도 다음과 같이 제한이 걸리게 된다.
- 그렇기 때문에 개발 서버만을 위한 firebase 프로젝트를 새로 만들고 firebase 구성 파일을 변경한다.
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import devConfig from '../../config/dev';
import prodConfig from '../../config/prod';
const config = process.env.NODE_ENV === 'production'
? prodConfig
: devConfig;
firebase.initializeApp(config);
export const fireStore = firebase.firestore;
export const db = firebase.firestore();
export const auth = firebase.auth();- 그리고 프로덕션 레벨의 배포를 위한 firebase api 키는 안전하게
.env파일로 저장한다.

