使用適用於 JavaScript 的 Azure SDK 向 Azure 資源驗證 Azure 裝載的應用程式
在 Azure 中裝載應用程式時(使用像是 Azure App 服務、Azure 虛擬機器 或 Azure 容器執行個體 等服務),向 Azure 資源驗證應用程式的建議方法是使用受控識別。
受控識別會為您的應用程式提供身分識別,讓您的應用程式連線到其他 Azure 資源,而不需要使用秘密(例如密鑰 連接字串)。 在內部,Azure 知道您應用程式的身分識別,及其能夠連線至哪些資源。 Azure 會使用這項資訊自動取得應用程式Microsoft Entra 令牌,以允許它連線到其他 Azure 資源,而不需要管理(建立或輪替)驗證秘密。
受控識別類型
受控身分識別有兩種:
- 系統指派的受控識別 - 單一 Azure 資源
- 使用者指派的受控識別 - 多個 Azure 資源
本文涵蓋為應用程式啟用和使用系統指派受控識別的步驟。 如果您需要使用由使用者指派的受控識別,請參閱管理使用者指派的受控識別一文,以了解如何建立使用者指派的受控識別。
單一資源的系統指派受控識別
系統指派的受控識別是由 提供並直接系結至 Azure 資源。 當您在 Azure 資源上啟用受控識別時,您會取得系統為該資源指派的受控識別。 它會系結至 Azure 資源的生命週期。 因此,當刪除資源時,Azure 會自動為您刪除身分識別。 您只需要為裝載程式碼的 Azure 資源啟用受控識別即可,因此,這可說是最容易使用的受控識別類型。
多個資源的使用者指派受控識別
從概念上講,此身分識別是獨立的 Azure 資源。 您的解決方案有多個工作負載執行於多個 Azure 資源上,且這些資源全都需要共用相同的身分識別和相同的權限時,最常用到此身分識別。 例如,如果您的解決方案具有在多個 App Service 和虛擬機實例上執行的元件,而且它們都需要存取同一組 Azure 資源,跨這些資源建立和使用使用者指派的受控識別會有意義。
1 - 系統指派:在託管應用程式中啟用
第一個步驟是在裝載應用程式的 Azure 資源上啟用受控識別。 例如,如果您使用 Azure App 服務 裝載 Django 應用程式,則必須為該 App Service Web 應用程式啟用受控識別。 如果您使用虛擬機器來裝載您的應用程式,則應讓 VM 能夠使用受控識別。
您可以使用 Azure 入口網站或 Azure CLI,讓受控識別用於 Azure 資源。
2 - 將角色指派給受控識別
接下來,您必須判斷應用程式需要哪些角色 (權限),並將受控識別指派給 Azure 中的這些角色。 受控識別可以在資源、資源群組或訂閱範圍獲派角色。 此範例示範如何在資源群組範圍中指派角色,因為大部分的應用程式都會將其所有 Azure 資源群組組成單一資源群組。
3 - 在應用程式中實作 DefaultAzureCredential
類別 DefaultAzureCredential
會自動偵測正在使用受控識別,並使用受控識別向其他 Azure 資源進行驗證。 如 Azure SDK for JavaScript 驗證概觀一文所述,支援多個驗證方法,DefaultAzureCredential
並判斷運行時間所使用的驗證方法。 因此,您的應用程式可在相異的環境中使用不同的驗證方法,無須實作環境特定程式碼。
首先,將 @azure/身分 識別套件新增至您的應用程式。
npm install @azure/identity
接下來,針對在應用程式中建立 Azure SDK 用戶端物件的任何 JavaScript 程式代碼,您想要:
- 從模組匯入
DefaultAzureCredential
@azure/identity
類別。 - 建立
DefaultAzureCredential
物件。 - 將
DefaultAzureCredential
對象傳遞至 Azure SDK 用戶端物件建構函式。
下列程式碼區段示範其中一種範例。
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
在本機開發期間於本機工作站上執行上述程式代碼時,SDK 方法 DefaultAzureCredential()會查看應用程式服務主體的環境變數,或查看 VS Code、Azure CLI 或 Azure PowerShell 中的一組開發人員認證,其中任一項可用來在本機開發期間向 Azure 資源驗證應用程式。 如此一來,這個相同的程式代碼可用來在本機開發期間和部署至 Azure 時,向 Azure 資源驗證您的應用程式。