API 보안 권장사항

Google Maps Platform API 및 SDK를 사용하는 앱과 프로젝트에는 API 키가 필요합니다. 최소한의 수고로 보안을 최대한 강화하려면 API 키를 만들 때 보안 조치를 하세요.

API 키는 만든 후 사용하면서 보안 조치를 할 수도 있지만 키가 사용되는 방식에 따라 제한사항이 다를 수 있습니다. 모바일 앱(Android 및 iOS)의 키는 모든 고객이 앱을 업데이트하지 않으면 전부 교체할 수 없기 때문에 이러한 키를 업데이트하거나 교체하는 일은 굉장히 복잡합니다. 자바스크립트 또는 웹 서비스 앱에서 키를 업데이트하거나 교체하는 일은 훨씬 간단하지만 여전히 신중한 계획과 빠른 작업이 필요합니다.

Maps JavaScript API와 같이 개별 Google Maps Platform 제품에 적용되는 보안 권장사항은 추가 정보 섹션에 나와 있습니다.

API 키 제한

API 키를 처음 만들 때 하나의 애플리케이션 제한사항과 하나 이상의 API 제한사항으로 키를 제한합니다.

  • 애플리케이션 제한사항은 API 키가 특정 플랫폼(Android 또는 iOS) 또는 특정 사이트(공개 IP 주소 및 웹사이트)에만 사용되도록 제한합니다. 개별 API 키에는 한 가지 유형의 애플리케이션 제한사항만 추가할 수 있습니다.

  • API 제한사항에 따라 API 키는 하나 이상의 Google Maps Platform API 또는 SDK에만 사용할 수 있습니다. API 키와 연결된 API 또는 SDK 사용 요청만 처리됩니다. API 제한사항은 특정 API 키에 대해 필요한 만큼 지정할 수 있습니다.

API 키를 만들 때 보안 조치를 하지 않은 경우 추가 API 키를 만들어 제한사항을 추가한 다음 새 API 키로 모든 앱을 업데이트하세요. 보안을 위해서는 애플리케이션당 하나의 키가 이상적이지만, 키에 적용된 앱 제한사항의 유형으로 인해 키를 공유하는 앱과의 호환성 문제만 발생하지 않는다면 제한된 키를 여러 앱에서 사용할 수 있습니다.

API 키를 만든 후 제한하려는 경우 API 키 사용을 확인하여 제한사항이 기존 앱에 영향을 주지 않도록 해야 합니다.

  1. Google Cloud Console의 측정항목 페이지로 이동합니다.

  2. 필터 표시를 선택합니다.

  3. 그룹화 기준에서 사용자 인증 정보를 선택합니다. 어떤 Google 서비스에서 어떤 API 키가 사용되는지 확인할 수 있습니다.

  4. 사용자 인증 정보를 클릭합니다.

  5. 모든 사용자 인증 정보를 선택 해제합니다.

  6. 표시된 각 키에 대해 키를 선택하고 확인을 클릭합니다.

  7. 그룹화 기준에서 API를 선택합니다. 키에 적용할 API 제한사항이 표시됩니다.

    그룹화 기준에서 API 메서드를 선택하면 키에 가장 적합한 애플리케이션 제한사항 유형에 대한 힌트를 얻을 수 있습니다.

API 키에 대한 애플리케이션 제한사항 설정

  1. 사용자 인증 정보 페이지로 이동합니다.
  2. 제한사항을 설정할 API 키를 선택합니다. API 키 속성 페이지가 나타납니다.

  3. 키 제한사항에서 애플리케이션 제한사항을 선택합니다.

    제한사항 유형 중 하나를 선택하고 제한사항 목록에 따라 필요한 정보를 제공합니다.

    제한사항 유형 설명
    HTTP 리퍼러 리퍼러 웹사이트를 하나 이상 지정합니다. 모든 하위 도메인을 승인하는 데 와일드 카드 문자를 사용할 수 있습니다(예를 들어 *.google.com.google.com으로 끝나는 모든 사이트를 허용합니다). https://http://를 있는 그대로 지정하세요. 다른 리퍼러 URL 프로토콜 유형의 경우 특별한 표현을 사용해야 합니다. 예를 들어 file:///path/to/의 형식을 __file_url__//path/to/*로 지정하세요. 리퍼러를 사용 설정한 후에는 사용량을 모니터링하여 예상과 일치하는지 확인해야 합니다. 다음과 같은 리퍼러 프로토콜이 지원됩니다. about://, app://, applewebdata://, asset://, chrome://, content://, file://, ftp://, ionic://, local://, ms-appx://, ms-appx-web://, ms-local-stream://, prism://, qrc://, res://, saphtmlp://
    IP 주소 CIDR 표기법을 사용하여 IPv4 또는 IPv6 주소 하나 또는 서브넷 하나를 지정합니다. 웹 서비스 요청에서 외부 IP 주소를 확인하고 API 키 제한사항과 비교하므로 서버의 공개 IP 주소를 사용하세요.
    Android 앱 AndroidManifest.xml 파일의 SHA-1 서명 인증서 지문과 Android 패키지 이름을 추가합니다.
    iOS 앱 유형 아래에 있는 목록에서 적절한 iOS 번들 식별자를 선택합니다.
  4. 저장을 선택합니다.

API 키에 대한 API 제한사항 설정

  1. 사용자 인증 정보 페이지로 이동합니다.

  2. 제한할 API 키를 선택합니다. API 제한 및 이름 바꾸기 페이지가 나타납니다.

  3. API 제한사항에서 다음을 실행합니다.

    • 키 제한을 클릭합니다.

    • API 선택 드롭다운을 클릭하고 애플리케이션에서 API 키를 사용하여 액세스해야 하는 API나 SDK를 선택합니다.

      (API 또는 SDK가 표시되지 않으면 항목을 사용 설정해야 합니다.)

  4. 저장을 클릭합니다.

    이 단계가 지나면 제한사항이 API 키 정의의 일부가 됩니다. 적절한 세부정보를 제공하지 않거나 '저장'을 클릭하지 않으면 API 키가 제한되지 않습니다. (자세한 내용은 관심 있는 특정 API 또는 SDK의 API 키 가져오기 가이드를 참고하세요.)

사용하지 않는 API 키 삭제

API 키를 삭제하기 전에 프로덕션에서 사용 중이 아닌지 확인하세요. 정상 트래픽이 없으면 키를 삭제해도 무방합니다.

API 키를 삭제하는 방법은 다음과 같습니다.

  1. 사용자 인증 정보 페이지로 이동합니다.

  2. 삭제할 API 키를 선택합니다.

  3. 페이지 상단의 삭제 버튼을 선택합니다.

  4. 사용자 인증 정보 삭제 대화상자가 나타나면 삭제를 선택합니다.

    API 키 삭제가 반영되기까지 몇 분 정도 걸립니다. 키 삭제가 반영되면 삭제된 API 키를 사용하는 트래픽이 거부됩니다.

API를 보호하는 다른 방법

API 키를 다시 생성할 때는 주의하세요

API 키를 다시 생성하면 이전 키의 제한사항이 모두 포함된 새 키가 생성됩니다. 또한 새 키가 생성되면서 기존 API 키가 비활성화되기까지 남은 시간을 알리는 24시간 타이머가 시작됩니다.

이 기간에는 이전 키와 새 키가 모두 허용되므로 앱을 이전하여 새 키를 사용할 수 있습니다. 하지만 이 기간이 지나면 기존 API 키를 사용하는 앱은 작동이 중지됩니다.

  1. API 키 페이지로 이동합니다.

  2. 이전 키로 되돌리기를 선택합니다.

  3. 되돌리기 대화상자에서 키 되돌리기를 클릭합니다.

롤백되면 되돌리기 전의 '새로운' 버전이 이전 버전이 되며 이 키에 대한 24시간 비활성화 타이머가 새로 설정됩니다. 키를 다시 생성할 때까지 이 두 키 값 사이에서 되돌릴 수 있습니다.

이렇게 두 번째로 재생성된 키는 비활성화된 이전 키 값을 덮어씁니다.

API 사용량 모니터링

API 키 사용량을 확인하는 방법은 다음과 같습니다.

  1. 측정항목 페이지로 이동합니다.

  2. 필터 표시를 클릭합니다.

  3. 그룹화 기준에서 API 메서드를 선택합니다.

  4. 응답 코드에서 2xx를 선택하여 이 키에 대해 성공한 요청을 확인합니다.

승인되지 않은 사용이 감지되면 다음 작업을 실행하세요.

  1. 키를 제한합니다.

    여러 앱에서 동일한 키가 사용되는 경우 가급적 각 앱에 별도의 API 키를 사용하여 여러 API 키로 이전하세요.

  2. 승인되지 않은 사용이 계속되면 영향을 받은 키를 다시 생성하거나 삭제하세요.

  3. 지원팀에 문의합니다.

앱마다 별도의 API 키 사용

이렇게 하면 각 키의 범위가 제한됩니다. API 키가 손상된 경우 다른 API 키를 업데이트하지 않고도 손상된 키를 삭제하거나 다시 생성할 수 있습니다.

여러 API 키로 이전

여러 앱에 하나의 API 키를 사용하는 방식에서 앱별로 하나의 고유 API 키를 사용하는 방식으로 이전하려면 다음 안내를 따르세요.

  1. 새 키가 필요한 앱을 파악합니다.

    • 웹 앱은 개발자가 모든 코드를 관리하므로 업데이트하기가 가장 쉽습니다. 모든 웹 기반 앱의 키를 업데이트할 계획을 세웁니다.
    • 모바일 앱의 경우 새 키를 사용하려면 고객이 각자의 앱을 업데이트해야 하므로 업데이트가 훨씬 더 어렵습니다.
  2. 새 키를 만들고 제한합니다.

    • 애플리케이션 제한사항 하나와 API 제한사항을 최소 한 개 추가합니다.
  3. 다양한 앱에 새 키를 추가합니다.

    • 모바일 앱의 경우 모든 사용자가 새 API 키를 사용하는 최신 앱으로 업데이트하기까지 몇 개월이 걸릴 수 있습니다.

Maps Web Service API 또는 Static Web API 앱 보호 메서드

  • API 키와 서명 비밀번호를 애플리케이션의 소스 코드 외부에 저장합니다. API 키 또는 기타 비공개 정보를 환경 변수에 포함하거나 별도로 저장된 파일을 포함한 후 코드를 공유하면 API 키 또는 서명 비밀번호가 공유 파일에 포함되지 않습니다.

  • API 키 또는 서명 비밀번호를 애플리케이션의 소스 트리 외부에 있는 파일에 저장합니다. API 키 또는 다른 비공개 정보를 파일에 저장하는 경우, 소스 코드 관리 시스템에서 키에 영향을 미치지 않도록 파일을 애플리케이션 소스 트리 외부에 보관합니다. 이는 GitHub 같은 공개 소스 코드 관리 시스템을 사용하는 경우에 특히 중요합니다.

Web Service API 또는 Static Web API 모바일 앱 보호 메서드

  • 프록시 서버를 사용합니다. 프록시 서버는 적절한 Google Maps Platform API와 상호작용할 수 있는 견고한 소스가 되어 줍니다. 프록시 서버 사용에 대한 자세한 내용은 대리 장치: Google Data API 클라이언트 라이브러리에 프록시 서버 사용하기를 참고하세요.

  • API 키 또는 서명 비밀번호를 난독화하거나 암호화합니다. 이렇게 하면 애플리케이션에서 API 키와 기타 비공개 데이터를 직접 스크래핑하기가 더욱 복잡해집니다.

추가 정보

아래 표에는 각 Google Maps Platform API, SDK, 서비스에 적합한 API 키 제한사항 및 API 보안 권장사항이 나와 있습니다.

Maps JavaScript, Embedded 또는 Static API가 있는 웹사이트

API/SDK/서비스 애플리케이션 제한사항(1) API 제한사항(1) 권장사항
Maps JavaScript API(2) HTTP 리퍼러 제한사항 Maps JavaScript API
Directions Service, Maps JavaScript API HTTP 리퍼러 제한사항 Directions API, Maps JavaScript API
Maps JavaScript API, Distance Matrix Service HTTP 리퍼러 제한사항 Distance Matrix API, Maps JavaScript API
Maps JavaScript API, Elevation Service HTTP 리퍼러 제한사항 Elevation API, Maps JavaScript API
Maps JavaScript API, Geocoding Service HTTP 리퍼러 제한사항 Geocoding API, Maps JavaScript API
Maps JavaScript API, 장소 라이브러리 HTTP 리퍼러 제한사항 Places API, Maps JavaScript API
Maps Embed API HTTP 리퍼러 제한사항 Maps Embed API
Maps Static API HTTP 리퍼러 제한사항 Maps Static API
Street View Static API HTTP 리퍼러 제한사항 Street View Static API

웹 서비스를 사용하는 앱 및 서버

API/SDK/서비스 애플리케이션 제한사항(1) API 제한사항(1) 권장사항
Address Validation API IP 주소 제한(4) Address Validation API
Directions API IP 주소 제한(4) Directions API
Distance Matrix API IP 주소 제한(4) Distance Matrix API
Elevation API IP 주소 제한(4) Elevation API
Geocoding API IP 주소 제한(4) Geocoding API
Geolocation API IP 주소 제한(4) Geolocation API
Places API(5) IP 주소 제한(4) Places API
Roads API IP 주소 제한(4) Roads API
Routes API IP 주소 제한(4) Routes API
Time Zone API IP 주소 제한(4) Time Zone API

Android 앱

API/SDK/서비스 애플리케이션 제한사항(1) API 제한사항(1) 권장사항
Android용 Maps SDK Android 제한사항 Android용 Maps SDK
Android용 Places SDK Android 제한사항 Places API

iOS 앱

API/SDK/서비스 애플리케이션 제한사항(1) API 제한사항(1) 권장사항
iOS용 Maps SDK iOS 제한 iOS용 Maps SDK
iOS용 Places SDK iOS 제한 Places API

1 제한이 없는 API 키는 모든 Google Maps Platform API 또는 SDK에 사용할 수 있습니다. 그러나 특히 다음과 같은 상황에서는 API 키를 제한하는 것이 좋습니다.

  • 테스트 환경을 공개하거나 공개적으로 표시할 예정인 경우

  • API 키를 사용하는 애플리케이션을 프로덕션 환경에서 사용할 수 있는 경우

2 모바일 애플리케이션의 경우 네이티브 Android용 Maps SDKiOS용 Maps SDK 사용을 고려해 보세요.

3 API 키는 물론이고 Maps Static API와 Street View Static API의 경우에도 일일 할당량인 지도 로드 25,000회를 초과해야 한다면 디지털 서명을 제공해야 합니다.

요청에 서명할 때는 하루에 허용할 서명되지 않은 요청 수를 검토하고 그에 따라 서명되지 않은 요청 할당량을 조정해야 합니다.

4 IP 제한사항은 동적 IP 주소를 사용하는 모바일 애플리케이션 및 클라우드 환경과 같은 일부 상황에서는 비실용적일 수 있습니다. 이러한 상황에서 Maps Web Service API를 사용할 때는 프록시 서버 또는 난독화를 사용하여 앱을 보호해야 합니다.

5 모바일 애플리케이션의 경우 네이티브 Android용 Places SDKiOS용 Places SDK 사용을 고려해 보세요.