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 키도 확인할 수 있습니다. 기본적으로 프로젝트의 모든 동일한 플랫폼(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 서비스를 호출할 때 오류가 발생합니다.
이 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 서비스에 대한 모든 호출이 실패합니다.
앱에서 사용 중인 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 키를 만드는 방법을 자세히 알아보세요.
* 서드 파티 도구와 함께 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 키를 만드는 것이 좋습니다. 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 키가 앱과 일치하는지 확인합니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2024-11-19(UTC)"],[],[]]