API 安全性最佳做法

凡是使用 Google Maps Platform 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 金鑰使用情況,確認這些限制不會導致任何現有應用程式故障。

  1. 前往 Google Cloud Console 的「指標」頁面

  2. 選取 [顯示篩選器]

  3. 從「分組依據」中選取 [憑證]。畫面上會顯示哪些 API 金鑰與各項 Google 服務搭配使用。

  4. 按一下 [憑證]

  5. 取消選取所有憑證。

  6. 對於畫面上顯示的每個金鑰,選取該金鑰並按一下 [確定]

  7. 從「分組依據」中選取 [API]。畫面上會顯示哪些 API 限制適用於金鑰。

    從「分組依據」中選取 [API 方法],這樣您對於哪個應用程式限制類型最適合金鑰,也許會有一些概念。

為 API 金鑰設定應用程式限制

  1. 前往「憑證」頁面
  2. 選取要設定限制的 API 金鑰,畫面隨即顯示 API 金鑰屬性頁面。

  3. 在「金鑰限制」下方,選取 [應用程式限制]。

    請選取其中一個限制類型,然後按照限制清單中的說明提供必要資訊。

    限制類型 說明
    HTTP 參照網址 指定一或多個參照網址網站。您可以使用萬用字元來授權所有子網域 (例如,*.google.com 接受結尾為 .google.com 的所有網站)。
    IP 位址 指定一個 IPv4 或 IPv6 位址,或是採用 CIDR 標記法的子網路。網路服務要求會檢查和比較外部 IP 位址與 API 金鑰限制,因此請使用伺服器的公開 IP 位址。
    Android 應用程式 新增 AndroidManifest.xml 檔案中的 SHA-1 簽署憑證指紋和 Android 套件名稱。
    iOS 應用程式 從類型下方的清單中選取正確的 iOS 軟體包 ID。
  4. 選取 [儲存]

為 API 金鑰設定 API 限制

  1. 前往「憑證」頁面

  2. 選取要設定限制的 API 金鑰。 畫面隨即顯示「限制並重新命名 API 金鑰」頁面。

  3. 在「API 限制」下方:

    • 按一下 [限制金鑰]

    • 按一下 [選取 API] 下拉式選單,然後選擇您要讓應用程式利用 API 金鑰存取的 API 或 SDK。

      如果選單未列出您需要的 API 或 SDK,則您必須啟用該 API 或 SDK。

  4. 按一下 [儲存]

    這個步驟完成後,設定的限制就會成為 API 金鑰定義的一部分。 但如果您未提供正確的詳細資訊,或是未點選 [儲存],API 金鑰就不會受到限制。如要進一步瞭解詳情,請到「取得 API 金鑰」指南中查看特定 API 或 SDK 的相關說明。

刪除未使用的 API 金鑰

刪除 API 金鑰之前,請先確認該金鑰並未用於實際工作環境。只要沒有任何成功流量,刪除金鑰應該就不會有什麼問題。

刪除 API 金鑰的做法如下:

  1. 前往「憑證」頁面

  2. 選取要刪除的 API 金鑰。

  3. 選取靠近頁面頂端的 [刪除] 按鈕。

  4. 畫面出現「刪除憑證」對話方塊時,選取 [刪除]

    刪除 API 金鑰需要幾分鐘的時間才會生效。生效後,使用已刪除 API 金鑰的流量就會遭到拒絕。

其他保護 API 的方法

重新產生 API 金鑰時請務必謹慎

重新產生 API 金鑰時會建立一個新金鑰,當中包含舊金鑰的所有限制。而且系統也會開始計時,並於 24 小時後停用舊版 API 金鑰。

在這段期間內,系統會同時接受新舊金鑰,讓您能將應用程式改為使用新金鑰。不過,這段期間過後,凡是使用舊版 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 APIStatic Web API 應用程式保護方法

  • 將 API 金鑰和簽署密鑰儲存在應用程式的原始碼外。如果您將 API 金鑰或任何其他私密資訊儲存在環境變數中,或是在加入單獨儲存的檔案後共用程式碼,共用檔案中就不會包含 API 金鑰或簽署密鑰。

  • 將 API 金鑰或簽署密鑰儲存在應用程式原始碼樹狀結構外的檔案中。如果您將 API 金鑰或任何其他私密資訊儲存在檔案中,請將這類檔案存放在應用程式原始碼樹狀結構外的位置,以免金鑰出現在原始碼控管系統中。假如您使用的是公開原始碼管理系統 (例如 GitHub),特別需要注意這點。

Web Service API 或 Static Web API 行動應用程式保護方法

  • 使用 Proxy 伺服器。Proxy 伺服器提供可靠來源,讓應用程式與適當的 Google Maps Platform 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 地點資料庫 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) 最佳做法
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 AndroidMaps 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 AndroidPlaces SDK for iOS