使用 Azure Active Directory 授權

Azure 儲存體提供與Azure AD) Azure Active Directory (整合,以取得 Blob、佇列和資料表服務要求的身分識別型授權。 透過 Azure AD,您可以使用角色型存取控制 (RBAC) ,將 Blob、佇列和資料表資源的存取權授與使用者、群組或應用程式。 您可以將範圍設定為個別容器、佇列或資料表層級的許可權。

若要深入瞭解 Azure 儲存體 中的 Azure AD 整合,請參閱使用 Azure Active Directory 授權 Azure Blob 和佇列的存取權。

如需在應用程式中使用 Azure AD 之優點的詳細資訊,請參閱與 Azure Active Directory 整合

提示

使用 Azure AD 授權 Blob、佇列和資料表資料的存取權,可提供優於其他授權選項的安全性和便於使用。 當您使用 Azure AD 來授權應用程式提出的要求時,您可以避免使用您的程式碼來儲存帳戶存取金鑰,就像使用共用金鑰授權一樣。 雖然您可以繼續搭配 Blob、佇列和資料表應用程式使用共用金鑰授權,但 Microsoft 建議您盡可能移至 Azure AD。 如需Azure 儲存體中 Azure AD 整合的詳細資訊,請參閱使用 Azure Active Directory 授權 Azure Blob 和佇列的存取權。

使用 OAuth 存取權杖進行驗證

Azure 儲存體接受與包含儲存體帳戶之訂用帳戶相關聯之 Azure AD 租使用者的 OAuth 2.0 存取權杖。 Azure 儲存體接受下列專案的存取權杖:

  • 使用者
  • 服務主體
  • 適用於 Azure 資源的受控識別
  • 使用使用者委派的許可權的應用程式

Azure 儲存體會公開名為 user_impersonation 的單一委派範圍,允許應用程式採取使用者允許的任何動作。

若要要求Azure 儲存體權杖,請指定資源識別碼的值 https://storage.azure.com/

如需針對使用者和服務主體向 Azure AD 要求存取權杖的詳細資訊,請參閱 Azure AD 的驗證案例

如需針對以受控識別設定之資源要求存取權杖的詳細資訊,請參閱 如何在 Azure VM 上使用 Azure 資源的受控識別來取得存取權杖

使用 OAuth 權杖呼叫儲存體作業

若要使用 OAuth 存取權杖呼叫 Blob、佇列和資料表服務作業,請使用持有人配置在Authorization標頭中傳遞存取權杖,並指定服務版本 2017-11-09 或更高版本,如下列範例所示:

Request:
GET /container/file.txt
x-ms-version: 2017-11-09
Authorization: Bearer eyJ0eXAiO...V09ccgQ
User-Agent: PostmanRuntime/7.6.0
Accept: */*
Host: sampleoautheast2.blob.core.windows.net
accept-encoding: gzip, deflate

Response:
HTTP/1.1 200
status: 200
Content-Length: 28
Content-Type: text/plain
Content-MD5: dxG7IgOBzApXPcGHxGg5SA==
Last-Modified: Wed, 30 Jan 2019 07:21:32 GMT
Accept-Ranges: bytes
ETag: "0x8D686838F9E8BA7"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 09f31964-e01e-00a3-8066-d4e6c2000000
x-ms-version: 2017-11-09
x-ms-creation-time: Wed, 29 Aug 2018 04:22:47 GMT
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
x-ms-server-encrypted: true
Date: Wed, 06 Mar 2019 21:50:50 GMT
Welcome to Azure Storage!!

持有人挑戰

持有人挑戰是 OAuth 通訊協定 RFC 6750 的一部分,用於授權單位探索。 對於匿名要求,或具有無效 OAuth 持有人權杖的要求,伺服器會傳回狀態碼 401 (未經授權) 識別提供者和資源資訊。 請參閱 連結 ,以瞭解如何在向 Azure AD 進行驗證期間使用這些值。

Azure 儲存體 Blob 和佇列服務會針對 2019-12-12 版和更新版本傳回持有人挑戰。 Azure 儲存體資料表服務從 2020-12-06 版傳回持有人挑戰。 Azure Data Lake Storage Gen2傳回 2017-11-09 版和更新版本的持有人挑戰。

以下是當用戶端要求不包含匿名下載 Blob 要求中的持有人權杖時,持有人挑戰回應的範例:

Request:
GET /container/file.txt
x-ms-version: 2019-12-12
Host: sampleoautheast2.blob.core.windows.net

Response:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri=https://login.microsoftonline.com/<tenant_id>/oauth2/authorize resource_uri=https://storage.azure.com

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>NoAuthenticationInformation</Code>
    <Message>Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
RequestId:ec4f02d7-1003-0006-21f9-c55bc8000000
Time:2020-01-08T08:01:46.2063459Z</Message>
</Error>
參數 Description
authorization_uri 授權伺服器的 URI (實體端點)。 此值也可做為查閱索引鍵,以從探索端點取得伺服器的詳細資訊。 用戶端必須確認授權伺服器受到信任。 當資源受到 Azure AD 保護時,就足以確認 URL 開頭 https://login.microsoftonline.com 是 Azure AD 所支援的其他主機名稱。 租用戶特定資源應該一律會傳回租用戶特定授權 URI。
resource_id 傳回資源的唯一識別碼。 當用戶端應用程式要求資源的存取權杖時,用戶端應用程式可以使用此識別碼作為資源參數的值。 用戶端應用程式必須確認此值,否則惡意服務可能會引發權限提高攻擊。 防止攻擊的建議策略是確認resource_id符合所存取 Web API URL 的基底。 https://storage.azure.com是Azure 儲存體資源識別碼的一般用法。

使用 RBAC 管理存取權限

Azure AD 會處理透過 RBAC 存取受保護資源的授權。 您可以使用 RBAC 將角色指派給使用者、群組或服務主體。 每個角色都包含一組資源的許可權。 將角色指派給使用者、群組或服務主體之後,他們就能夠存取該資源。 您可以使用 Azure 入口網站、Azure 命令列工具和 Azure 管理 API 來指派存取權限。 如需 RBAC 的詳細資訊,請參閱搭配 Role-Based 存取控制 開始

針對Azure 儲存體,您可以將儲存體帳戶中容器或佇列中的資料存取權授與。 Azure 儲存體提供下列可與 Azure AD 搭配使用的內建 RBAC 角色:

如需如何為Azure 儲存體定義內建角色的詳細資訊,請參閱瞭解 Azure 資源的角色定義

您也可以定義自訂角色,以搭配 Blob 儲存體和 Azure 佇列使用。 如需詳細資訊,請參閱建立 Azure Role-Based 存取控制的自訂角色

呼叫資料作業的權限

下表描述 Azure AD 使用者、群組或服務主體呼叫特定Azure 儲存體作業所需的許可權。 若要讓用戶端呼叫特定作業,請確定用戶端指派的 RBAC 角色為該作業提供足夠的許可權。

Blob 服務作業的許可權

Blob 服務作業 RBAC 動作
列出容器 微軟。儲存體/storageAccounts/blobServices/containers/read (範圍設定為儲存體帳戶或更新版本)
設定 Blob 服務屬性 Microsoft.Storage/storageAccounts/blobServices/write
取得 Blob 服務屬性 Microsoft.Storage/storageAccounts/blobServices/read
預檢 Blob 要求 匿名
取得 Blob 服務統計資料 Microsoft.Storage/storageAccounts/blobServices/read
取得帳戶資訊 不支援
取得使用者委派金鑰 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action
建立容器 Microsoft.Storage/storageAccounts/blobServices/containers/write
取得容器屬性 Microsoft.Storage/storageAccounts/blobServices/containers/read
取得容器中繼資料 Microsoft.Storage/storageAccounts/blobServices/containers/read
設定容器中繼資料 Microsoft.Storage/storageAccounts/blobServices/containers/write
取得容器 ACL 不支援
Set Container ACL (設定容器 ACL) 不支援
租用容器 Microsoft.Storage/storageAccounts/blobServices/containers/write
刪除容器 Microsoft.Storage/storageAccounts/blobServices/containers/delete
還原容器 Microsoft.Storage/storageAccounts/blobServices/containers/write
列出 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
依容器中的標籤尋找 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action
放置 Blob 建立或取代:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/write
若要建立新的 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/add/action
從 URL 放置 Blob 建立或取代:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/write
若要建立新的 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/add/action
取得 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Get Blob Properties Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
設定 Blob 屬性 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
取得 Blob 中繼資料 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
設定 Blob 中繼資料 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
取得 Blob 標籤 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
設定 Blob 標籤 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
依標籤尋找 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action
租用 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
快照 Blob 微軟。儲存體/storageAccounts/blobServices/containers/blobs/write 或
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
複製 Blob 針對目的地 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/write 或 Microsoft。將新的 Blob 寫入目的地) 時,儲存體/storageAccounts/blobServices/containers/blobs/add/action (
針對相同儲存體帳戶中的來源 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/read
針對不同儲存體帳戶中的來源 Blob:以匿名方式提供,或包含有效的 SAS 權杖
從 URL 複製 Blob 針對目的地 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/write 或 Microsoft。將新的 Blob 寫入目的地) 時,儲存體/storageAccounts/blobServices/containers/blobs/add/action (
針對相同儲存體帳戶中的來源 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/read
針對不同儲存體帳戶中的來源 Blob:以匿名方式提供,或包含有效的 SAS 權杖
中止複製 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
刪除 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
取消刪除 Blob Microsoft.Storage/storageAccounts/blobServices/containers/write
Set Blob Tier Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Blob Batch 父要求:Microsoft。儲存體/storageAccounts/blobServices/containers/write
子要求:請參閱該要求類型的許可權。
設定不變性原則 Microsoft.Storage/storageAccounts/blobServices/containers/write
刪除不變性原則 Microsoft.Storage/storageAccounts/blobServices/containers/write
設定 Blob 合法保存 Microsoft.Storage/storageAccounts/blobServices/containers/write
放置區塊 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
從 URL 放置區塊 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
放置區塊清單 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
取得區塊清單 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
查詢 Blob 內容 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
放置頁面 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
機器翻譯 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
取得頁面範圍 (機器翻譯) Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
機器翻譯 針對目的地 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/write
針對來源 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/read
針對新的 Blob:Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/add/action
附加區塊 微軟。儲存體/storageAccounts/blobServices/containers/blobs/write 或 Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/add/action
從 URL 附加區塊 (機器翻譯) 微軟。儲存體/storageAccounts/blobServices/containers/blobs/write 或 Microsoft。儲存體/storageAccounts/blobServices/containers/blobs/add/action
設定 Blob 到期 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

佇列服務作業的許可權

佇列服務作業 RBAC 動作
列出佇列 微軟。儲存體/storageAccounts/queueServices/queues/read (範圍設定為儲存體帳戶或更新版本)
設定佇列服務屬性 Microsoft.Storage/storageAccounts/queueServices/read
取得佇列服務屬性 Microsoft.Storage/storageAccounts/queueServices/read
預檢佇列要求 匿名
取得佇列服務統計資料 Microsoft.Storage/storageAccounts/queueServices/read
建立佇列 Microsoft.Storage/storageAccounts/queueServices/queues/write
刪除佇列 Microsoft.Storage/storageAccounts/queueServices/queues/delete
取得佇列中繼資料 Microsoft.Storage/storageAccounts/queueServices/queues/read
設定佇列中繼資料 Microsoft.Storage/storageAccounts/queueServices/queues/write
取得佇列 ACL 無法透過 OAuth 取得
設定佇列 ACL 無法透過 OAuth 取得
放置訊息 微軟。儲存體/storageAccounts/queueServices/queues/messages/add/action 或 Microsoft。儲存體/storageAccounts/queueServices/queues/messages/write
取得訊息 微軟。儲存體/storageAccounts/queueServices/queues/messages/process/action 或 (Microsoft。儲存體/storageAccounts/queueServices/queues/messages/delete 和 Microsoft。儲存體/storageAccounts/queueServices/queues/messages/read)
查看訊息 Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
刪除訊息 微軟。儲存體/storageAccounts/queueServices/queues/messages/process/action 或 Microsoft。儲存體/storageAccounts/queueServices/queues/messages/delete
清除訊息 Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
更新訊息 Microsoft.Storage/storageAccounts/queueServices/queues/messages/write

資料表服務作業的許可權

資料表服務作業 RBAC 動作
設定資料表服務屬性 微軟。儲存體/storageAccounts/tableServices/write
取得表格服務屬性 微軟。儲存體/storageAccounts/tableServices/read
預檢資料表要求 匿名
取得資料表服務統計資料 微軟。儲存體/storageAccounts/tableServices/read
執行實體群組交易 子作業會個別授權
查詢資料表 微軟。儲存體/storageAccounts/tableServices/tables/read (範圍設定為儲存體帳戶或更新版本)
建立資料表 微軟。儲存體/storageAccounts/tableServices/tables/write
刪除資料表 微軟。儲存體/storageAccounts/tableServices/tables/delete
取得資料表 ACL 無法透過 OAuth 取得
設定資料表 ACL 無法透過 OAuth 取得
查詢實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/read
插入實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/write 或 Microsoft。儲存體/storageAccounts/tableServices/tables/entities/add/action
插入或合併實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/write 或 (Microsoft。儲存體/storageAccounts/tableServices/tables/entities/add/action 和 Microsoft。儲存體/storageAccounts/tableServices/tables/entities/update/action)
插入或取代實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/write 或 (Microsoft。儲存體/storageAccounts/tableServices/tables/entities/add/action 和 Microsoft。儲存體/storageAccounts/tableServices/tables/entities/update/action)
更新實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/write 或 Microsoft。儲存體/storageAccounts/tableServices/tables/entities/update/action
合併實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/write 或 Microsoft。儲存體/storageAccounts/tableServices/tables/entities/update/action
刪除實體 微軟。儲存體/storageAccounts/tableServices/tables/entities/delete

另請參閱