本文提供開發人員和系統管理員的逐步指引,以設定安全的應用程式驗證,以及Microsoft行星計算機專業版的存取權。 藉由套用Microsoft Entra ID 和受控識別,應用程式可以順暢地進行驗證,而不需管理認證,確保與行星計算機專業版資源的安全互動。 無論您的應用程式是在 Azure 或其他環境中執行,本指南都會概述必要的設定,包括角色型訪問控制 (RBAC) 和令牌取得,以啟用安全存取。
備註
對於使用 Azure AD B2C 或 Microsoft Entra External ID 支援社交身份提供者等功能的應用程式而言,這些應用程式必須繼續使用這些身份解決方案來代理驗證流量,因為行星電腦專業版不支援 Microsoft Entra ID 驗證的替代方案。
認證選項與建議
下表總結了根據應用程式執行位置及存取資源的方式所採用的認證方法:
| 應用程式裝載環境 | 必須指定存取類型 | 建議的身分識別類型 | Explanation |
|---|---|---|---|
| 在 Azure 上執行 (VM、App Service、Functions、Container Apps 等) | App-Only (應用程式自行運作) | 受控識別 (建議採用使用者指派項目) | 安全性與可管理性: 消除在程式碼或設定中儲存和管理憑證(秘密或憑證)的需求。 Azure 會自動處理認證輪替。 跨多個資源共用時,建議採用使用者指派項目。 |
| 在 Azure 上執行 (VM、App Service、Functions、Container Apps 等) | 委派 (應用程式代表使用者行事) | 受控識別 (建議採用使用者指派項目) | 利用 Azure 整合: 將應用程式本身的受控識別(Managed Identity)的安全性優點與標準使用者驗證流程結合在一起。 簡化 Azure 內的基礎結構設定。 |
| 在 Azure 外部執行 (內部部署、其他雲端、開發人員電腦) | App-Only (應用程式自行運作) | 服務主體 | 外部應用程式的標準: 非 Azure 應用程式的已建立方法,以Microsoft Entra 標識符進行驗證。 需要安全管理憑證(機密資訊或證書)。 |
| 在 Azure 外部執行 (內部部署、其他雲端、開發人員電腦) | 委派 (應用程式代表使用者行事) | 服務主體 | 外部應用程式的標準: 使用應用程式在 Entra ID 中註冊的身分識別,為 Azure 外部的應用程式啟用標準 OAuth 2.0 流程以進行使用者登入和同意。 |
| 在 Azure 之外執行(替代方案) | 僅限應用程式或委派 | 管理式識別 | 帶來 Azure 優點: 藉由將應用程式裝載在 Azure 計算服務中(例如 VM 或容器應用程式),即可使用受控識別的增強安全性和管理性,即使 來源 可能被視為非 Azure,仍可避免認證管理。 |
先決條件
- 包含作用中訂用帳戶的 Azure 帳戶 - 建立免費帳戶
- 現有的 GeoCatalog 資源。
在 Azure 上執行的應用程式
針對在 Azure 上執行的應用程式,我們建議您建立一種名為「使用者指派受控識別」的 Microsoft Entra 身分識別類型,以存取 GeoCatalog 資源。 應用程式可以使用受控識別來取得 Microsoft Entra 令牌(請參閱 取得存取令牌以存取 Microsoft 行星計算機專業版),而不需要管理任何認證。 如需受控識別的詳細資訊,以及要選擇的類型,請參閱 什麼是 Azure 資源的受控識別。 若要為在 Azure 上執行的應用程式建立使用者指派的受控識別,請遵循 如何針對 App Service 和 Azure Functions 使用受控識別。
未在 Azure 上執行的應用程式
對於未在 Azure 上執行的應用程式,例如內部部署或裝載在其他雲端提供者上,建議您在 Microsoft Entra 系統管理中心 註冊應用程式 ,包括接收安全性令牌的重新導向 URI,以建立應用程式與Microsoft身分識別平臺之間的信任關係。 在 Microsoft Entra 中註冊應用程式會自動為應用程式建立服務主體,稍後您可以指派 RBAC 角色。 如果您的應用程式有設定來設定 Microsoft Entra ID 驗證,您可以使用已註冊應用程式的「應用程式(用戶端)標識元」和「目錄(租使用者)標識碼」來執行此動作。
如果您先前無法在 Microsoft Entra 中註冊應用程式,您有另一個選項可在 Azure VM 或容器應用程式中執行應用程式。 您可以建立使用者指派的受控識別,並將其指派給虛擬機(VM)或容器應用程式,如這裡所述 - 在 Azure 虛擬機 (VM) 上設定受控識別 ,並在 Azure Container Apps 中設定受控識別。 應用程式可以使用受控識別登入,以存取 GeoCatalog 資源。 例如,若要讓應用程式使用使用者指派的受控識別在 VM 內執行,您可以使用:
!az login --identity --username <client_id|object_id|resource_id>
您可以從 Azure 入口網站找到受控識別的用戶端識別碼、物件識別碼或資源識別碼。 作為 CLI 的替代方案,範例 Python 程式代碼位於 取得存取令牌一節底下,以存取Microsoft行星電腦專業版。
azure.identity.DefaultAzureCredential(managed_identity_client_id=<client_id>)
如先前所述,為您的應用程式建立使用者指派的受控識別或服務主體之後,您必須決定應用程式存取案例的類型:僅限應用程式存取,僅作為應用程式本身的身分識別或委派存取權,代表登入的使用者。
僅限應用程式存取
在此存取案例中,應用程式會自行運作,且沒有任何使用者登入做為默認行為。 您可以繼續進行Microsoft Planetary Computer Pro RBAC 設定一節,為應用程式指派適當的角色。
委派存取
在此存取案例中,使用者已登入用戶端應用程式。 用戶端應用程式會代表使用者存取資源。 您必須確保應用程式的使用者已獲指派適當的 RBAC 角色,如 建立和管理使用者一節所述。 您也必須依照下列步驟,使用委派的權限來設定應用程式的 API 許可權:
- 登入 Microsoft Entra 系統管理中心
- 流覽至 [身分識別>應用程式>應用程式註冊],然後選取用戶端應用程式
- 在 [管理] 底下,選取 [API 許可權]
- 選取 [新增許可權]
- 選取 我的組織使用的 API 標籤
- 在搜尋欄位中輸入 Azure Orbital Planetary Computer
- 選擇匹配的條目(應用程式 ID 應為 6388acc4-795e-43a9-a320-33075c1eb83b)。 其顯示為 [Azure Orbital Microsoft Planetary Computer Pro]。
- 選取 [委派的權限] 方塊。 勾選 user_impersonation旁的方塊。
- 選擇 新增權限
- 選取 [授與管理員同意] 連結(假設您的意圖是在租戶中為此權限授與管理員同意)
從 QGIS 連線時也會使用委派驗證模式。
應用程式的 Microsoft Planetary Computer Pro RBAC 設定
一旦您為在 Azure 上執行的應用程式建立了受控身份,或者為未在 Azure 上執行但已在 Microsoft Entra 中註冊的應用程式建立了服務主體,您需要透過 RBAC 設定將正確的權限授予這些身份,以便它們能夠存取 GeoCatalog 資源。
以下逐步範例顯示如何設定角色型存取控制 (RBAC) 以將 [GeoCatalog 系統管理員] 角色指派給應用程式的使用者指派的受控識別。 您可以在 Azure 入口網站中遵循這些相同的步驟,為應用程式的服務主體設定 RBAC。
在 Azure 入口網站上,移至左側的 Microsoft Planetary Computer Pro 資源 IAM 索引標籤。
選取 [新增角色指派 ],然後選取 [作業功能角色] 下的 [GeoCatalog 系統管理員 ]
選取 [下一步] 按鈕,然後選取 [受控識別] 的選項按鈕
按一下選取成員,然後在右側的選取受控識別窗格中選取訂閱和使用者指派的受控識別。
選取 [ 下一步 ] 以確認資訊並完成 檢閱 + 指派。
取得存取令牌以存取Microsoft行星計算機專業版
設定 RBAC 授與應用程式適當的許可權之後,應用程式必須取得存取令牌來驗證要求。 下列 Python 範例程式代碼:
import azure.identity
credential = azure.identity.DefaultAzureCredential()
token = credential.get_token("https://geocatalog.spatio.azure.com/")
headers = {"Authorization": f"Bearer {token.token}"}
備註
如果您的應用程式已獲指派多個受控識別,則您需要明確傳遞正確的識別:azure.identity.DefaultAzureCredential(managed_identity_client_id=<client_id>)。 或者,您可以在 Azure 入口網站上設定應用程式的環境變數,以使用正確的受控識別用戶端標識碼來新增 "AZURE_CLIENT_ID" 。
備註
您可以根據預期的使用者驗證行為,將 .default 或 user_impersonation 新增為 範圍 credential.get_token() 。
備註
如果您的應用程式是 Web 應用程式,每當您對程式代碼或應用程式組態進行變更時,請務必關閉並重新開啟網頁瀏覽器,以避免使用快取的認證。
如需存取令牌的詳細資訊,請參閱 Microsoft身分識別平臺中的 存取令牌。 當您透過呼叫 DefaultAzureCredentials() 來取得存取權杖時,認證執行個體會快取所取得的權杖。 令牌有效期和刷新將自動處理。 您可以傳遞 DefaultAzureCredential 實例,在需要令牌之前叫用 GetToken() 或 GetTokenAsync(),以確保取得的令牌始終未過期。 如果您需要維護長時間開啟的工作階段,則可以在錯誤處理常式中處理權杖到期,以攔截例外狀況並取得新的權杖。
如果您無法使用 DefaultAzureCredentials() ,而改用其他方法,例如 AzureCliCredential() 取得存取令牌,則需要管理令牌的存留期和重新整理。 如需詳細資訊,請參閱 Microsoft身分識別平臺中的可設定令牌存留期 和 Microsoft身分識別平臺中的重新整理令牌 。