程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

使用用於 Python 的 Azure SDK 向 Azure 服務驗證 Python 應用

編輯:Python

當應用程序需要訪問 Azure 資源(如 Azure 存儲、Azure 密鑰保管庫 或 Azure 認知服務)時,必須向 Azure 進行身份驗證。 對於所有應用程序(無論是部署到 Azure、在本地部署還是在本地開發人員工作站上進行開發)而言,這一要求都是如此。 本文介紹使用 Azure SDK for Python 時向 Azure 驗證應用的建議方法。

對 Azure 資源進行身份驗證時,請使用基於令牌的身份驗證,而不是應用的連接字符串。 用於 Python 的 Azure SDK 提供支持基於令牌的身份驗證的類。 無論應用是在本地開發中、部署到 Azure 還是部署到本地服務器,應用都可以無縫地向 Azure 資源進行身份驗證。

應用用來向 Azure 資源進行身份驗證的特定類型的基於令牌的身份驗證取決於應用正在運行的位置。 下圖顯示了基於令牌的身份驗證類型。

  • 當開發人員在本地開發期間運行應用時: 應用使用用於本地開發的應用程序服務主體或開發人員的 Azure 憑據向 Azure 進行身份驗證。 這些選項在 本地開發過程中的“身份驗證”部分中進行了討論。
  • 當應用托管在 Azure 上時: 應用使用托管標識向 Azure 資源進行身份驗證。 在 服務器環境中的身份驗證部分中討論了此選項。
  • 在本地托管和部署應用時: 應用使用應用程序服務主體向 Azure 資源進行身份驗證。 在 服務器環境中的身份驗證部分中討論了此選項。

DefaultAzureCredential

Azure SDK 提供的 DefaultAzureCredential 類允許應用使用不同的身份驗證方法,具體取決於它們運行的環境。 這樣,應用就可以從本地開發升級到測試環境,而無需更改代碼。

為每個環境配置適當的身份驗證方法,並 DefaultAzureCredential 自動檢測和使用該身份驗證方法。 首選使用 DefaultAzureCredential 手動編碼條件邏輯或功能標志,以在不同的環境中使用不同的身份驗證方法。

有關 DefaultAzureCredential 使用該類的詳細信息,請參閱 應用程序中使用 DefaultAzureCredential 部分。

基於令牌的身份驗證的優點

生成適用於 Azure 的應用時,請使用基於令牌的身份驗證,而不是使用連接字符串。 基於令牌的身份驗證在使用連接字符串進行身份驗證方面具有以下優勢:

  • 本文中所述的基於令牌的身份驗證方法允許你在 Azure 資源上建立應用所需的特定權限。 這種做法遵循 最低特權原則。 相比之下,連接字符串向 Azure 資源授予完全權限。
  • 任何具有連接字符串的應用都可以連接到 Azure 資源,但基於令牌的身份驗證方法將資源的訪問權限限定為僅用於訪問資源的應用。
  • 使用托管標識時,沒有要存儲的應用程序機密。 應用更安全,因為沒有可以洩露的連接字符串或應用程序機密。
  • Azure SDK 中的 azure.identity 包在後台為你管理令牌。 托管令牌將基於令牌的身份驗證用作連接字符串。

將連接字符串的使用限制為無法訪問生產或敏感數據的初始概念證明應用或開發原型。 否則,在對 Azure 資源進行身份驗證時,Azure SDK 中提供的基於令牌的身份驗證類始終是首選的。

服務器環境中的身份驗證

在服務器環境中托管時,每個應用程序都會為每個運行應用程序的環境分配一個唯一 的應用程序標識 。 在 Azure 中,應用標識由 服務主體表示。 此特殊類型的安全主體可標識應用並將其身份驗證到 Azure。 要用於應用的服務主體類型取決於應用正在運行的位置:

身份驗證方法說明Azure 中托管的應用Azure 中托管的應用應使用 托管標識服務主體。 托管標識旨在表示托管在 Azure 中的應用的標識,並且只能與 Azure 托管的應用一起使用。

例如,Azure 應用服務中托管的Django Web 應用將分配托管標識。 然後,分配給應用的托管標識將用於向其他 Azure 服務對應用進行身份驗證。
 

了解來自 Azure 托管應用的身份驗證

托管在 Azure 外部的應用
(例如,本地應用)例如,托管在 Azure (外部的應用) 需要連接到 Azure 服務的應用應使用 應用程序服務主體。 應用程序服務主體表示 Azure 中的應用標識,並通過應用程序注冊過程創建。

例如,請考慮使用 Azure Blob 存儲 托管在本地的 Django Web 應用。 你將使用應用注冊過程為應用創建應用程序服務主體。 這 AZURE_CLIENT_ID一點 AZURE_TENANT_ID,並且 AZURE_CLIENT_SECRET 全部存儲為環境變量,供應用程序在運行時讀取,並允許應用使用應用程序服務主體向 Azure 進行身份驗證。
 

了解 Azure 外部托管的應用的身份驗證

在本地開發期間進行身份驗證

當應用程序在本地開發期間在開發人員工作站上運行時,它仍必須向應用使用的任何 Azure 服務進行身份驗證。 在本地開發期間,有兩個主要策略用於向 Azure 進行身份驗證:

身份驗證方法說明創建在本地開發期間要使用的專用應用程序服務主體對象。在此方法中,使用應用注冊過程在本地開發期間使用,設置專用 應用程序服務主體 對象。 然後,服務主體的標識將存儲為應用在本地開發中運行時要訪問的環境變量。

此方法允許將應用所需的特定資源權限分配給開發人員在本地開發期間使用的服務主體對象。 這種做法可確保應用程序僅有權訪問所需的特定資源,並復制應用在生產環境中擁有的權限。

此方法的缺點是,需要為每個在應用程序上運行的開發人員創建單獨的服務主體對象。
 

了解來自 Azure 托管應用的身份驗證

在本地開發期間使用開發人員的憑據向 Azure 驗證應用。在此方法中,開發人員必須從 Azure 工具擴展登錄到 Azure,以便Visual Studio Code、Azure CLI 或本地工作站上的Azure PowerShell。 然後,應用程序可以從憑據存儲訪問開發人員的憑據,並使用這些憑據從應用訪問 Azure 資源。

此方法的優勢是更容易設置,因為開發人員只需從 Visual Studio Code 或 Azure CLI 登錄到其 Azure 帳戶。 此方法的缺點是,開發人員的帳戶可能比應用程序所需的權限更多。 因此,應用程序不會准確復制在生產環境中運行的權限。
 

了解來自 Azure 托管應用的身份驗證

在應用程序中使用 DefaultAzureCredential

若要在 Python 應用中使用 DefaultAzureCredential ,請將 azure.identity 包添加到應用程序。

terminal復制

pip install azure-identity

下面的代碼示例演示如何實例化 DefaultAzureCredential 對象並將其與 Azure SDK 客戶端類一起使用。 在這種情況下,它是BlobServiceClient用於訪問Azure Blob 存儲的對象。

Python復制

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=credential)

該 DefaultAzureCredential 對象會自動檢測為應用配置的身份驗證機制,並獲取對應用進行身份驗證所需的令牌。 如果應用程序使用多個 SDK 客戶端,則可以將同一憑據對象與每個 SDK 客戶端對象一起使用。

使用 DefaultAzureCredential 時使用的身份驗證方法序列

在內部, DefaultAzureCredential 實現一系列憑據提供程序,以便將應用程序進行身份驗證到 Azure 資源。 每個憑據提供程序都可以檢測是否為應用配置了該類型的憑據。 該 DefaultAzureCredential 對象按順序檢查每個提供程序,並使用配置了憑據的第一個提供程序中的憑據。

下圖和表中顯示了查找憑據的順序 DefaultAzureCredential :

憑據類型說明應用程序服務主體該 DefaultAzureCredential 對象讀取一組環境變量,以確定應用程序服務主體 (應用程序用戶) 是否已為應用設置。 如果是這樣, DefaultAzureCredential 請使用這些值向 Azure 對應用進行身份驗證。

此方法最常用於服務器環境,但也可以在本地開發時使用它。托管標識如果應用程序部署到啟用了托管標識的 Azure 主機, DefaultAzureCredential 請使用該托管標識向 Azure 進行身份驗證。 有關使用托管標識的身份驗證,請參閱 服務器環境中的身份驗證部分。

僅當應用程序通過使用Azure 應用服務、Azure Functions或 Azure 虛擬機等服務在 Azure 中托管時,此方法才可用。Visual Studio Code如果使用 Visual Studio Code Azure 帳戶插件向 Azure 進行身份驗證,DefaultAzureCredential請使用同一帳戶向 Azure 驗證應用。Azure CLI如果使用 Azure CLI 中的命令向 Azure az login 進行身份驗證, DefaultAzureCredential 請使用同一帳戶向 Azure 驗證應用。Azure PowerShell如果已使用 Azure PowerShell 中的 Connect-AzAccount cmdlet 向 Azure 進行身份驗證,DefaultAzureCredential請使用同一帳戶向 Azure 驗證應用。交互如果已啟用, DefaultAzureCredential 則通過當前系統的默認浏覽器以交互方式對你進行身份驗證。 默認情況下禁用選項。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved