Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Note] Firebase api키에 대한 참고 사항 #133

Open
saseungmin opened this issue Jan 2, 2021 · 0 comments
Open

[Note] Firebase api키에 대한 참고 사항 #133

saseungmin opened this issue Jan 2, 2021 · 0 comments
Labels
Note 참고 사항

Comments

@saseungmin
Copy link
Collaborator

saseungmin commented Jan 2, 2021

📌 Firebase api키에 대한 참고 사항

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 키는 코드 또는 체크인 된 구성 파일에 포함해도 괜찮습니다.

image

  • 이런 이유로 .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를 사용해서 로컬에서 개발서버로 실행해도 다음과 같이 제한이 걸리게 된다.

image

  • 그렇기 때문에 개발 서버만을 위한 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 파일로 저장한다.

🤔 참고 자료

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Note 참고 사항
Projects
None yet
Development

No branches or pull requests

1 participant