API 키는 Firebase 및 Google 서비스와 상호작용할 때 Firebase 프로젝트로 요청을 라우팅하는 데 사용되는 고유 문자열입니다. 이 페이지에서는 API 키에 대한 기본 정보와 Firebase 앱에서 API 키를 사용하고 관리하는 방법에 대한 권장사항을 설명합니다.
API 키 및 Firebase에 대한 일반적인 정보
Firebase용 API 키와 일반적인 API 키의 차이점
API 키가 일반적으로 사용되는 방식과 달리 Firebase 서비스용 API 키는 백엔드 리소스에 대한 액세스를 제어하는 데 사용되지 않습니다. Firebase Security Rules(리소스에 액세스할 수 있는 최종 사용자 제어) 및 Firebase App Check(리소스에 액세스할 수 있는 앱 제어)를 통해서만 액세스를 제어할 수 있습니다.
일반적으로 API 키는 Vault 서비스를 사용하거나 키를 환경 변수로 설정하여 완벽하게 보호해야 합니다. 그러나 Firebase 서비스용 API 키는 코드 또는 체크인된 구성 파일에 포함해도 괜찮습니다.
Firebase 서비스용 API 키를 코드에 포함해도 되지만 적절한 제한사항과 한도를 검토하고 적용해야 합니다.
API 키 만들기
Firebase 프로젝트에는 여러 API 키가 있을 수 있지만 각 API 키는 하나의 Firebase 프로젝트에만 연결할 수 있습니다.
다음 중 하나를 수행하면 Firebase가 프로젝트의 API 키를 자동으로 생성합니다.
- Firebase 프로젝트 만들기 >
Browser key
자동 생성됨 - Firebase Apple 앱 만들기 >
iOS key
자동 생성됨 - Firebase Android 앱 만들기 >
Android key
자동 생성됨
Google Cloud 콘솔에서 직접 API 키를 만들 수도 있습니다(예: 개발 또는 디버깅용). 이 페이지의 뒷부분에서 이러한 작업이 권장되는 경우에 대해 자세히 알아보세요.
API 키 찾기
Google Cloud 콘솔의 API 및 서비스 > 사용자 인증 정보 패널에서 모든 프로젝트의 API 키를 보고 관리할 수 있습니다.
다음 위치에서 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 키를 명시적으로 사용할 수 있습니다. 이 예시에서는 Dynamic Links 링크 단축 API에 요청을 보내는 방법을 보여줍니다.
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
앱이 모바일/웹 클라이언트에서 제공하는 API 키가 필요한 Firebase API를 호출하면 앱은 Firebase 구성 파일/객체에서 프로젝트의 API 키를 자동으로 조회합니다. 그러나 환경 변수를 포함한 다른 메커니즘을 사용하여 API 키를 앱에 제공할 수 있습니다.
API 키를 검토하고 적절한 제한사항 적용(권장)
Firebase 서비스용 API 키를 보안 비밀로 취급할 필요는 없지만 이 섹션의 설명대로 제한사항과 한도를 검토하고 적용해야 합니다.
Firebase API 키의 허용 목록에 자동으로 추가된 API 검토
Firebase가 프로젝트에 API 키를 만들면 이 키에 'API 제한사항'이 자동으로 추가됩니다. 이 허용 목록에 추가된 API는 클라이언트에서 호출과 함께 API 키를 제공해야 하는 Firebase 관련 API입니다. Firebase 서비스를 사용하는 데 필요한 대부분의 API는 실제로 API 키의 허용 목록에 있을 필요가 없습니다.
Firebase는 모든 Firebase 서비스에 필요한 API를 추가하므로 API 키의 허용 목록에 사용하지 않는 제품의 API가 포함될 수 있습니다. 허용 목록에서 API를 삭제할 수 있지만 Firebase 및 사용 중인 Firebase 서비스에 필요한 API를 삭제하지 않도록 주의해야 합니다(각 서비스/제품의 허용 목록에 있어야 하는 Firebase 관련 API 목록 참조). 그러지 않으면 Firebase 서비스를 호출할 때 오류가 발생합니다.
Authentication 기반 인증 사용 시 할당량 제한
Firebase Authentication 기반 Firebase 인증을 사용하는데 누군가 API 키를 입수한 경우, 해당 데이터가 Firebase Security Rules에 의해 보호되는 한 Firebase 프로젝트의 데이터베이스 또는 Cloud Storage 데이터에 액세스할 수 없습니다. 그러나 사용자의 API 키를 사용하여 Firebase의 인증 엔드포인트에 액세스하고 프로젝트에 대한 인증 요청을 보낼 수 있습니다.
누군가 API 키를 오용하여 무차별 대입 공격을 시도할 가능성을 줄이기 위해 identitytoolkit.googleapis.com
엔드포인트의 기본 할당량을 앱의 정상 트래픽 예상치에 맞게 제한할 수 있습니다. 이 할당량을 제한하면 앱 사용자 수가 급증할 경우 할당량을 늘릴 때까지 로그인 오류가 발생할 수 있다는 점에 유의하세요.
Google Cloud 콘솔에서 프로젝트의 API 할당량을 변경할 수 있습니다.
Firebase 이외의 서비스에 별도의 제한된 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 콘솔의 사용자 인증 정보 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.
목록에 있는 기존 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 Local Emulator Suite를 Firebase ML과 함께 사용하는 경우 디버그 전용 API 키를 만들고 사용해야 합니다. 이러한 종류의 키를 만드는 방법은 Firebase ML 문서를 참조하세요.
FAQ 및 문제 해결
FAQ
Firebase 서비스용 API 키는 기본적으로 제한되나요?
예. 기본적으로 Firebase 관련 API와 함께 사용할 수 있도록 Firebase에서 자동으로 프로비저닝하는 모든 API 키에는 'API 제한사항'이 자동으로 적용됩니다. 이 허용 목록에 있는 Firebase 관련 API 목록을 참조하세요.
이 허용 목록에 추가된 API는 클라이언트 코드에서 Firebase 서비스에 의해 호출되는 API이며 Firebase 프로젝트나 앱을 식별하는 데 API 키가 필요합니다. Firebase 서비스를 사용하는 데 필요한 대부분의 API는 실제로 API 키의 허용 목록에 포함되어 있지 않아도 됩니다.
Firebase는 모든 Firebase 서비스에 필요한 API를 추가하므로 API 키의 허용 목록에 사용하지 않는 제품의 API가 포함될 수 있습니다. 허용 목록에서 API를 삭제할 수 있지만 Firebase 및 사용 중인 Firebase 서비스에 필요한 API를 삭제하지 않도록 주의해야 합니다(각 서비스/제품의 허용 목록에 있어야 하는 Firebase 관련 API 목록 참조). 그러지 않으면 Firebase 서비스를 호출할 때 오류가 발생합니다.
Google Cloud 콘솔의 API 및 서비스 > 사용자 인증 정보 패널에서 모든 API 키와 'API 제한사항'을 볼 수 있습니다.
Firebase에서 이러한 'API 제한사항'을 적용하는 방법에 대한 다음 사항에 유의하세요.
2024년 5월부터 Firebase에서 자동으로 프로비저닝하는 모든 새 API 키는 Firebase 관련 API 목록으로 자동 제한됩니다.
2024년 5월부터 Firebase에서 이전에 자동 프로비저닝한 모든 기존 ALI 키와 제한되지 않은 API 키는 Firebase 관련 API 목록 및 프로젝트에서 현재 사용 설정된 API로 제한됩니다.
Firebase에서 이전에 자동 프로비저닝한 기존 API 키와 이미 제한된 API 키는 변경되지 않았습니다.
Firebase에서 자동으로 프로비저닝하지 않은 기존 API 키는 변경되지 않았습니다.
Firebase 앱과 연결된 API 키를 어떻게 결정할 수 있나요?
다음 옵션 중 하나를 사용하여 Firebase 앱과 연결된 API 키를 결정할 수 있습니다.
프로젝트 설정으로 이동한 다음 내 앱 카드까지 아래로 스크롤합니다.
관심 있는 앱을 선택합니다.
관심 있는 앱에 대한 Firebase 구성 파일/객체를 가져온 다음 해당 API 키를 찾습니다.
Apple:
GoogleService-Info.plist
를 다운로드한 다음API_KEY
필드를 찾습니다.Android:
google-services.json
을 다운로드하고 관심 있는 앱의 구성(패키지 이름 확인)을 찾은 다음current_key
필드를 찾습니다.웹: 구성 옵션을 선택한 다음
apiKey
필드를 찾습니다.
다음 명령어를 실행하여 관심 있는 앱에 대한 Firebase 구성 파일/객체를 가져옵니다.
firebase apps:sdkconfig
PLATFORM FIREBASE_APP_ID - PLATFORM(다음 중 하나):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID: Firebase에서 할당한 Firebase 앱의 고유 식별자입니다(앱 ID 찾기).
- PLATFORM(다음 중 하나):
앱의 인쇄된 Firebase 구성에서 API 키를 찾습니다.
Apple:
API_KEY
필드를 찾습니다.Android: 관심 있는 앱의 구성(패키지 이름 확인)을 찾은 다음
current_key
필드를 찾습니다.웹:
apiKey
필드를 찾습니다.
관심 있는 앱에 적용 가능한 엔드포인트를 호출하고
apiKeyId
값을 다음 단계에 전달하여 API 키의apiKeyId
(UID)를 가져옵니다.- Apple:
projects.iosApps.get
을 호출합니다. - Android:
projects.androidApps.get
을 호출합니다. - 웹:
projects.webApps.get
을 호출합니다.
- Apple:
projects.locations.keys.getKeyString
을 호출하여 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 구성 파일/객체를 가져오면 Firebase는 프로젝트에서 앱과 일치하는 기존 API 키에 '애플리케이션 제한사항'이 적용되어 있는지 확인합니다(예: Apple 앱의 일치하는 번들 ID).
Firebase는 일치하는 제한된 키를 찾지 못한 경우 구성 파일/객체에 iOS key
(Apple 앱), Android key
(Android 앱), Browser key
(웹 앱)를 나열합니다(이러한 키가 존재하며 해당 앱과 일치하지 못하게 하는 '애플리케이션 제한사항'이 없다고 가정).
Firebase 구성 파일/객체에서 API 키와 필드를 직접 삭제할 수 있나요?
예. 구성 파일/객체에서 API 키를 직접 삭제할 수 있습니다. 하지만 앱에서 API 키에 액세스할 수 있는 다른 메커니즘을 제공해야 합니다(예: 환경 변수를 통해 액세스하는 방법). 그렇지 않으면 Firebase 서비스에 대한 모든 호출이 실패합니다.
다른 API 키로 Firebase 구성 파일/객체를 직접 수정할 수 있나요?
예. 구성 파일/객체를 직접 수정하여 다른 API 키를 앱에 연결할 수 있습니다.
사용자가 콘솔에서 앱의 구성 파일/객체를 다시 가져오면 Firebase가 해당 앱과 자동으로 일치시킨 API 키가 항상 나열됩니다. 따라서 필요에 따라 직접 수정을 반복해야 합니다.
한 Firebase 프로젝트에서 다른 프로젝트로 API 키를 이동할 수 있나요?
아니요. API 키는 특정 프로젝트만 식별하며 다른 프로젝트로 이동할 수 없습니다.
Google Cloud 콘솔에 나열된 API 키를 삭제하면 어떻게 되나요?
앱에서 사용 중인 API 키를 삭제하면 해당 앱에서의 API 호출이 실패합니다. 유효하지 않은 API 키를 사용하려고 한다는 보고서, 이메일 또는 오류를 받을 수 있습니다.
API 키 삭제는 영구적이며 취소할 수 없습니다.
Firebase API 키의 'API 제한사항' 허용 목록에 필요한 API는 무엇인가요?
Firebase API 키의 경우 키의 'API 제한사항' 허용 목록에 있어야 하는 유일한 API는 클라이언트에서 호출과 함께 API 키를 제공하는 데 필요한 API입니다. Firebase 관련 API 중 이 요구사항이 적용되는 API는 거의 없습니다. 프로젝트에서 사용 설정된 대부분의 Firebase 관련 API는 키의 'API 제한사항' 허용 목록에 있지 않아도 됩니다.
다음 표를 사용하여 Firebase API 키의 'API 제한사항' 허용 목록에 포함되어야 하는 Firebase 관련 API를 확인합니다. Firebase API 키는 Firebase 서비스에만 사용되어야 합니다. 특정 유형의 API에 별도의 제한된 API 키를 만드는 방법을 자세히 알아보세요.
Google Cloud 콘솔의 API 및 서비스 > 사용자 인증 정보 패널에서 프로젝트의 API 키를 보고 관리할 수 있습니다.
API 이름(서비스 이름) | API 표시 이름 | 연결된 Firebase 서비스/제품 |
---|---|---|
firebase.googleapis.com | Firebase Management API | 모든 제품 |
logging.googleapis.com | Cloud Logging API | 모든 제품 |
firebaseinstallations.googleapis.com | Firebase Installations API | Cloud Messaging, Crashlytics, In-App Messaging, Performance Monitoring, Remote Config, Firebase ML |
firebaseappcheck.googleapis.com | Firebase 앱 체크 API | App Check |
firebaseappdistribution.googleapis.com | Firebase App Distribution API | App Distribution |
firebaseapptesters.googleapis.com | Firebase App Testers API | App Distribution |
identitytoolkit.googleapis.com | Identity Toolkit API | Authentication |
securetoken.googleapis.com | Token Service API | Authentication |
firebaserules.googleapis.com * | Firebase Rules API | Cloud Firestore, Cloud Storage, Realtime Database |
datastore.googleapis.com | Cloud Datastore API | Cloud Firestore |
firestore.googleapis.com | Google Cloud Firestore API | Cloud Firestore |
fcmregistrations.googleapis.com | FCM Registration API | Cloud Messaging |
firebasestorage.googleapis.com | Firebase용 Cloud Storage API | Cloud Storage |
firebasedynamiclinks.googleapis.com | Firebase 동적 링크 API | Dynamic Links |
firebasehosting.googleapis.com * | Firebase 호스팅 API | Hosting |
firebaseinappmessaging.googleapis.com | Firebase 인앱 메시지 API | In-App Messaging |
firebaseml.googleapis.com | Firebase ML API | Firebase ML |
mlkit.googleapis.com ** | ML Kit API | Firebase ML |
mobilecrashreporting.googleapis.com | Mobile 비정상 종료 보고 API | Performance Monitoring |
play.googleapis.com | Google Play Android 개발자 API | Performance Monitoring |
firebaseremoteconfig.googleapis.com | Firebase 원격 구성 API | Performance Monitoring, Remote Config |
firebaseremoteconfigrealtime.googleapis.com | Firebase 원격 구성 실시간 API | Performance Monitoring, Remote Config |
cloudconfig.googleapis.com ** | 해당 사항 없음 | Remote Config |
firebasedatabase.googleapis.com * | Firebase 실시간 데이터베이스 API | Realtime Database |
firebasevertexai.googleapis.com | Vertex AI in Firebase API | Vertex AI in Firebase |
* 서드 파티 도구와 함께 Firebase API 키를 사용하거나 REST에서 Firebase 서비스/제품에 직접 액세스하는 경우에만 필요합니다.
** 제품 SDK 이전 버전에 필요합니다. 최신 버전의 SDK를 사용하는 경우 API가 키의 허용 목록에 있지 않아도 됩니다.
문제 해결
이 API에 대한 요청을 차단하는 API_KEY_SERVICE_BLOCKED
또는 Forbidden 403 오류를 수정하려면 어떻게 해야 하나요?
API_KEY_SERVICE_BLOCKED
오류나 다음과 같은 오류가 발생하면 이 FAQ의 안내를 따르세요.
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
앱에서 API를 호출하는 데 사용하는 API 키에 'API 제한사항'이 적용되어 있고 키의 허용 목록에 해당 API가 포함되어 있지 않을 수 있습니다.
Firebase 관련 서비스/제품을 사용하려고 할 때 이 오류가 발생하면 사용하고 있는 API 키에 키의 'API 제한사항' 허용 목록에 포함된 필수 API가 모두 있는지 확인합니다.
Firebase 이외의 서비스를 사용하려고 할 때 이 오류가 발생하면 해당 서비스 및 API 전용 새 API 키를 만드는 것이 좋습니다. Firebase API 키는 Firebase 서비스/제품에만 사용되어야 합니다. 특정 유형의 API에 별도의 제한된 API 키를 만드는 방법을 자세히 알아보세요.
다음 오류를 해결하려면 어떻게 해야 하나요? '서버에서 이 Firebase 앱의 측정 ID를 가져올 수 없습니다.'
웹 앱에서 사용하는 API 키에 'API 제한사항'이 적용된 것일 수 있습니다. 이 경우 Firebase Management API가 허용되는 API 목록에 있는지 확인하세요.
내 API 키가 유효하지 않다는 이메일 또는 오류를 받았습니다. 어떻게 된 것이며 해결 방법은 무엇인가요?
API 키가 유효하지 않은 가장 일반적인 이유는 다음과 같습니다.
API 키에 'API 키 제한사항'이 적용되어 있어 키를 사용하려고 하는 앱에서 검색할 수 없거나('애플리케이션 제한사항'), 호출된 API에서 사용할 수 없는 경우('API 제한사항')
API 키가 Google Cloud 콘솔의 프로젝트에서 삭제된 경우
앱의 Firebase 구성 파일/객체에 나열된 프로젝트 ID에 대한 API 키가 생성되지 않은 경우
이 문제를 해결하는 방법 중 하나는 앱의 Firebase 구성 파일/객체의 업데이트된 버전을 가져온 후 이전 구성 파일/객체를 새로 업데이트된 파일/객체로 대체하는 것입니다. Firebase는 다운로드할 구성 파일을 보내거나 Console에 구성 객체를 표시하기 전에 나열된 API 키가 앱과 일치하는지 확인합니다.