凡是使用 Google 地圖平台 API 和 SDK 的應用程式和專案,都必須具備 API 金鑰。為了提升安全性並盡可能減少工作量,建立 API 金鑰時即應設下保護限制。
雖然可在建立 API 金鑰之後及使用時再設定保護功能,但因金鑰的使用方式不同,可能會有不同的限制。在行動應用程式 (Android 和 iOS) 中更新或替換金鑰最為複雜,因為在所有客戶更新應用程式後,金鑰才會全部替換。在 JavaScript 或網路服務應用程式中更新或替換金鑰則簡單許多,但這項操作可能還是需要審慎規劃及快速執行。
如需個別 Google 地圖平台產品 (例如 Maps JavaScript API) 適用的安全性做法,請參閱「更多資訊」一節。
限制 API 金鑰
第一次建立 API 金鑰時,請設定一項應用程式限制和一或多項 API 限制來限制金鑰。
應用程式限制:用來限制只能在特定平台 (Android 或 iOS) 或特定網站 (公開 IP 位址和網站) 使用 API 金鑰。任何一個 API 金鑰只能加入一種應用程式限制。
API 限制:用來限制只能在一或多個 Google 地圖平台 API 或 SDK 使用 API 金鑰。系統只處理已與 API 金鑰建立關聯的 API 或 SDK 使用要求。您可以視需要為任一特定 API 金鑰指定多項 API 限制。
如果您在建立 API 金鑰時並未採取安全措施,請建立其他 API 金鑰並加以限制,然後將所有應用程式更新為使用新的 API 金鑰。基於安全起見,一個應用程式使用一個金鑰是最理想的做法。不過,您還是可以對多個應用程式使用受限制的金鑰,前提是對金鑰的應用程式限制類型,與共用金鑰的應用程式兩者之間不會有相容問題。
如果您在建立 API 金鑰後才設定限制,請檢查 API 金鑰使用情況,確認這些限制不會導致任何現有應用程式無法正常運作。
前往 Google Cloud 控制台的「指標」頁面。
選取「顯示篩選器」。
從「分組依據」中選取「憑證」。畫面上會顯示哪些 API 金鑰與各項 Google 服務搭配使用。
按一下「憑證」。
取消選取所有憑證。
對於畫面上顯示的每個金鑰,請選取金鑰並按一下「確定」。
從「分組依據」中選取「API」。畫面上會顯示哪些 API 限制適用於金鑰。
從「分組依據」中選取「API 方法」,這樣您對於哪個應用程式限制類型最適合金鑰,也許會有一些概念。
為 API 金鑰設定應用程式限制
- 前往「憑證」頁面。
選取要設定限制的 API 金鑰,畫面隨即顯示 API 金鑰屬性頁面。
在「金鑰限制」下方,選取「應用程式限制」。
請選取其中一個限制類型,然後按照限制清單中的說明提供必要資訊。
限制類型 說明 HTTP 參照網址 指定一或多個參照網址網站。您可以使用萬用字元來授權所有子網域 (例如, *.google.com
接受結尾為.google.com
的所有網站)。請依原樣指定https://
和http://
。您必須為其他類型的參照網址通訊協定使用特殊表示法。舉例來說,您可以將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 位址 指定一個 IPv4 或 IPv6 位址,或是採用 CIDR 標記法的子網路。網路服務要求會檢查和比較外部 IP 位址與 API 金鑰限制,因此請使用伺服器的公開 IP 位址。 Android 應用程式 新增 AndroidManifest.xml
檔案中的 SHA-1 簽署憑證指紋和 Android 套件名稱。iOS 應用程式 從類型下方的清單中選取正確的 iOS 軟體包 ID。 選取「儲存」。
為 API 金鑰設定 API 限制
前往「憑證」頁面。
選取要設定限制的 API 金鑰。 畫面隨即顯示「限制並重新命名 API 金鑰」頁面。
在「API 限制」下方:
按一下「限制金鑰」。
按一下「選取 API」下拉式選單,然後選擇您要讓應用程式利用 API 金鑰存取的 API 或 SDK。
如果選單未列出您需要的 API 或 SDK,則必須啟用該 API 或 SDK。
按一下「儲存」。
這個步驟完成後,設定的限制就會成為 API 金鑰定義的一部分。但如果您未提供正確的詳細資料,或是未點選「儲存」,API 金鑰就不會受到限制。如要進一步瞭解詳情,請前往「取得 API 金鑰」指南中查看特定 API 或 SDK 的相關說明。
刪除未使用的 API 金鑰
請先確認 API 金鑰並未用於實際工作環境,再刪除該金鑰。只要沒有任何成功流量,刪除金鑰應該就不會有什麼問題。
刪除 API 金鑰的做法如下:
前往「憑證」頁面。
選取要刪除的 API 金鑰。
選取靠近頁面頂端的「刪除」按鈕。
畫面出現「刪除憑證」對話方塊時,選取「刪除」。
刪除 API 金鑰需要幾分鐘的時間才會生效。生效後,凡是使用已刪除 API 金鑰的流量都會遭拒。
其他保護 API 的方法
重新產生 API 金鑰時請務必謹慎
重新產生 API 金鑰時會建立一個新金鑰,當中包含舊金鑰的所有限制。而且系統也會開始計時,並於 24 小時後停用舊版 API 金鑰。
在這段期間內,系統會同時接受新舊金鑰,讓您能將應用程式改為使用新金鑰。不過,這段期間過後,凡是使用舊版 API 金鑰的應用程式都會停止運作。
前往「API 金鑰」頁面。
選取「還原為先前的金鑰」。
在「還原」對話方塊中,按一下「還原金鑰」。
復原後,該金鑰之前的「新」版本就會變回舊版,而系統也會重新開始計時,並於 24 小時後停用指定版本。再次重新產生金鑰之前,您可以先切換使用這兩個金鑰值。
重新產生的第二個金鑰會覆寫無效的舊金鑰值。
監控 API 使用情況
檢查 API 金鑰使用情況的做法如下:
前往「指標」頁面。
按一下「顯示篩選器」。
從「分組依據」選取「API 方法」。
在「回應代碼」下方選取「2xx」,即可查看對這個金鑰的所有成功要求。
如果偵測到未經授權的使用情況,請執行以下操作:
限制您的金鑰。
如有多個應用程式使用同一個金鑰,請改用多個 API 金鑰,最好針對各個應用程式使用不同的 API 金鑰。
如需協助,請與支援團隊聯絡。
針對各個應用程式使用不同的 API 金鑰
這個做法可限制每個金鑰的範圍,要是 API 金鑰遭駭,您可以直接刪除或重新產生受影響的金鑰,無須更新其他 API 金鑰。
改用多個 API 金鑰
如要從多個應用程式使用一個 API 金鑰的做法,改為每個應用程式只使用一個專屬 API 金鑰,請按照下列步驟操作:
找出需要新金鑰的應用程式。
- 網頁應用程式最容易更新,因為所有的程式碼都是由您控制。請規劃更新所有網路應用程式的金鑰。
- 更新行動應用程式會比較困難,因為要讓客戶先更新應用程式,您才能使用新金鑰。
請建立及限制新金鑰。
- 新增一項應用程式限制和至少一項 API 限制。
在您的各種應用程式中加入新金鑰。
- 就行動應用程式而言,所有使用者可能需要花上幾個月的時間,才能改為使用包含新 API 金鑰的最新應用程式。
Maps Web Service API 或 Static Web API 應用程式保護方法
將 API 金鑰和簽署密鑰儲存在應用程式的原始碼外。如果您將 API 金鑰或任何其他私密資訊儲存在環境變數中,或是在加入單獨儲存的檔案後共用程式碼,共用檔案中就不會包含 API 金鑰或簽署密鑰。
將 API 金鑰或簽署密鑰儲存在應用程式原始碼樹狀結構外的檔案中。如果您將 API 金鑰或任何其他私密資訊儲存在檔案中,請將這類檔案存放在應用程式原始碼樹狀結構外的位置,以免金鑰出現在原始碼控管系統中。假如您使用的是公開原始碼管理系統 (例如 GitHub),特別需要注意這點。
Web Service API 或 Static Web API 行動應用程式保護方法
使用 Proxy 伺服器。Proxy 伺服器提供可靠來源,讓應用程式與適當的 Google 地圖平台 API 互動。如要進一步瞭解如何使用 Proxy 伺服器,請參閱「Living Vicariously: Using Proxy Servers with the Google Data API Client Libraries」(善用代理伺服器:搭配 Google Data API 用戶端程式庫使用 Proxy 伺服器) 一文。
將 API 金鑰或簽署密鑰加密或模糊處理。這樣可讓他人更難以直接從應用程式抓取 API 金鑰和其他私密資料。
更多資訊
這些表格列出各個 Google 地圖平台 API、SDK 或服務適用的 API 金鑰限制和 API 安全性最佳做法。
使用 Maps JavaScript API、Maps Embed API 或 Maps 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 | |
Distance Matrix Service、Maps JavaScript API | HTTP 參照網址限制 | Distance Matrix API、Maps JavaScript API | |
Elevation Service、Maps JavaScript API | HTTP 參照網址限制 | Elevation API、Maps JavaScript API | |
Geocoding Service、Maps JavaScript API | HTTP 參照網址限制 | Geocoding API、Maps JavaScript API | |
Maps JavaScript API Places Library | 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 | |
Time Zone API | IP 位址限制(4) | Time Zone API |
Android 應用程式
API/SDK/服務 | 應用程式限制 (1) | API 限制 (1) | 最佳做法 |
---|---|---|---|
Maps SDK for Android | Android 限制 | Maps SDK for Android | |
Places SDK for Android | Android 限制 | Places API |
iOS 應用程式
API/SDK/服務 | 應用程式限制 (1) | API 限制 (1) | 最佳做法 |
---|---|---|---|
Maps SDK for iOS | iOS 限制 | Maps SDK for iOS | |
Places SDK for iOS | iOS 限制 | Places API |
1 您可以將未受限制的 API 金鑰用於任何 Google 地圖平台 API 或 SDK,不過極力建議您限制 API 金鑰,尤其是在下列情況下:
測試環境將設為或已設為開放給所有人檢視。
採用 API 金鑰的應用程式可用於實際執行環境中。
2 針對行動應用程式,我們建議使用原生的 Maps SDK for Android 和 Maps SDK for iOS。
3 針對 Maps Static API 和 Street View Static API,除了 API 金鑰之外,您還需要提供數位簽章,每日地圖載入量才能超過 25,000 次。
如果是簽署要求,請檢查您每天願意允許的未簽署要求數量,然後據此調整未簽署要求的配額。
4 有時候設定 IP 限制的做法可能並不實際,例如對仰賴動態 IP 位址的行動應用程式和雲端環境來說,也許就不太適用。在這類情境中使用 Maps Web Service API 時,請採用 Proxy 伺服器或模糊處理來保護應用程式。
5 針對行動應用程式,我們建議使用原生的 Places SDK for Android 和 Places SDK for iOS。