使用 Microsoft Entra ID 來驗證受控識別,以存取 Azure 服務匯流排資源
Azure 資源受控識別會在 Microsoft Entra ID 中為 Azure 服務提供自動受控識別。 您可以使用此身分識別來向任何支援 Microsoft Entra 驗證的服務 (例如,Azure 服務匯流排) 進行驗證,完全不需要程式碼中的認證。 如果您不熟悉受控識別,請參閱 Azure 資源的受控識別,再繼續閱讀本文。
以下是使用受控識別來存取服務匯流排實體的高階步驟:
為您的用戶端應用程式或環境啟用受控識別。 例如,為您的 Azure App Service 應用程式、Azure Functions 應用程式或執行應用程式的虛擬機器啟用受控識別。 以下是協助您進行此步驟的文章:
將 Azure 服務匯流排資料擁有者、Azure 服務匯流排資料傳送者或 Azure 服務匯流排資料接收者角色指派給適當範圍的受控識別 (Azure 訂用帳戶、資源群組、服務匯流排命名空間或服務匯流排佇列或主題)。 如需將角色指派給受控識別的指示,請參閱使用 Azure 入口網站指派 Azure 角色。
在您的應用程式中,使用受控識別和服務匯流排命名空間的端點來聯機到命名空間。
例如,在 .NET 中,您可以使用採用
TokenCredential
和fullyQualifiedNamespace
(字串,例如:cotosons.servicebus.windows.net
) 的 ServiceBusClient 建構函式) 參數,以使用受控識別連線到服務匯流排。 您會傳入 DefaultAzureCredential,其衍生自TokenCredential
並使用受控識別。 在DefaultAzureCredentialOptions
中,將ManagedIdentityClientId
設定為用戶端受控識別的識別碼。string fullyQualifiedNamespace = "<your namespace>.servicebus.windows.net>"; string userAssignedClientId = "<your managed identity client ID>"; var credential = new DefaultAzureCredential( new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId }); var sbusClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
重要
您可以停用服務匯流排命名空間的本機或 SAS 金鑰驗證,只允許透過 Microsoft Entra 驗證。 如需逐步指示,請參閱停用本機驗證。
Azure 服務匯流排的 Azure 內建角色
Microsoft Entra 會透過 Azure 角色型存取控制 (RBAC) (部分機器翻譯) 來授與受保護資源的存取權。 Azure 服務匯流排會定義一組 Azure 內建角色,其中包含用來存取服務匯流排實體的一般權限集合。 您也可以定義自訂角色以存取資料。
Azure 提供下列 Azure 內建角色,以授權存取服務匯流排命名空間:
- Azure 服務匯流排資料擁有者:使用此角色以允許對服務匯流排命名空間及其實體 (佇列、主題、訂閱和篩選) 的完整存取
- Azure 服務匯流排資料傳送者:使用此角色此允許將訊息傳送至服務匯流排佇列和主題。
- Azure 服務匯流排資料接收者:使用此角色此允許從服務匯流排佇列和訂用帳戶接收訊息。
若要在 Azure 入口網站中將角色指派給受控識別,請使用存取控制 (IAM) 頁面。 在 [服務匯流排命名空間] 頁面或 [服務匯流排佇列] 頁面或 [服務匯流排主題] 頁面上選取 [存取控制 (IAM)],以瀏覽至此頁面。 如需指派角色的逐步指示,請參閱使用 Azure 入口網站指派 Azure 角色。
資源範圍
將 Azure 角色指派給受控識別之前,請先判斷受控識別應該具有的存取範圍。 最佳做法指出,最好只授與最窄的可能範圍。
下列清單說明您可以將服務匯流排資源的存取範圍設定在什麼層級 (從最小的範圍開始):
佇列、主題或訂閱:角色指派適用於特定的服務匯流排實體。
服務匯流排命名空間:角色指派橫跨命名空間下服務匯流排的整個拓撲。
資源群組:角色指派會套用至資源群組下的所有服務匯流排資源。
訂用帳戶:角色指派會套用至訂用帳戶中所有資源群組的所有服務匯流排資源。
注意
請記住,Azure 角色指派最多可能需要五分鐘的時間傳播。
目前,Azure 入口網站不支援將使用者/群組/受控識別指派給主題訂用帳戶層級的服務匯流排 Azure 角色。 以下是使用 Azure CLI 命令的範例:az-role-assignment-create 能將身分識別指派給服務匯流排 Azure 角色:
az role assignment create \
--role $service_bus_role \
--assignee $assignee_id \
--scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription
如需內建角色定義方式的詳細資訊,請參閱了解角色定義。 如需建立 Azure 自訂角色的相關資訊,請參閱 Azure 自訂角色。
使用 SDK
在 .NET 中,ServiceBusClient 物件是使用採用完整命名空間和 TokenCredential
的建構函式來初始化。 DefaultAzureCredential
衍生自 TokenCredential
,其會自動使用為應用程式設定的受控識別。 受控識別內容到服務匯流排和授權交握的流程,都是由權杖認證自動處理。 它是比使用 SAS 更簡單的模型。
var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());
您可以使用 ServiceBusSender 和 ServiceBusReceiver 或 ServiceBusProcessor 一般傳送和接收訊息。
如需使用受控識別來傳送和接收訊息的完整逐步指示,請參閱下列快速入門。 這些快速入門具有使用服務主體來傳送和接收訊息的程式碼,但程式代碼與使用受控識別相同。
注意
受控識別只能在 Azure 環境中、在應用程式服務、Azure VM 和擴展集上運作。 對於 .NET 應用程式,Microsoft.Azure.Services.AppAuthentication 程式庫 (由服務匯流排 NuGet 套件使用) 提供讓應用程式透過此通訊協定進行提取的功能,也能支援本機部署經驗。 該程式庫還能讓您使用來自 Visual Studio、Azure CLI 2.0 或 Active Directory 整合式驗證的使用者帳戶,在部署機器上以本機方式測試程式碼。 如需使用此程式庫的本機開發選項詳細資訊,請參閱使用 .NET 對 Azure Key Vault 進行服務對服務驗證。
下一步
請參閱 GitHub上的這個 .NET Web 應用程式範例,此範例會使用受控識別來連線到服務匯流排來傳送和接收訊息。 將應用程式服務的身分識別新增至 Azure 服務匯流排資料擁有者角色。