於本機開發期間使用開發人員帳戶向 Azure 服務驗證 Python 應用程式
開發人員建立雲端應用程式時,通常會在本機工作站上偵錯及測試應用程式。 當應用程式在本機開發期間於開發人員的工作站上執行時,仍必須向應用程式使用的任何 Azure 服務進行驗證。 本文涵蓋如何使用開發人員的 Azure 認證,在本機開發期間向 Azure 驗證應用程式。
若要讓應用程式在使用開發人員的 Azure 認證進行本機開發期間向 Azure 進行驗證,開發人員必須從 Azure CLI、Azure PowerShell 或 Azure 開發人員 CLI 登入 Azure。 適用於 Python 的 Azure SDK 能夠偵測開發人員已從其中一個工具登入,然後從認證快取取得必要的認證,以將應用程式驗證為 Azure 作為登入使用者。
這種方法對開發小組而言最容易設定,因為使用的是開發人員現有 Azure 帳戶。 不過,開發人員帳戶擁有的權限可能比應用程式需要的還多,因此超出應用程式在實際執行環境中執行時的權限。 您可以改為建立在本機開發期間使用的應用程式服務主體,設定其權限範圍與應用程式需要的存取權相符。
1 - 建立Microsoft專案安全組以進行本機開發
由於幾乎一律有多個開發人員在應用程式上工作,因此建議您先建立Microsoft Entra 安全組,以封裝應用程式在本機開發中所需的角色(許可權)。 此方法提供下列優點。
- 由於角色是在群組層級指派,因此指派給每位開發人員的角色都能保證相同。
- 如果應用程式需要新的角色,則只需要將它新增至應用程式的 Microsoft Entra 群組。
- 如果新的開發人員加入小組,他們只需要新增至正確的Microsoft Entra 群組,才能取得正確的許可權來處理應用程式。
如果您有開發小組的現有Microsoft Entra 安全組,您可以使用該群組。 否則,請完成下列步驟來建立Microsoft Entra 安全組。
az ad group create 命令可在 Microsoft Entra ID 中建立群組。 --display-name
和 --main-nickname
是必要參數。 提供給群組的名稱應根據應用程式而定。 在群組名稱中納入 'local-dev' 之類的字詞也很實用,這能指出群組的目的。
az ad group create \
--display-name MyDisplay \
--mail-nickname MyDisplay \
--description "<group-description>"
在輸出的命令中複製 id
屬性的值。 這是群組的物件識別碼。 您在後續步驟中需要用到它。 您也可以使用 az ad group show 命令來擷取此屬性。
若要將成員新增至群組,您需要 Azure 使用者的物件識別碼。 請使用 az ad user list 列出可用的服務主體。 --filter
參數命令接受 OData 樣式篩選,且可用於根據使用者顯示名稱篩選清單,如下所示。 --query
參數會將輸出限制為感興趣的資料行。
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
之後可用 az ad group member add 命令來將成員新增至群組。
az ad group member add \
--group <group-name> \
--member-id <object-id>
注意
根據預設,Microsoft Entra 安全組的建立僅限於目錄中的特定特殊許可權角色。 如果無法建立群組,請連絡目錄的系統管理員。 如果無法將成員新增至現有的群組,請連絡群組擁有者或目錄系統管理員。 若要深入了解,請參閱管理 Microsoft Entra 群組和群組成員資格。
2 - 將角色指派給 Microsoft Entra 群組
接著,您必須決定應用程式針對哪些資源需要哪些角色 (權限),並將這些角色指派給應用程式。 在此範例中,角色會指派給步驟 1 中建立的 Microsoft Entra 群組。 角色可以在資源、資源群組或訂用帳戶範圍指派。 此範例示範如何在資源群組範圍中指派角色,因為大部分的應用程式都會將其所有 Azure 資源群組組成單一資源群組。
使用者、群組或應用程式服務主體會使用 az role assignment create 命令,在 Azure 中指派角色。 您可以使用其物件識別碼來指定群組。
az role assignment create --assignee <objectId> \
--scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
--role "<roleName>"
若要取得可指派的角色名稱,請使用 az role definition list 命令。
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
例如,若要允許具有讀取、寫入和刪除對象標識碼的bbbbbbbb-1111-2222-3333-cccccccccccc
群組成員,以 Azure 儲存體 存取 msdocs-python-sdk-auth-example 資源群組中 msdocs-python-sdk-auth-example 資源群組aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
中,使用下列命令將記憶體 Blob 數據參與者角色指派給群組。
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"
如需在資源或訂閱等級使用 Azure CLI 指派權限的更多資訊,請參閱使用 Azure CLI 指派 Azure 角色一文。
3 - 使用 Azure CLI、Azure PowerShell、Azure 開發人員 CLI 或在瀏覽器中登入 Azure
在開發人員工作站上開啟終端,然後從 Azure CLI 登入 Azure。
az login
4 - 在應用程式中實作 DefaultAzureCredential
若要向 Azure 驗證 Azure SDK 用戶端物件,您的應用程式應該使用 DefaultAzureCredential
套件中的 azure.identity
類別。 在此案例中, DefaultAzureCredential
會循序檢查開發人員是否已使用 Azure CLI、Azure PowerShell 或 Azure 開發人員 CLI 登入 Azure。 如果開發人員使用任何這些工具登入 Azure,則應用程式會使用用來登入工具的認證向 Azure 進行驗證。
首先,將 azure.identity 套件新增至您的應用程式。
pip install azure-identity
接下來,針對在應用程式中建立 Azure SDK 用戶端物件的任何 Python 程式代碼,您會想要:
- 從模組匯入
DefaultAzureCredential
azure.identity
類別。 - 建立
DefaultAzureCredential
物件。 - 將
DefaultAzureCredential
對象傳遞至 Azure SDK 用戶端物件建構函式。
下列步驟的範例會顯示在下列程式代碼區段中。
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)