選取並設定適當的方法來存取 Azure 佇列

已完成

Azure 儲存體支援使用 Microsoft Entra ID 來授權佇列資料的要求。 使用 Microsoft Entra ID,您可以使用 Azure 角色型存取控制 (Azure RBAC) 將權限授與安全性主體,其可能是使用者、群組或應用程式服務主體。 安全性主體是由 Microsoft Entra ID 進行驗證,以傳回 OAuth 2.0 權杖。 然後,可以使用權杖來授權對佇列服務的要求。

與共用金鑰授權相比,透過 Microsoft Entra ID 進行授權可提供更優越的安全性和易用性。 Microsoft 建議您盡可能對佇列應用程式使用 Microsoft Entra 授權,以確保存取權具有最低必要權限。

所有公用區域和國家雲端中的所有一般用途儲存體帳戶都可以使用 Microsoft Entra ID 進行授權。 只有使用 Azure Resource Manager 部署模型所建立的儲存體帳戶才支援 Microsoft Entra 授權。

佇列的 Microsoft Entra ID 概觀

當安全性主體 (使用者、群組或應用程式) 嘗試存取佇列資源時,除非其為可供匿名存取的佇列,否則必須為要求授權。 使用 Microsoft Entra ID 時,存取資源的流程分為兩個步驟:

  1. 首先,安全性主體的身分識別已通過驗證,並傳回 OAuth 2.0 權杖。 驗證步驟需要應用程式在執行階段要求 OAuth 2.0 存取權杖。 如果應用程式是在 Azure 實體內執行,例如 Azure VM、虛擬機器擴展集或 Azure Functions 應用程式,則可以使用受控識別來存取佇列資料。
  2. 接下來,將權杖當成要求的一部分傳遞給佇列服務,讓服務可用來授權存取指定的資源。 授權步驟需要將一或多個 Azure RBAC 角色指派給發出要求的安全性主體。

透過入口網站、PowerShell 或 Azure CLI 使用 Microsoft Entra 帳戶

若要了解如何使用 Microsoft Entra 帳戶存取 Azure 入口網站中的資料,請參閱從 Azure 入口網站進行的資料存取。 若要了解如何使用 Microsoft Entra 帳戶呼叫 Azure PowerShell 或 Azure CLI 命令,請參閱從 PowerShell 或 Azure CLI 進行的資料存取。

使用 Microsoft Entra ID 在應用程式程式碼中授權存取

若要透過 Microsoft Entra ID 授權對 Azure 儲存體的存取,您可以使用下列其中一個用戶端程式庫來取得 OAuth 2.0 權杖:

  • 針對大部分的開發案例,建議使用 Azure 身分識別用戶端程式庫。
  • Microsoft 驗證程式庫 (MSAL) 可能適用於某些進階案例。

Azure 身分識別用戶端程式庫

Azure 身分識別用戶端程式庫可透過 Azure SDK,簡化使用 Microsoft Entra ID 取得 OAuth 2.0 存取權杖以進行授權的程序。 適用於 .NET、Java、Python、JavaScript 和 Go 的最新版本的 Azure 儲存體用戶端程式庫與這些每一種語言的 Azure 身分識別程式庫整合,以提供一種簡單且安全的方法來取得存取權杖以授權 Azure 儲存體要求。

Azure 身分識別用戶端程式庫的優點是,無論您的應用程式是在開發環境還是在 Azure 中執行,它都可讓您使用相同的程式碼來取得存取權杖。 Azure 身分識別用戶端程式庫會傳回安全性主體的存取權杖。 當您的程式碼在 Azure 中執行時,安全性主體可能是 Azure 資源的受控識別、服務主體,或者是使用者或群組。 在開發環境中,用戶端程式庫會為使用者或服務主體提供存取權杖以用於測試目的。

Azure 身分識別用戶端程式庫所傳回的存取權杖會封裝在權杖認證中。 然後,您可以使用該權杖認證來取得服務用戶端物件,以用於對 Azure 儲存體執行授權的作業。 取得存取權杖和權杖認證的一個簡單方法是使用 Azure 身分識別用戶端程式庫所提供的 DefaultAzureCredential 類別。 DefaultAzureCredential 會嘗試透過連續嘗試幾種不同的認證類型來取得權杖認證。 DefaultAzureCredential 可在開發環境和在 Azure 中運作。

下表指出在各種案例中授權資料存取的其他資訊:

語言 .NET Java JavaScript Python Go
使用 Microsoft Entra ID 進行驗證的概觀 如何使用 Azure 服務驗證 .NET 應用程式 使用 Java 和 Azure 身分識別進行 Azure 驗證 使用 Azure SDK 向 Azure 驗證 JavaScript 應用程式 使用 Azure SDK向 Azure 驗證 Python 應用程式 N/A
使用開發人員服務主體驗證 於本機開發期間使用服務主體向 Azure 服務驗證 .NET 應用程式 使用服務主體進行 Azure 驗證 使用服務主體向 Azure 服務驗證 JS 應用程式 於本機開發期間使用服務主體向 Azure 服務驗證 Python 應用程式 使用服務主體進行 Azure SDK for Go 驗證
使用開發人員或用戶帳戶進行驗證 於本機開發期間使用開發人員帳戶向 Azure 服務驗證 .NET 應用程式 使用使用者認證進行 Azure 驗證 使用開發人員帳戶向 Azure 服務驗證 JS 應用程式 於本機開發期間使用開發人員帳戶向 Azure 服務驗證 Python 應用程式 使用 Azure SDK for Go 進行 Azure 驗證
從 Azure 裝載的應用程式驗證 使用 Azure SDK for .NET 向 Azure 資源驗證 Azure 裝載的應用程式 驗證 Azure 裝載的 Java 應用程式 使用 Azure SDK for JavaScript 向 Azure 資源驗證 Azure 裝載的 JavaScript 應用程式 使用 Azure SDK for Python 向 Azure 資源驗證 Azure 裝載的應用程式 使用受控識別向 Azure SDK for Go 進行驗證
從內部部署應用程式驗證 從裝載於內部部署的 .NET 應用程式向 Azure 資源進行驗證 N/A 向 Azure 資源驗證內部部署 JavaScript 應用程式 從裝載於內部部署的 Python 應用程式向 Azure 資源進行驗證 N/A
身分識別用戶端程式庫概觀 適用於 .NET 的 Azure 身分識別用戶端程式庫 適用於 Java 的 Azure 身分識別用戶端程式庫 適用於 JavaScript 的 Azure 身分識別用戶端程式庫 適用於 Python 的 Azure 身分識別用戶端程式庫 適用於 Go 的 Azure 身分識別用戶端程式庫

Microsoft Authentication Library (MSAL)

雖然 Microsoft 建議盡可能使用 Azure Identity 用戶端程式庫,但 MSAL 程式庫可能適合在特定的進階案例中使用。

當您使用 MSAL 取得 OAuth 權杖以存取 Azure 儲存體時,您必須提供 Microsoft Entra 資源識別碼。 Microsoft Entra 資源識別碼代表為其發出的權杖可用來提供對 Azure 資源的存取的對象。 對於 Azure 儲存體,資源識別碼可能專屬於單一的儲存體帳戶,也可能適用於任何的儲存體帳戶。

當您提供專屬於單一儲存體帳戶和服務的資源識別碼時,該資源識別碼會用來取得權杖,以便只授權對指定帳戶和服務的要求。 下表根據您正在使用的雲端列出了用於資源識別碼的值。 請以您的儲存體帳戶名稱取代 <account-name>

雲端 資源識別碼
Azure 全域 https://<account-name>.queue.core.windows.net
Azure Government https://<account-name>.queue.core.usgovcloudapi.net
Azure 中國 21Vianet https://<account-name>.queue.core.chinacloudapi.cn

您也可以提供適用於任何儲存體帳戶的資源識別碼,如下表所示。 此資源識別碼對於所有公有雲和主權雲都是相同的,且可用來取得權杖以授權對任何儲存體帳戶的要求。

雲端 資源識別碼
Azure 全域
Azure Government
Azure 中國 21Vianet
https://storage.azure.com/

指派 Azure 角色以取得存取權限

Microsoft Entra 會透過 Azure RBAC 來授權對受保護資源的存取權限。 Azure 儲存體會定義一組內建的 RBAC 角色,其中包含用來存取佇列資料的權限通用集合。 您也可以定義自訂角色以存取佇列資料。

Microsoft Entra 安全性主體可以是使用者、群組或應用程式服務主體,或是適用於 Azure 資源的受控識別。 指派給安全性主體的 RBAC 角色會決定該主體所擁有的權限。

在某些情況下,您可能需要針對佇列資源啟用細微存取,或在您對於儲存體資源有大量角色指派時簡化權限。 您可以使用 Azure 屬性型存取控制 (Azure ABAC) 來設定角色指派的條件。 您可以使用條件搭配自訂角色,或選取內建角色。 如需使用 ABAC 針對 Azure 儲存體資源設定條件的詳細資訊,請參閱使用 Azure 角色指派條件授權存取佇列。

當您建立 Azure 儲存體帳戶時,不會自動向您指派透過 Microsoft Entra ID 存取資料的權限。 您必須明確地將 Azure 角色指派給自己,才能存取佇列儲存體。 您可以在訂用帳戶、資源群組、儲存體帳戶或佇列層級指派此角色。

資源範圍

在將 Azure RBAC 角色指派給安全性主體之前,請先確定安全性主體應具有的存取範圍。 最佳做法指出,最好只授與最窄的可能範圍。 在更廣泛的範圍內定義的 Azure RBAC 角色會由其下的資源繼承。

您可以在下列層級設定存取 Azure 佇列資源的範圍,從最小範圍開始:

  • 個別佇列。 在此範圍中,角色指派會套用至佇列中的訊息,以及佇列屬性和中繼資料。
  • 儲存體帳戶。 在此範圍中,角色指派會套用至所有佇列及其訊息。
  • 資源群組。 在此範圍中,角色指派會套用至資源群組中所有儲存體帳戶內的所有佇列。
  • 訂用帳戶。 在此範圍中,角色指派會套用至訂用帳戶中所有資源群組的所有儲存體帳戶內所包含的所有佇列。
  • 管理群組。 在此範圍中,角色指派會套用至管理群組的所有訂用帳戶中,所有資源群組的所有儲存體帳戶內所包含的所有佇列。

佇列的 Azure 內建角色

Azure RBAC 提供數個內建角色,可讓您使用 Microsoft Entra ID 和 OAuth 來授與佇列資料的存取權。 可以對 Azure 儲存體中的資料資源提供權限的一些角色範例包括:

  • 儲存體佇列資料參與者:用來授與 Azure 佇列的讀取/寫入/刪除權限。
  • 儲存體佇列資料讀者:用來授與 Azure 佇列的唯讀權限。
  • 儲存體佇列資料訊息處理者:用來授與 Azure 儲存體佇列中訊息的瞄核、取出和刪除權限。
  • 儲存體佇列資料訊息傳送者:用來授與 Azure 儲存體佇列中訊息的新增權限。

只有針對資料存取明確定義的角色,才能允許安全性主體存取或佇列資料。 內建角色 (例如擁有者參與者儲存體帳戶參與者) 會允許安全性主體管理儲存體帳戶,但是不會透過 Microsoft Entra ID 提供該帳戶內佇列資料的存取權。 不過,如果角色包含 Microsoft.Storage/storageAccounts/listKeys/action,則獲指派該角色的使用者可以透過具有帳戶存取金鑰的共用金鑰授權來存取儲存體帳戶中的資料。

Azure 角色指派最多需要 30 分鐘的時間來傳播。

使用 Microsoft Entra 帳戶存取資料

您可以使用使用者的 Microsoft Entra 帳戶或使用帳戶存取金鑰 (共用金鑰授權),透過 Azure 入口網站、PowerShell 或 Azure CLI 來授與佇列資料的存取權。

不建議使用「共用金鑰」來進行授權,因為它可能不太安全。 為了獲得最佳的安全性,請停用透過「共用金鑰」對您的儲存體帳戶進行授權,如「防止 Azure 儲存體帳戶的共用金鑰授權」中所述。

使用存取金鑰和連接字串應僅限於未存取生產或敏感性資料的初始概念證明應用程式或開發原型。 否則,在對 Azure 資源進行驗證時,應一律優先使用 Azure SDK 中所提供的權杖型驗證類別。

Microsoft 建議用戶端使用 Microsoft Entra ID 或共用存取簽章 (SAS) 來授權存取 Azure 儲存體中的資料。

從 Azure 入口網站中存取資料

Azure 入口網站可以使用您的 Microsoft Entra 帳戶或帳戶存取金鑰來存取 Azure 儲存體帳戶中的佇列資料。 Azure 入口網站使用哪種授權方案取決於指派給您的 Azure 角色。

當您嘗試存取佇列資料時,Azure 入口網站會先檢查您是否已獲派具有 Microsoft.Storage/storageAccounts/listkeys/action 的 Azure 角色。 如果指派給您的角色具有此動作的權限,則 Azure 入口網站會透過共用金鑰授權,使用帳戶金鑰來存取佇列資料。 如果您未獲指派具有此動作的角色,則 Azure 入口網站會嘗試使用您的 Microsoft Entra 帳戶來存取資料。

若要從 Azure 入口網站使用您的 Microsoft Entra 帳戶存取佇列資料,您需要存取佇列資料的權限,而且您也需要權限來瀏覽 Azure 入口網站中的儲存體帳戶資源。 Azure 儲存體提供的內建角色會授與佇列資源的存取權,但不會授與儲存體帳戶資源的權限。 基於這個理由,入口網站的存取也需要指派 Azure Resource Manager 角色 (例如讀者角色),並將範圍設定在儲存體帳戶層級或更高層級。 讀者角色會授與最受限制的權限,但也可以接受另一個 Azure Resource Manager 角色來授與儲存體帳戶管理資源的存取權。

從 PowerShell 或 Azure CLI 進行的資料存取

Azure CLI 和 PowerShell 支援使用 Microsoft Entra 認證登入。 登入之後,您的工作階段就會在那些認證下執行。 若要深入了解,請參閱以下其中一篇文章: