API 키는 Firebase 및 Google 서비스와 상호작용할 때 Firebase 프로젝트로 요청을 라우팅하는 데 사용되는 고유 문자열입니다. 이 페이지에서는 API 키에 대한 기본 정보와 Firebase 앱에서 API 키를 사용하고 관리하는 방법에 대한 권장사항을 설명합니다.
API 키 및 Firebase에 대한 일반적인 정보
Firebase용 API 키와 일반적인 API 키의 차이점
API 키가 일반적으로 사용되는 방식과 달리 Firebase 서비스용 API 키는 백엔드 리소스에 대한 액세스를 제어하는 데 사용되지 않습니다. 이 액세스는 Firebase 보안 규칙(리소스에 액세스할 수 있는 사용자 제어) 및 앱 체크(리소스에 액세스할 수 있는 앱 제어)를 통해서만 제어할 수 있습니다.
일반적으로 API 키는 Vault 서비스를 사용하거나 키를 환경 변수로 설정하여 완벽하게 보호해야 합니다. 그러나 Firebase 서비스용 API 키는 코드 또는 체크인된 구성 파일에 포함해도 괜찮습니다.
Firebase 서비스용 API 키를 코드에 포함해도 되지만 API 키에 제한사항을 적용해야 하는 몇 가지 특정한 경우가 있습니다. 예를 들어 이메일/비밀번호 로그인 방법으로 Firebase ML, Firebase 인증을 사용하거나 청구 가능한 Google Cloud API를 사용하는 경우입니다. 이 페이지의 뒷부분에서 이러한 경우에 대해 자세히 알아보세요.
API 키 만들기
Firebase 프로젝트에는 여러 API 키가 있을 수 있지만 각 API 키는 하나의 Firebase 프로젝트에만 연결할 수 있습니다.
다음 위치에서 Firebase 앱과 자동으로 일치하는 API 키도 확인할 수 있습니다. 기본적으로 프로젝트의 모든 동일한 플랫폼(Apple, Android 또는 웹)용 Firebase 앱은 동일한 API 키를 사용합니다.
Firebase Apple 앱 - Firebase 구성 파일 GoogleService-Info.plist의 API_KEY 필드에서 앱의 자동 일치 API 키를 확인하세요.
Firebase Android 앱 - Firebase 구성 파일 google-services.json의 current_key 필드에서 앱의 자동 일치 API 키를 확인하세요.
Firebase 웹 앱 - Firebase 구성 객체의 apiKey 필드에서 앱의 자동 일치 API 키를 확인하세요.
API 키 사용
API 키는 Firebase/Google 서비스와 상호작용할 때 Firebase 프로젝트를 식별하는 데 사용됩니다. 특히 할당량 및 결제를 위해 API 요청을 프로젝트와 연결하는 데 사용됩니다. 또한 공개 데이터에 액세스할 때도 유용합니다.
예를 들어 REST API 호출에 쿼리 매개변수로 API 키 값을 전달하여 API 키를 명시적으로 사용할 수 있습니다. 이 예시에서는 동적 링크의 링크 단축 API에 요청을 보내는 방법을 보여줍니다.
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
앱은 Firebase API를 호출할 때 Firebase 구성 파일/객체에서 프로젝트의 API 키를 자동으로 조회합니다. 그러나 환경 변수를 비롯한 다른 메커니즘을 사용하여 API 키를 설정할 수 있습니다.
API 키에 제한사항 적용(권장)
Firebase 서비스용 API 키를 보안 비밀로 취급할 필요는 없지만, API 키 오용으로부터 프로젝트를 보호하기 위한 추가 조치를 취해야 하는 몇 가지 특정한 경우가 있습니다(아래 참조).
비밀번호 기반 인증 사용 시 할당량 제한
비밀번호 기반 Firebase 인증을 사용 중이며 누군가 API 키를 입수하더라도 Firebase 프로젝트의 데이터베이스 또는 Cloud Storage 데이터가 Firebase 보안 규칙으로 보호되는 한 이러한 데이터에 액세스할 수 없습니다. 그러나 사용자의 API 키를 사용하여 Firebase의 인증 엔드포인트에 액세스하고 프로젝트에 대한 인증 요청을 보낼 수는 있습니다.
누군가 API 키를 오용하여 무차별 대입 공격을 시도할 가능성을 줄이기 위해 identitytoolkit.googleapis.com 엔드포인트의 기본 할당량을 앱의 정상 트래픽 예상치에 맞게 제한할 수 있습니다. 이 할당량을 제한하면 앱 사용자 수가 급증할 경우 할당량을 늘릴 때까지 로그인 오류가 발생할 수 있다는 점에 유의하세요.
Google Cloud Console에서 프로젝트의 API 할당량을 변경할 수 있습니다.
특정 유형의 API에 별도의 제한된 API 키 사용
Firebase 서비스에 사용되는 API 키는 일반적으로 보안 비밀로 취급할 필요가 없지만 수동으로 사용 설정한 Google Cloud API에 대한 액세스 권한을 부여하는 데 사용되는 API 키는 각별히 주의를 기울여야 합니다.
플랫폼에 관계없이 Firebase가 자동으로 사용 설정하지 않은 Google Cloud API를 사용하는 경우(즉, 직접 사용 설정한 경우) 해당 API에 사용할 별도의 제한된 API 키를 만드는 것이 좋습니다. 이것은 API가 청구 가능한 Google Cloud 서비스용일 때 특히 중요합니다.
예를 들어 iOS에서 Firebase ML의 Cloud Vision API를 사용하는 경우 Cloud Vision API에 액세스하는 데만 사용하는 별도의 API 키를 만들어야 합니다.
Firebase API 이외의 API에 별도의 제한된 API 키를 사용하면 필요한 경우 키를 순환하거나 교체할 수 있으며 Firebase 서비스 사용에 지장 없이 API 키에 제한사항을 더 추가할 수 있습니다.
이 섹션을 펼쳐 API별 키 생성 방법 알아보기
이 안내에서는 가짜 API(Super Service API)에 사용할 별도의 제한된 API 키를 만드는 방법을 설명합니다.
1단계: Super Service API에 대한 액세스를 허용하지 않도록 기존 API 키 구성
Google Cloud Console의 사용자 인증 정보 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.
목록에 있는 기존 API 키마다 편집 화면을 엽니다.
API 제한사항 섹션에서 키 제한을 선택한 다음 API 키로 액세스할 모든 API를 목록에 추가합니다. 별도의 API 키를 만드는 API(이 예시에서는 Super Service API)를 포함해서는 안 됩니다.
API 키의 API 제한사항을 구성하면 키로 액세스할 수 있는 API를 명시적으로 선언하게 됩니다. 기본적으로 API 제한사항 섹션에 키 제한 안함이 선택되어 있으면 API 키를 프로젝트에 사용 설정된 모든 API에 액세스하는 데 사용할 수 있습니다.
이제 기존 API 키는 Super Service API에 대한 액세스 권한을 부여하지 않지만 API 제한사항 목록에 추가된 API에서는 각 키가 계속 작동합니다.
2단계: Super Service API에 액세스하기 위한 새 API 키 생성 및 사용
사용자 인증 정보 페이지로 돌아갑니다. 해당 Firebase 프로젝트가 여전히 선택되어 있는지 확인합니다.
사용자 인증 정보 만들기 > API 키를 클릭합니다. 새 API 키를 기록한 후 키 제한을 클릭합니다.
API 제한사항 섹션에서 키 제한을 선택한 후 목록에 Super Service API만 추가합니다.
이 새로운 API 키는 Super Service API에 대한 액세스 권한만 부여합니다.
새 API 키를 사용하도록 앱과 서비스를 구성합니다.
환경별 API 키 사용(권장)
스테이징 및 프로덕션과 같은 환경별로 Firebase 프로젝트를 설정하는 경우 각 앱 인스턴스가 해당하는 Firebase 프로젝트와 상호작용해야 합니다. 예를 들어 스테이징 앱 인스턴스는 프로덕션 Firebase 프로젝트와 통신해서는 안 됩니다. 즉, 스테이징 앱은 스테이징 Firebase 프로젝트와 관련된 API 키를 사용해야 합니다.
코드 변경사항을 개발 환경에서 스테이징, 프로덕션 환경으로 승격할 때 발생하는 문제를 줄이려면 API 키를 코드 자체에 포함하는 대신 환경 변수로 설정하거나 구성 파일에 포함합니다.
개발용 Firebase 로컬 에뮬레이터 도구 모음을 Firebase ML과 함께 사용하는 경우 디버그 전용 API 키를 만들고 사용해야 합니다. 이러한 종류의 키를 만드는 방법은 Firebase ML 문서를 참조하세요.
FAQ
Firebase 앱과 연결된 API 키를 어떻게 결정할 수 있나요?
다음 옵션 중 하나를 사용하여 Firebase 앱과 연결된 API 키를 결정할 수 있습니다.
이 keyString은 앱의 구성 아티팩트(Apple | Android |웹)에서 찾을 수 있는 것과 동일한 값입니다.
Firebase 구성 파일/객체에서 동일한 Firebase 앱에 2개의 API 키가 나열될 수 있나요?
Firebase Apple 앱 - 각 앱에는 자체 구성 파일이 있으며 API 키가 하나만 나열될 수 있습니다.
Firebase Android 앱 - Firebase 프로젝트의 모든 Android 앱은 동일한 구성 파일에 나열되고 각 앱에는 API 키가 하나만 나열될 수 있습니다. 그러나 이 구성 파일의 각 앱에는 서로 다른 키가 나열될 수 있습니다.
Firebase 웹 앱 - 각 앱에는 자체 구성 객체가 있으며 API 키가 하나만 나열될 수 있습니다.
하지만 앱 하나에 여러 API 키를 사용할 수는 있습니다. 앱이 이러한 다른 API 키에 액세스할 수 있는 메커니즘을 제공해야 합니다(예: 환경 변수를 통해 액세스하는 방법). 다른 API 키에 액세스하는 메커니즘은 Firebase 구성 파일/객체에 나열되는 API 키에 종속될 수는 없습니다.
Firebase는 Firebase 구성 파일/객체 등에서 특정 앱과 일치하는 API 키를 어떻게 알 수 있나요?
Firebase는 일치하는 제한된 키를 찾지 못한 경우 구성 파일/객체에 iOS key(Apple 앱), Android key(Android 앱), Browser key(웹 앱)를 나열합니다(이러한 키가 존재하며 해당 앱과 일치하지 못하게 하는 '애플리케이션 제한사항'이 없다고 가정).
Firebase 구성 파일/객체에서 API 키와 필드를 직접 삭제할 수 있나요?
예. 구성 파일/객체에서 API 키를 직접 삭제할 수 있습니다. 하지만 앱에서 API 키에 액세스할 수 있는 다른 메커니즘을 제공해야 합니다(예: 환경 변수를 통해 액세스하는 방법). 그렇지 않으면 Firebase 서비스에 대한 모든 호출이 실패합니다.