透過使用 Microsoft Entra ID 授權 blob 的存取權

Azure 儲存體支援使用 Microsoft Entra ID 來授權對 Blob 資料的要求。 透過使用 Microsoft Entra ID,您可以使用 Azure 角色基礎存取控制(Azure RBAC)授權安全主體,該主體可為使用者、群組或應用服務主體。 Microsoft Entra ID 會驗證安全性主體,並傳回 OAuth 2.0 權杖。 用這個令牌授權對 Blob 服務提出請求。

你可以在所有公有和國家雲端地區的所有通用儲存帳號和 Blob 儲存帳號中使用 Microsoft Entra ID 授權。 只有使用 Azure Resource Manager 部署模型建立的儲存帳號支援 Microsoft Entra 授權。

重要

為了實現最佳安全性,Microsoft 建議盡可能使用具有受控識別的 Microsoft Entra ID 來授權對於 Blob、佇列和資料表資料的請求。 相較於共用金鑰授權,使用 Microsoft Entra ID 和受控識別來授權可提供更優異的安全性,也更容易使用。 若要深入了解受控識別,請參閱什麼是 Azure 資源受控識別?。 如需如何為 .NET 應用程式啟用和使用受控識別的範例,請參閱使用 .NET 向 Azure 資源驗證 Azure 裝載的應用程式。

對於裝載於 Azure 外部的資源,例如內部部署應用程式,您可以透過 Azure Arc 使用受控識別。例如,在已啟用 Azure Arc 的伺服器上執行的應用程式可以使用受控識別來連線到 Azure 服務。 若要深入了解,請參閱透過已啟用 Azure Arc 的伺服器向 Azure 資源進行驗證。

針對使用共用存取簽章 (SAS) 的案例,Microsoft 建議使用使用者委派 SAS。 使用者委派 SAS 是以 Microsoft Entra 憑證進行保護,而非使用帳戶金鑰。 若要了解共用存取簽章,請參閱使用共用存取簽章授與資料的有限存取權。 如需如何使用 .NET 來建立和運用使用者委派 SAS 的範例,請參閱使用 .NET 建立 Blob 的使用者委派 SAS。

針對 Blob 的 Microsoft Entra ID 概觀

當安全性主體 (使用者、群組或應用程式) 嘗試存取 Blob 資源時,除非它是可供匿名存取的 Blob,否則要求必須獲得授權。 使用 Microsoft Entra ID 時,存取資源是一個兩步驟的過程:

  1. 首先,安全性主體的身分識別已通過驗證,並傳回 OAuth 2.0 權杖。

    驗證步驟需要應用程式在執行階段要求 OAuth 2.0 存取權杖。 如果應用程式在 Azure 實體 (例如 Azure VM、虛擬機器擴展集或 Azure Functions 應用程式) 內執行,則可使用受控識別來存取 Blob 資料。

  2. 接著,該令牌作為請求的一部分傳遞給 Blob 服務,服務利用它授權存取指定資源。

    授權步驟需要將一或多個 Azure RBAC 角色指派給發出要求的安全性主體。 如需詳細資訊,請參閱為 Azure 角色指派存取權限。

透過入口網站、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 身分識別用戶端程式庫

Azure Identity 用戶端函式庫透過 Azure SDK 使用 Microsoft Entra ID,簡化了取得 OAuth 2.0 存取權杖的授權流程。 .NET、Java、Python、JavaScript 及 Go 的 Azure 儲存體 用戶端函式庫最新版本,能與這些語言的 Azure Identity 函式庫整合,提供一種簡單且安全的方式來取得存取權杖以授權 Azure 儲存體 請求。

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

Azure Identity 用戶端函式庫回傳的存取權杖封裝在一個權杖憑證中。 然後,您可以使用該代幣憑證來取得服務客戶端物件,以用於對 Azure 儲存體執行授權的作業。 取得存取權杖和權杖憑證的一個簡單方法是使用 Azure Identity 客戶端函式庫提供的 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 應用程式
使用開發人員服務主體進行驗證 在本機開發期間使用服務主體對 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 資源進行驗證 向 Azure 資源驗證內部部署 JavaScript 應用程式 從裝載於內部部署的 Python 應用程式向 Azure 資源進行驗證
身分識別用戶端程式庫概觀 適用於 .NET 的 Azure 身分識別用戶端程式庫 適用於 Java 的 Azure 身分識別用戶端程式庫 適用於 JavaScript 的 Azure 身分識別用戶端程式庫 適用於 Python 的 Azure 身分識別用戶端程式庫 適用於 Go 的 Azure 身分識別用戶端程式庫

Microsoft驗證連結庫 (MSAL)

雖然 Microsoft 建議盡可能使用 Azure Identity 用戶端函式庫,但在某些進階情境下,MSAL 函式庫可能更適合使用。 如需詳細資訊,請參閱了解 MSAL。

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

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

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

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

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

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

Microsoft Entra 會透過 Azure RBAC 來授權對受保護資源的存取權限。 Azure 儲存體定義了一組內建的 RBAC 角色,其中包含用來存取 Blob 資料的常見權限集。 您也可以定義自訂角色來取得對 Blob 資料的存取權。 若要深入了解如何指派 Azure 角色以存取 Blob,請參閱指派 Azure 角色以存取 Blob 資料。

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

想了解如何為 blob 存取指派 Azure 角色,請參見 Assign an Azure role for access to blob data。

在某些情況下,你可能需要啟用對 blob 資源的細緻存取,或在儲存資源有大量角色指派時簡化權限。 使用 Azure 屬性基礎存取控制(Azure ABAC)來設定角色分配的條件。 您可以使用條件搭配自訂角色,或選取內建角色。 如需使用 ABAC 針對 Azure 儲存體資源設定條件的詳細資訊,請參閱使用 Azure 角色指派條件授權存取 Blob (預覽)。 如需有關 Blob 資料作業支援條件的詳細資訊,請參閱 Azure 儲存體中 Azure 角色指派條件的動作和屬性 (預覽)。

注意

當你建立 Azure 儲存體 帳號時,不會自動被賦予透過 Microsoft Entra ID 存取資料的權限。 您必須明確為自己指派一個 Azure 角色才能存取 Blob 儲存體。 您可以在您的訂用帳戶、資源群組、儲存體帳戶或容器的層級指派它。

資源範圍

在將 Azure RBAC 角色指派給安全性主體之前,請先確定安全性主體應具有的存取範圍。 永遠只給予最狹窄的範圍。 以更廣泛範圍定義的 Azure RBAC 角色,可由其下的資源繼承。

您可以在下列層級設定對 Azure Blob 資源的存取範圍 (從最窄的範圍開始):

  • 個別容器。 在此範圍內,角色指派適用於容器中的所有 Blob,以及容器的屬性與中繼資料。
  • 儲存帳戶。 在此範圍內,角色指派會套用至所有容器及其中的 Blob 物件。
  • 資源群組。 在此範圍內,角色指派適用於資源群組中所有儲存體帳戶內的所有容器。
  • 訂閱。 在此範圍內,角色指派適用於訂用帳戶中所有資源群組內的所有儲存體帳戶中的所有容器。
  • 管理群組。 在此範圍內,角色指派適用於管理群組中所有訂用帳戶內的所有資源群組中的所有儲存體帳戶內的所有容器。

如需 Azure RBAC 角色指派範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。

Azure Blob 的內建角色

Azure RBAC 提供多個內建角色,可透過 Microsoft Entra ID 和 OAuth 授權存取 blob 資料。 可以對 Azure 儲存體中的資料資源提供權限的一些角色範例包括:

若要了解如何將 Azure 內建角色指派給安全性主體,請參閱指派 Azure 角色以存取 Blob 資料。 若要了解如何列出 Azure RBAC 角色及其權限,請參閱列出 Azure 角色定義。

如需有關如何為 Azure 儲存體定義內建角色的詳細資訊,請參閱了解角色定義。 如需建立 Azure 自訂角色的相關資訊,請參閱 Azure 自訂角色。

只有為資料存取明確定義的角色才允許安全性主體存取 Blob 資料。 內建角色 (例如擁有者、參與者和儲存體帳戶參與者) 會允許安全性主體管理儲存體帳戶,但是不會透過 Microsoft Entra ID 提供該帳戶內 Blob 資料的存取權。 然而,如果一個角色包含Microsoft。Storage/storageAccounts/listKeys/action,然後該角色被指派的使用者可以透過共用金鑰授權存取儲存帳號中的資料。 如需詳細資訊,請參閱選擇如何在 Azure 入口網站中授權存取 Blob 資料。

如需有關適用於資料服務和管理服務的 Azure 儲存體 Azure 內建角色的詳細資訊,請參閱 Azure RBAC 的 Azure 內建角色中的儲存體一節。 此外,如需在 Azure 中提供權限的不同類型角色的詳細資訊,請參閱 Azure 角色、Microsoft Entra 角色和傳統訂用帳戶管理員角色。

重要

Azure 角色指派可能要花最多 30 分鐘才能生效。

適用於資料作業的存取權限

如需呼叫特定 Blob 服務作業所需權限的詳細資訊,請參閱呼叫資料作業的權限。

Blob 資料存取的角色指派傳遞延遲

當您指派角色或移除角色指派時,最多可能需要 10 分鐘的時間,變更才會生效。 如果你在管理組範圍內分配角色,可能需要更長的時間。

你可以在管理群組 範圍內指派內建角色並執行資料動作。 然而,在極少數情況下,某些資源類型的資料動作權限生效前,可能會有顯著的延遲(最多 12 小時)。 權限最終會被套用。 對於內建具備資料動作的角色,不建議在需要及時啟用或撤銷權限(如 Microsoft Entra Privileged Identity Management PIM)的情況下,在管理群組範圍內新增或移除角色指派。

如果你設定了適當的允許權限以存取 Microsoft Entra ID 的資料,但無法存取資料,例如出現「AuthorizationPermissionMismatch」錯誤,務必預留足夠時間讓你在 Microsoft Entra ID 中所做的權限變更能複製。 另外,請確保沒有任何拒絕指派會阻擋您的存取。 如需詳細資訊,請參閱了解 Azure 拒絕指派。

使用 Microsoft Entra 帳戶存取資料

你可以透過 Azure 入口網站、PowerShell 或 Azure CLI 授權存取 blob 資料,無論是使用 Microsoft Entra 帳號,或是使用帳號存取金鑰(共享金鑰授權)。

警告

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

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

Microsoft 建議用戶端使用 Microsoft Entra ID 或共用存取簽章 (SAS) 來授權存取 Azure 儲存體中的資料。 如需詳細資訊,請參閱授權資料存取的作業。

從 Azure 入口網站中存取資料

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

當你嘗試存取 blob 資料時,Azure 入口網站會先檢查你是否被分配了具備 Microsoft.Storage/storageAccounts/listkeys/action 的 Azure 角色。 如果你被分配了具有此動作的角色,Azure 入口網站會利用帳戶金鑰透過共享金鑰授權來存取 blob 資料。 如果你沒有被指派這個動作的角色,Azure 入口網站會嘗試用你的 Microsoft Entra 帳號存取資料。

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

Azure 入口網站會指出您瀏覽至容器時,所使用的授權配置。 如需有關在入口網站中存取資料的詳細資訊,請參閱選擇如何授與在 Azure 入口網站中存取 Blob 資料的權限。

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

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

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

僅支援在 2017-11-09 及更新版本的 REST API 中,使用 Microsoft Entra ID 授權 Blob 資料作業。 如需詳細資訊,請參閱 Azure 儲存體服務的版本。

下一步