對於使用 Google 地圖平台 API 和 SDK 的應用程式及專案,請務必採用 API 金鑰或 Oauth (如支援),防止未經授權的使用行為及相關費用。為提升安全性,如果您採用 API 金鑰,請在建立 API 金鑰時設定相關限制。下文提供最佳做法,說明如何限制 API 金鑰。
除了套用應用程式和 API 金鑰限制,也請務必遵守 Google 地圖平台產品適用的安全性做法,舉例來說,您可以參閱下文「建議的應用程式和 API 限制」一節中的 Maps JavaScript API 相關內容。
如果目前已有使用中的 API 金鑰,請參閱下方「限制或重新產生目前使用中的 API 金鑰」一節的建議。
如要進一步瞭解數位簽章,請參閱「數位簽章指南」。
建議最佳做法
為提升安全性,並避免未經授權的使用行為產生相關費用,請遵循下方所有 Google 地圖平台 API、SDK 或服務適用的 API 安全性最佳做法:
適用於各種 API 金鑰用途
使用 Static Web API 的網站 - 其他建議
使用網路服務的應用程式 - 其他建議
iOS 和 Android 行動應用程式 - 其他建議
保護使用網路服務或 Static Web API 的行動應用程式
限制或重新產生目前使用中的 API 金鑰
變更 API 金鑰前,請先查看 API 金鑰使用情形。如果您在開始使用金鑰後才新增限制,這個步驟就格外重要。
變更金鑰後,請視需要更新所有應用程式的 API 金鑰。
如果您的 API 金鑰目前沒有濫用情形,您可以依自己的步調,將應用程式改為採用多個新的 API 金鑰。原本的 API 金鑰可維持不變,直到只剩一種流量類型時,再為該類型的 API 金鑰套用應用程式限制。詳情請參閱「改用多個 API 金鑰」一節。
您可以持續監控使用情形,等到確認特定的 API、平台類型和網域已不再使用舊的 API 金鑰時,再選擇限制或刪除舊金鑰。詳情請參閱「報表與監控」和「指標」這兩篇文章。
如果您的 API 金鑰遭駭,最好趕緊採取行動確保金鑰安全,並阻止濫用行為。以 Android 和 iOS 應用程式來說,要等到客戶更新應用程式,才能更換金鑰。在 JavaScript 或網路服務應用程式中更新或替換金鑰相對簡單許多,但可能還是需要審慎規劃及快速執行。
詳情請參閱「處理未經授權使用 API 金鑰的問題」一節。
限制 API 金鑰
建議您一律為 API 金鑰設定應用程式限制,以及一或多項 API 限制。如要依照 API、SDK 或 JavaScript 服務查看相關建議限制,請參閱下方「建議的應用程式和 API 限制」一節。
應用程式限制:您可以將 API 金鑰的使用範圍限制在下列其中一個特定平台:Android 或 iOS 應用程式、特定網站 (用戶端應用程式),或是特定 IP 位址或 CIDR 子網路 (發出網路服務 REST API 呼叫的伺服器端應用程式)。
限制金鑰時,您可以按照想要授權的類型,新增一或多項應用程式限制。一旦套用限制,就只有這些來源可提出要求。
API 限制:您可以限制 API 金鑰只能用於哪些 Google 地圖平台 API、SDK 或服務。設定 API 限制後,就只能對您指定的 API 和 SDK 送出要求。您可以視需要對任一 API 金鑰指定多項 API 限制。可用 API 清單會列出專案中已啟用的所有 API。
設定 API 金鑰的應用程式限制
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
選取要設定限制的 API 金鑰。
在「編輯 API 金鑰」頁面的「金鑰限制」下方,選取「設定應用程式限制」。
請選取其中一個限制類型,然後按照限制清單中的說明提供必要資訊。
限制類型 說明 網站 指定一或多個參照網址網站。 https
和http
是業界普遍支援的參照網址 URI 配置。- 請一律提供完整的參照網址 URI,包括通訊協定配置、主機名稱及選用的連接埠 (例如
https://google.com
)。 - 您可以使用萬用字元授權所有子網域。適用對象
例如,
https://*.google.com
接受結尾為結尾的所有網站 位置:.google.com
。請注意,如果您在 www.domain.com,可視為萬用字元 www.domain.com/*,而 授權該主機名稱上的任何子路徑。 - 根據預設,目前大多數的瀏覽器會去除跨來源要求中的路徑部分,因此授權完整路徑的參照網址 (例如
https://google.com/some/path
) 時,請務必特別留意。
IP 位址 您可以指定一或多個 IPv4 或 IPv6 位址,或是採 CIDR 標記法的子網路。IP 位址必須與 Google 地圖平台伺服器監控的來源位址相符。如果您使用網路位址轉譯 (NAT),這個位址通常會對應到電腦的「公開」IP 位址。 Android 應用程式 對於要授權的 Android 應用程式,請加入其 Android 套件名稱 (取自 AndroidManifest.xml
檔案) 和 SHA-1 簽署憑證指紋。如果您使用 Play 應用程式簽署功能擷取簽署憑證指紋,請參閱「與 API 供應商合作」一文。如果您管理自己的簽署金鑰,請參閱「自行簽署應用程式」一文,或是參考您建構環境適用的操作說明。iOS 應用程式 對於要授權的 iOS 應用程式,請加入其軟體包 ID。 如需應用程式限制的相關建議,請參閱「建議的應用程式限制」一節。
選取「儲存」。
設定 API 金鑰的 API 限制
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
選取要設定限制的 API 金鑰。
在「編輯 API 金鑰」頁面的「API 限制」下方:
選取「限制金鑰」。
開啟「選取 API」,然後選取您要讓應用程式利用 API 金鑰存取的 API 或 SDK。
如果選單內沒有您要的 API 或 SDK,則需自行啟用。詳情請參閱「啟用一或多個 API 或 SDK」一文。
選取「儲存」。
這個步驟完成後,設定的限制就會成為 API 金鑰定義的一部分。請確認提供的詳細資料正確無誤,並選取「Save」(儲存) 來儲存 API 金鑰限制。如需進一步說明,請根據您想要瞭解的 API 或 SDK,參閱對應說明文件中的「取得 API 金鑰」指南。
如要查看建議的 API 限制,請參閱「建議的 API 限制」一節。
查看 API 金鑰使用情形
如要對已建立的 API 金鑰套用限制,或是想查看金鑰目前採用何種 API,以便加上限制,不妨查看 API 金鑰使用情形。您可以按照下列步驟操作,瞭解 API 金鑰目前用於哪些服務和 API 方法。如果您發現金鑰不只用於 Google 地圖平台服務,請進行調查並判斷是否需要加入更多限制,避免不必要的使用行為。您可以運用 Google 地圖平台 Cloud 控制台的 Metrics Explorer,判斷要對 API 金鑰套用哪些 API 和應用程式限制:
找出目前使用 API 金鑰的 API
以下指標報表有助您找出目前已採用 API 金鑰的 API。使用這類報表可以:
- 瞭解 API 金鑰的使用情形
- 找出非預期的使用情形
- 確認是否可以放心刪除未使用的金鑰。如需刪除 API 金鑰的相關說明,請參閱「刪除未使用的 API 金鑰」一節。
套用 API 限制時,可根據這些報表建立清單 (列出要授權的 API),或是驗證系統自動產生的 API 金鑰限制建議。如要進一步瞭解建議的限制,請參閱「如何套用建議的限制」一節。如需有關 Metrics Explorer 使用方式的詳細資訊,請參閱「使用 Metrics Explorer 建立圖表」一文。
前往 Google Cloud 控制台的 Metrics Explorer。
登入並選取您要查看哪個專案的 API 金鑰。
前往「Metrics Explorer」頁面找出您的 API 類型:
如果 API 金鑰使用的「不是」Maps Embed API:請前往 Metrics Explorer 頁面。
如果 API 金鑰使用的是 Maps Embed API:請前往 Metrics Explorer。
檢查每個 API 金鑰:
選取「ADD FILTER」(新增篩選器)。
選取標籤
credential_id
。選取您要檢查哪個值的金鑰。
查看這個 API 金鑰目前用於哪些 API,並檢查使用情形是否正常。
完成後,請在使用中的篩選器該行結尾處,選取「移除篩選器」
,刪除額外的篩選器。
對於其餘金鑰,請重複執行以上操作。
限制 API 金鑰只能用於目前使用的 API。
如果發現未經授權的使用行為,請參閱「處理未經授權使用 API 金鑰的問題」一節。
使用 Metrics Explorer 選擇適當類型的應用程式限制
完成驗證並採取所有必要行動,確保 API 金鑰僅用於目前使用的 Google 地圖平台服務後,請一併確認 API 金鑰已套用正確的應用程式限制。
如有建議的 API 金鑰限制,請加以套用。詳情請參閱「套用建議的 API 金鑰限制」一節。
如果沒有建議的 API 金鑰限制,請使用 Metrics Explorer,根據回報的 platform_type
決定要套用的應用程式限制類型:
前往 Google Cloud 控制台的 Metrics Explorer。
登入並選取您要查看哪個專案的 API。
前往以下 Metrics Explorer 頁面:Metrics Explorer。
檢查每個 API 金鑰:
選取「ADD FILTER」(新增篩選器)。
選取標籤
credential_id
。選取您要檢查哪個值的金鑰。
完成後,請在使用中的篩選器該行結尾處,選取「移除篩選器」
,刪除額外的篩選器。
對於其餘金鑰,請重複執行以上操作。
找到 API 金鑰適用的平台類型後,請對該
platform_type
套用應用程式限制:PLATFORM_TYPE_JS
- 對金鑰套用網站限制。
PLATFORM_TYPE_ANDROID
- 對金鑰套用 Android 應用程式限制。
PLATFORM_TYPE_IOS
- 對金鑰套用 iOS 應用程式限制。
PLATFORM_TYPE_WEBSERVICE
- 您可能必須對金鑰套用 IP 位址限制,才能正確限制金鑰。如需 Maps Static API 和 Street View Static API 的其他選項,請參閱「保護使用 Static Web API 的應用程式」一節。如需 Maps Embed API 的進一步操作說明,請參閱「使用 Maps Embed API 的網站」一節。
- 我的 API 金鑰使用多種平台類型
- 只使用一個 API 金鑰,不足以妥善保護流量,請務必改用多個 API 金鑰。詳情請參閱「改用多個 API 金鑰」一節
針對各個應用程式使用不同的 API 金鑰
這個做法可限制每個金鑰的範圍,要是其中一個 API 金鑰遭駭,您可以直接刪除或重新產生受影響的金鑰,無須更新其他 API 金鑰。每個專案最多可建立 300 個 API 金鑰。詳情請參閱「API 金鑰限制」一文。
雖然基於安全起見,一個應用程式使用一個 API 金鑰是理想的做法,但也可以讓多個應用程式共用受限金鑰,前提是這些金鑰使用同一種應用程式限制類型。
套用建議的 API 金鑰限制
對於部分專案擁有者和編輯者,Google Cloud 控制台會根據未受限 API 金鑰在 Google 地圖平台上的使用情形和活動,建議對這些 API 金鑰施加特定的 API 金鑰限制。
如果有可用的建議,Google 地圖平台的「憑證」頁面會預先填入這些選項。
看不到建議或建議不完整的可能原因
您 (也) 在 Google 地圖平台以外的服務中使用 API 金鑰。如果您發現其他服務使用 API 金鑰的情況,請務必先完成下列操作,再套用建議:
確認 Google Cloud 控制台 Metrics Explorer 中顯示的 API 用量是否合理。
在待授權 API 的清單中,手動加入缺少的服務。
為已加進 API 清單的服務,手動加入所有缺少的應用程式限制。如果另外加入的服務需要其他類型的應用程式限制,請參閱「改用多個 API 金鑰」一節。
您的 API 金鑰未用於用戶端 SDK 或 API。
您將 API 金鑰用於最近 60 天內沒有人使用的低流量應用程式或網站。
您是不久之前才建立新金鑰,或是不久之前才在新的應用程式中部署現有金鑰。如果是這樣,請再多等幾天,讓系統更新建議。
您將 API 金鑰用於應用程式限制類型會相互衝突的多個應用程式,或是將同一個 API 金鑰用於太多不同的應用程式或網站。不論是哪一種情況,我們都建議您改用多個金鑰。詳情請參閱「改用多個 API 金鑰」一節。
看到的建議未顯示於圖表中的可能原因
您的應用程式或網站只傳送極短時間內遽增的流量。在這種情況下,請將「圖表」資料檢視切換為「資料表」或「兩者」,因為圖例中仍會顯示用量。詳情請參閱「切換圖表的完整圖例」一文。
您的流量來自 Maps Embed API。如需相關操作說明,請參閱「判斷哪些 API 正在使用 API 金鑰」一節。
應用程式或網站帶來的流量,超出 Google Cloud 控制台 Metrics Explorer 所提供的日期範圍。
套用建議的限制
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
如出現建議的限制,選取「Apply recommended restrictions」(套用建議的限制)。
注意:如果沒看到任何建議的限制,請參閱「設定 API 金鑰的 API 限制」一節設定適當的限制。
選取「查看 API 用量」,確認哪些服務正在使用 API 金鑰。如果看到 Google 地圖平台以外的服務,請先暫停操作,然後根據上述建議步驟進行手動檢查。請查看「套用建議的 API 金鑰限制」一節開頭的疑難排解步驟。
請仔細確認預先填入的限制,是否與要使用 API 金鑰的網站和應用程式相符。
最佳做法:記錄並移除與您服務無關的所有應用程式或 API 限制。如果某項功能因非預期的依附元件而無法運作,您可以加回必要的應用程式或 API。
如果您發現建議明顯遺漏某個應用程式、網站或 API,請手動加入,或是等待幾天的時間讓系統更新建議。
如果還需要進一步的建議相關協助,請與支援團隊聯絡。
選取「套用」。
應用程式套用建議後遭拒時的處理方式
如果您發現應用程式或網站在套用限制後遭拒,請在 API 回應錯誤訊息中找出要加入的應用程式限制。
如果是用戶端 SDK,請參閱:
- Maps JavaScript API 應用程式:查看瀏覽器偵錯控制台
- Android 應用程式:使用 Android Debug Bridge (adb) 或 Logcat
- iOS 應用程式:參閱「查看記錄訊息」一文
如要查看必要的 API 限制,請參閱「判斷哪些 API 正在使用 API 金鑰」一節。
如果無法決定要套用的限制,您可以:
- 記錄目前的限制供日後參考。
- 在調查問題期間暫時移除這些限制。如要查看一段時間內的用量,請按照「查看 API 金鑰使用情形」一節的步驟操作。
- 如有需要,請與支援團隊聯絡。
刪除未使用的 API 金鑰
請先確認 API 金鑰未用於正式環境,再刪除金鑰。只要沒有任何成功流量,刪除金鑰應該就不會有什麼問題。詳情請參閱「查看 API 金鑰使用情形」一節。
刪除 API 金鑰的做法如下:
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
選取要刪除的 API 金鑰。
選取靠近頁面頂端的「刪除」按鈕。
在「刪除憑證」頁面上,選取「刪除」。
刪除 API 金鑰需要幾分鐘的時間才會生效。作業完畢後,凡是使用已刪除 API 金鑰的流量都會遭拒。
重新產生 API 金鑰時請務必謹慎
如果您重新產生 API 金鑰,系統會建立一個新金鑰並採用舊金鑰的所有限制,同時啟動 24 小時計時器,計時結束後就會將舊的 API 金鑰刪除。
在這段期間,系統會同時接受新舊金鑰,讓您有足夠的時間將應用程式改為使用新金鑰。不過,這段期間過後,凡是使用舊版 API 金鑰的應用程式都會停止運作。
重新產生 API 金鑰前:
請先嘗試按照「限制 API 金鑰」一節的說明限制 API 金鑰。
如果因為應用程式限制類型相互衝突,而無法限制 API 金鑰,請按照「改用多個 API 金鑰」一節的說明,改用多個新的 (受限) 金鑰。這樣一來,您就能自行掌控改用並推出多個新 API 金鑰的時程。
如果前述建議不可行,必須重新產生 API 金鑰來防止未經授權的使用行為,請按照下列步驟操作:
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
開啟要重新產生的 API 金鑰。
選取頁面頂端的「重新產生金鑰」。
選取「Replace key」(取代金鑰)。
注意:如有必要,您可以將任何重新產生的金鑰復原為舊版,且沒有復原時間限制。
復原重新產生的金鑰
前往 Google Cloud 控制台,開啟 Google 地圖平台的「憑證」頁面。
開啟要復原的 API 金鑰。
選取「還原為先前的金鑰」。
在「還原」對話方塊中,選取「還原金鑰」。
復原後,金鑰原本的「新」版本會變成舊版,且會啟動一個新的 24 小時舊版停用計時器。您可以交錯使用這兩個金鑰值,直到您再次重新產生金鑰為止。
如果您再次重新產生金鑰,就會覆寫舊的無效金鑰值。
改用多個 API 金鑰
如要從多個應用程式使用一個 API 金鑰的做法,改為每個應用程式只使用一個專屬 API 金鑰,請按照下列步驟操作:
確認哪些應用程式需要新金鑰:
- 網頁應用程式最容易更新,因為所有程式碼都是由您控制。請規劃更新所有網路應用程式的金鑰。
- 更新行動應用程式相對困難許多,因為必須等到客戶更新應用程式後才能使用新金鑰。
建立及限制新金鑰:新增應用程式限制,以及至少一項 API 限制。詳情請參閱「建議最佳做法」一節。
將新金鑰加到應用程式:如果是行動應用程式,必須等到所有使用者都更新至內含新 API 金鑰的最新版應用程式,這項程序才算完成,因此可能需要花費數個月的時間。
保護使用 Static Web API 的應用程式
Static Web API (例如 Maps Static API 和 Street View Static API) 類似於網路服務 API 呼叫。
兩者都可以使用簡單的 HTTPS REST API 呼叫,且通常是在伺服器上產生 API 要求網址。不過,Static Web API 不會傳回 JSON 回應,而是產生圖片供您嵌入已產生的 HTML 程式碼。更重要的是,呼叫 Google 地圖平台服務的通常是使用者用戶端,而非伺服器。
使用數位簽章
建議您除了 API 金鑰,也應一律使用數位簽章。以及每天願意允許的未簽署要求數量 調整未簽署要求的配額 。
如要進一步瞭解數位簽章,請參閱「數位簽章指南」。
保護簽署密鑰
為保護 Static Web API,請勿將 API 簽署密鑰直接內嵌在程式碼或原始碼樹狀結構,或是暴露在用戶端應用程式。請遵循下列最佳做法來保護簽署密鑰:
在伺服器端 (而非用戶端) 簽署要求。如果您使用 JavaScript 在用戶端進行簽署,就等於向所有網站訪客暴露密鑰。因此,如果是動態產生的圖片,請一律於網頁顯示時,在伺服器端產生已簽署的 Maps Static API 和 Street View Static API 要求網址。如果是靜態網路內容,則可在 Cloud 控制台的 Google 地圖平台「憑證」頁面,使用「立即簽署網址」小工具。
將簽署密鑰儲存在應用程式原始碼和原始碼樹狀結構以外的位置。如果您先將簽署密鑰或任何其他私人資訊儲存在環境變數中,或是加入單獨儲存的檔案,然後才共用程式碼,共用檔案就不會包含簽署密鑰。如果您將簽署密鑰或任何其他私人資訊儲存在檔案中,請將這類檔案存放在應用程式原始碼樹狀結構外的位置,以免簽署密鑰出現在原始碼控管系統中。使用公開原始碼管理系統 (例如 GitHub) 時,請特別留意這點。
在使用網路服務的應用程式中保護 API 金鑰
將 API 金鑰儲存在應用程式原始碼或原始碼樹狀結構以外的位置。如果您先將 API 金鑰或任何其他資訊儲存在環境變數中,或是加入單獨儲存的檔案,然後才共用程式碼,共用檔案就不會包含 API 金鑰。使用公開原始碼管理系統 (例如 GitHub) 時,請特別留意這點。
在使用網路服務或 Static Web API 的行動應用程式中,保護 API 金鑰並簽署密鑰
為保護行動應用程式,請使用安全 KeyStore 或安全 Proxy 伺服器:
將 API 金鑰或簽署密鑰儲存在安全 KeyStore。這會讓有心人士更難以從應用程式抓取 API 金鑰和其他私人資料。
使用安全 Proxy 伺服器。Proxy 伺服器提供可靠來源,讓應用程式與適當的 Google 地圖平台 API 互動。如要進一步瞭解如何使用 Proxy 伺服器,請參閱「善用代理伺服器:搭配 Google Data API 用戶端程式庫使用 Proxy 伺服器」一文。
請在 Proxy 伺服器上建構 Google 地圖平台要求,不要允許用戶端透過 Proxy 轉發任意 API 呼叫。
請在 Proxy 伺服器上對 Google 地圖平台回應進行後續處理,並將用戶端不需要的資料篩除。
處理未經授權使用 API 金鑰的問題
如果發現未經授權的 API 金鑰使用行為,請採取以下行動解決問題:
限制金鑰:如果您在多個應用程式中使用同一個金鑰,請改用多個 API 金鑰,並針對各個應用程式使用不同的 API 金鑰。詳情請參閱:
只有在無法限制金鑰的情況下,才應該重新產生金鑰。請先詳閱「重新產生 API 金鑰時請務必謹慎」一節再繼續。
如果您還是有問題或需要協助,請與支援團隊聯絡。
建議的應用程式和 API 限制
以下幾節將針對各個 Google 地圖平台 API、SDK 或服務,建議適合採用的應用程式和 API 限制。
建議的 API 限制
下列 API 限制指南適用於整個 Google 地圖平台:
限制 API 金鑰僅用於預計採用該金鑰的 API,以下情況除外:
如果應用程式使用 Places SDK for Android 或 Places SDK for iOS,請授權 Places API。
如果應用程式使用 Maps JavaScript API,請一律授權該 API 使用金鑰。
如果您也使用下列任一 Maps JavaScript API 服務,建議您一併授權下列 API:
服務 API 限制 Directions Service, Maps JavaScript API Directions API Maps JavaScript API 距離矩陣服務 Distance Matrix API Elevation Service, Maps JavaScript API Elevation API Geocoding Service, Maps JavaScript API Geocoding API Places Library, Maps JavaScript API Places API
部分範例:
您目前使用 Maps SDK for Android 和 Places SDK for Android,因此加入 Maps SDK for Android 和 Places API 這兩個 API 限制。
您的網站使用 Maps JavaScript API Elevation Service 和 Maps Static API,因此您加入下列所有 API 的 API 限制:
- Maps JavaScript API
- Elevation API
- Maps Static API
建議的應用程式限制
使用 Maps JavaScript API 或 Static Web API 的網站
如果網站使用 Maps JavaScript 服務或 Static Web API,請使用 Websites
應用程式限制。
適用於使用以下 JavaScript 服務和 API 的網站:
1 如果是行動應用程式,建議使用原生的 Maps SDK for Android 和 Maps SDK for iOS。
2 另請參閱「保護使用網路服務或 Static Web API 的行動應用程式」一節。
使用 Maps Embed API 的網站
雖然使用 Maps Embed API 無須支付費用,但建議您還是要限制目前使用的 API 金鑰,防止金鑰在其他服務中遭到濫用。
最佳做法:另外建立 Maps Embed API 專屬的 API 金鑰,並限制該金鑰只能用於 Maps Embed API。這個 則能確保金鑰安全無虞,防止金鑰遭到未經授權使用 和其他 Google 服務一樣。
如果您無法建立 Maps Embed API 專用的 API 金鑰,請使用 Websites
應用程式限制保護金鑰。
使用網路服務的應用程式和伺服器
如果是使用網路服務的應用程式和伺服器,請使用 IP addresses
應用程式限制。
適用於使用下列 API 的應用程式和伺服器:
3 如果是行動應用程式,建議您使用原生的 Places SDK for Android 和 Places SDK for iOS。
Android 應用程式
如果是 Android 應用程式,請使用 Android apps
應用程式限制。
適用於使用下列 SDK 的應用程式和伺服器:
此外,您可以防止 API 金鑰意外被檢查版本,方法是 使用 Secrets Gradle 外掛程式可用來插入密鑰 擷取自本機檔案,而非儲存在 Android 資訊清單中。
iOS 應用程式
如果是 iOS 應用程式,請使用 iOS apps
應用程式限制。
適用於使用下列 SDK 的應用程式和伺服器: