Azure Active Directory 的授權

Azure 儲存體針對 Blob、佇列和表格服務的要求以身分識別為基礎的驗證,提供Azure Active Directory (Azure AD) 的整合。 使用 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、佇列和表格服務作業,請使用 持有 人配置在 授權 標頭中傳遞存取權杖,並指定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>
參數 描述
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 角色型存取控制的自訂角色

呼叫資料作業的許可權

下表說明 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
取得使用者委派金鑰 微軟。儲存體/StorageAccounts/blobServices/generateUserDelegationKey
建立容器 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 無法透過 OAuth 使用
Set Container ACL (設定容器 ACL) 無法透過 OAuth 使用
刪除容器 Microsoft.Storage/storageAccounts/blobServices/containers/delete
租用容器 Microsoft.Storage/storageAccounts/blobServices/containers/write
列出 Blob 微軟。儲存體/StorageAccounts/blobServices/containers/blobs/read (範圍設定為容器)
放置 Blob 若為 create 或 replace: 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/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 權杖
中止複製 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
刪除 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
放置區塊 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
放置區塊清單 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
取得區塊清單 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
放置頁面 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

佇列服務作業的許可權

佇列服務操作 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

另請參閱