多租使用者和 Azure 儲存體
Azure 儲存體 是幾乎每個解決方案中使用的基礎服務。 多租用戶解決方案通常會針對 blob、檔案、佇列和數據表記憶體使用 Azure 儲存體。 在此頁面上,我們會描述一些 Azure 儲存體 功能,這些功能對多租用戶解決方案很有用,然後在您規劃如何使用 Azure 儲存體 時,提供可協助您的指引連結。
支援多租使用者的 Azure 儲存體 功能
Azure 儲存體 包含許多支援多租使用者的功能。
共用存取簽章
當您從用戶端應用程式使用 Azure 儲存體 時,請務必考慮用戶端要求是否應該透過您控制的另一個元件傳送,例如內容傳遞網路或 API,或用戶端是否應該直接連線到您的記憶體帳戶。 可能會有充分的理由透過另一個元件傳送要求,包括快取網路邊緣的數據。 不過,在某些情況下,用戶端端點可以直接連線到 Azure 儲存體 下載或上傳數據是有利的。 此連線可協助您改善解決方案的效能,特別是當您使用大型 Blob 或大量檔案時。 它也會減少後端應用程式和伺服器上的負載,並減少網路躍點數目。 共用存取簽章 (SAS) 可讓您安全地提供用戶端應用程式存取 Azure 儲存體 中的物件。
共用存取簽章可用來限制用戶端可執行的作業範圍,以及他們可以執行作業的物件。 例如,如果您的所有租使用者都有共用記憶體帳戶,而且您會將所有租使用者 A 的數據儲存在名為 tenanta
的 Blob 容器中,您可以建立只允許租使用者 A 使用者存取該容器的 SAS。 如需詳細資訊,請參閱 隔離模型 來探索可用來隔離記憶體帳戶中租用戶數據的方法。
代 客密鑰模式 很有用,可用來從應用層發出限制和限定範圍的共用存取簽章。 例如,假設您有多租用戶應用程式,可讓用戶上傳影片。 您的 API 或應用程式層可以使用您自己的驗證系統來驗證用戶端。 接著,您可以將 SAS 提供給用戶端,讓他們將視訊檔案上傳至指定的 Blob,以及您指定的容器和 Blob 路徑。 客戶端接著會將檔案直接上傳至記憶體帳戶,避免 API 上的額外頻寬和負載。 如果他們嘗試從 Blob 容器讀取數據,或嘗試將數據寫入記憶體帳戶中另一個容器的不同部分,Azure 儲存體 會封鎖要求。 簽章會在可設定的時間週期之後到期。
預存存取原則 擴充 SAS 功能,可讓您定義單一原則,可在發出多個共用存取簽章時使用。
身分識別型訪問控制
Azure 儲存體 也會使用 Microsoft Entra 識別碼來提供身分識別型訪問控制。 這項功能也可讓您使用 屬性型訪問控制,讓您更精細地存取 Blob 路徑,或已以特定租使用者標識碼標記的 Blob。
生命週期管理
當您在多租用戶解決方案中使用 Blob 記憶體時,租使用者可能需要不同的數據保留原則。 當您儲存大量數據時,您可能也想要將特定租用戶的數據設定為自動移至 非經常性存取或封存儲存層,以達到成本優化的目的。
請考慮使用 生命週期管理原則 來設定所有租使用者的 Blob 生命週期,或針對租用戶子集。 生命週期管理原則可以套用至 Blob 容器,或套用至容器內的 Blob 子集。 不過,您可以在生命週期管理原則中指定的規則數目有限制。 如果您超過限制,請務必在多租用戶環境中規劃和測試此功能的使用,並考慮部署多個記憶體帳戶。
不可變儲存體
當您使用以時間為基礎的保留原則在記憶體容器上設定不可變的 Blob 記憶體時,Azure 儲存體 會防止在指定時間之前刪除或修改數據。 預防會在記憶體帳戶層強制執行,並套用至所有使用者。 即使是貴組織的系統管理員也無法刪除不可變的數據。
當您使用具有維護數據或記錄之法律或合規性需求的租使用者時,不可變的記憶體會很有用。 不過,您應該考慮如何在租使用者生命週期的內容中使用這項功能。 例如,如果租使用者已下架並要求刪除其數據,您可能無法滿足其要求。 如果您針對租用戶的數據使用不可變的記憶體,請考慮如何在服務條款中解決此問題。
伺服器端複製
在多租用戶系統中,有時候需要將數據從一個記憶體帳戶移至另一個記憶體帳戶。 例如,如果您在部署戳記之間移動租使用者,或重新平衡 分區化 記憶體帳戶集,則必須複製或移動特定租用戶的數據。 使用大量數據時,建議使用 伺服器端複製 API 來減少移轉資料所需的時間。
AzCopy 工具是一種應用程式,您可以從自己的電腦或虛擬機執行,以管理複製程式。 AzCopy 與伺服器端複製功能相容,並提供可編寫腳本的命令行介面,您可以從自己的解決方案執行。 AzCopy 也有助於上傳和下載大量數據。
如果您需要直接從程式代碼使用伺服器端複製 API,請考慮使用 [從 URL API 放置區塊] 、[從 URL API 放置頁面] 、[附加區塊從 URL API] 和使用較小的 Blob 時從 URL API 複製 Blob。
物件複寫
物件 複寫 功能會自動復寫來源與目的地記憶體帳戶之間的數據。 對象複寫是異步的。 在多租用戶解決方案中,當您需要在部署戳記之間持續復寫數據,或在 Geode 模式的實作中,這項功能很有用。
加密
Azure 儲存體 可讓您提供數據的加密金鑰。 在多租用戶解決方案中,請考慮將這項功能與 加密範圍結合,這可讓您為不同的租用戶定義不同的加密密鑰,即使數據儲存在相同的記憶體帳戶中也一樣。 藉由一起使用這些功能,您也可以為租使用者提供自己的數據控制權。 如果需要停用其帳戶,則刪除加密密鑰可確保其資料無法再存取。
監視
使用多租使用者解決方案時,請考慮您是否需要 測量每個租使用者的耗用量,並定義您需要追蹤的特定計量,例如每個租使用者所使用的記憶體數量(容量),或針對每個租用戶的數據執行的作業數目。 您也可以使用 成本配置 來追蹤每個租使用者使用量的成本,以及跨多個訂用帳戶啟用退款。
Azure 儲存體 提供內建的監視功能。 請務必考慮您將在 Azure 儲存體 帳戶內使用的服務。 例如,當您使用 Blob 時,可以檢視記憶體帳戶的總容量,但無法檢視單一容器。 相反地,當您使用檔案共享時,可能會看到每個共用的容量,但無法查看每個資料夾的容量。
您也可以記錄對 Azure 儲存體 所做的所有要求,然後匯總和分析這些記錄。 此方法可讓您針對每個租用戶匯總和分組數據的方式更有彈性。 不過,在建立大量要求以 Azure 儲存體 的解決方案中,請務必考慮您從此方法獲得的好處是否符合擷取和處理這些記錄的成本。
Azure 儲存體 清查提供另一種方法來測量 Blob 容器的總大小。
隔離模型
使用 Azure 儲存體 處理多租用戶系統時,您必須決定您想要使用的隔離等級。 Azure 儲存體 支援數個隔離模型。
每個租用戶的記憶體帳戶
最強的隔離等級是部署租使用者的專用記憶體帳戶。 這可確保所有記憶體金鑰都會隔離,而且可以獨立輪替。 這種方法可讓您調整解決方案,以避免每個記憶體帳戶適用的限制和配額,但您也必須考慮可部署到單一 Azure 訂用帳戶的記憶體帳戶數目上限。
注意
Azure 儲存體 有許多配額和限制,您應該在選取隔離模型時考慮這些配額和限制。 其中包括 azure 服務限制、延展性目標,以及 Azure 儲存體 資源提供者的延展性目標。
此外,Azure 儲存體 的每個元件都會提供租用戶隔離的進一步選項。
Blob 記憶體隔離模型
下表摘要說明 Azure 儲存體 Blob 的主要租用隔離模型之間的差異:
考量事項 | 共用 Blob 容器 | 每個租使用者的 Blob 容器 | 每個租用戶的記憶體帳戶 |
---|---|---|---|
資料隔離 | 中低。 使用路徑來識別每個租用戶的數據或階層命名空間 | 一般。 使用容器範圍的SAS URL來支援安全性隔離 | 高 |
效能隔離 | 低 | 低。 大部分的配額和限制都適用於整個記憶體帳戶 | 高 |
部署複雜度 | 低 | 中 | 高 |
作業複雜度 | 低 | 中 | 高 |
範例案例 | 儲存每個租使用者的少量 Blob | 發出租用戶範圍的SAS URL | 每個租用戶的個別部署戳記 |
共用 Blob 容器
使用 Blob 記憶體時,您可以選擇使用共用 Blob 容器,然後您可以使用 Blob 路徑來分隔每個租使用者的數據:
租用戶識別碼 | 範例 Blob 路徑 |
---|---|
tenant-a |
https://contoso.blob.core.windows.net/sharedcontainer/tenant-a/blob1.mp4 |
tenant-b |
https://contoso.blob.core.windows.net/sharedcontainer/tenant-b/blob2.mp4 |
雖然這種方法很容易實作,但在許多情況下,Blob 路徑不會在租用戶之間提供足夠的隔離。 這是因為 Blob 記憶體不提供目錄或資料夾的概念。 這表示您無法將存取權指派給指定路徑內的所有 Blob。 不過,Azure 儲存體 提供列出以指定前置詞開頭的 Blob 的功能,這在您使用共用 Blob 容器且不需要目錄層級訪問控制時很有用。
Azure 儲存體 的階層命名空間功能可讓您擁有更強大的目錄或資料夾概念,包括目錄特定的訪問控制。 這在擁有共用 Blob 容器的一些多租使用者案例中很有用,但您想要授與單一租用戶數據的存取權。
在某些多租用戶解決方案中,您可能只需要為每個租用戶儲存單一 Blob 或一組 Blob,例如自定義使用者介面的租用戶圖示。 在這些案例中,單一共用 Blob 容器可能已足夠。 您可以使用租使用者標識碼作為 Blob 名稱,然後讀取特定的 Blob,而不是列舉 Blob 路徑。
當您使用共用容器時,請考慮是否需要追蹤每個租用戶的數據和 Azure 儲存體 服務使用量,並規劃執行此動作的方法。 如需詳細資訊,請參閱 監視 。
每個租使用者的 Blob 容器
您可以在單一記憶體帳戶內為每個租使用者建立個別的 Blob 容器。 您可以在記憶體帳戶內建立的 Blob 容器數目沒有限制。
藉由為每個租使用者建立容器,您可以使用 Azure 儲存體 訪問控制,包括SAS來管理每個租用戶數據的存取權。 您也可以輕鬆地監視每個容器所使用的容量。
檔案記憶體隔離模型
下表摘要說明 Azure 儲存體 檔案的主要租用隔離模型之間的差異:
考量事項 | 共用檔案共用 | 每個租用戶的檔案共用 | 每個租用戶的記憶體帳戶 |
---|---|---|---|
資料隔離 | 中高。 套用租使用者特定檔案和目錄的授權規則 | 中高 | 高 |
效能隔離 | 低 | 中低。 大部分的配額和限制會套用至整個記憶體帳戶,但在每個共用層級上設定大小配額 | 高 |
部署複雜度 | 低 | 中 | 高 |
作業複雜度 | 低 | 中 | 高 |
範例案例 | 應用程式會控制所有檔案的存取 | 租使用者存取自己的檔案 | 每個租用戶的個別部署戳記 |
共用檔案共用
使用檔案共享時,您可以選擇使用共用檔案共享,然後使用檔案路徑來分隔每個租用戶的數據:
租用戶識別碼 | 範例檔案路徑 |
---|---|
tenant-a |
https://contoso.file.core.windows.net/share/tenant-a/blob1.mp4 |
tenant-b |
https://contoso.file.core.windows.net/share/tenant-b/blob2.mp4 |
當您使用可以使用伺服器訊息塊 (SMB) 通訊協定進行通訊的應用程式,以及當您使用內部部署或 Azure 中的 Active Directory 網域服務 時,檔案共用同時支援共用和目錄/檔案層級的授權。
在其他案例中,請考慮使用 SAS 來授與特定檔案共享或檔案的存取權。 當您使用 SAS 時,您無法將目錄的存取權授與。
當您使用共用檔案共享時,請考慮是否需要追蹤每個租用戶的數據和 Azure 儲存體 服務使用量,然後規劃執行此動作的方法(如有必要)。 如需詳細資訊,請參閱 監視 。
每個租用戶的檔案共用
您可以在單一記憶體帳戶內,為每個租使用者建立個別的檔案共用。 您可以在記憶體帳戶內建立的檔案共享數目沒有限制。
藉由為每個租使用者建立檔案共用,您可以使用 Azure 儲存體 訪問控制,包括 SAS 來管理每個租用戶數據的存取權。 您也可以輕鬆地監視每個檔案共用所使用的容量。
數據表記憶體隔離模型
下表摘要說明 Azure 儲存體 數據表的主要租用隔離模型之間的差異:
考量事項 | 每個租使用者具有分割區索引鍵的共享數據表 | 每個租用戶的數據表 | 每個租用戶的記憶體帳戶 |
---|---|---|---|
資料隔離 | 低。 應用程式強制執行隔離 | 中低 | 高 |
效能隔離 | 低 | 低。 大部分的配額和限制都適用於整個記憶體帳戶 | 高 |
部署複雜度 | 低 | 中 | 高 |
作業複雜度 | 低 | 中 | 高 |
範例案例 | 具有共用應用層的大型多租用戶解決方案 | 發出租用戶範圍的SAS URL | 每個租用戶的個別部署戳記 |
每個租使用者具有分割區索引鍵的共享數據表
搭配單一共享數據表使用數據表記憶體時,您可以考慮使用 內建的數據分割支援。 每個實體都必須包含分割區索引鍵。 租用戶標識碼通常是分割區索引鍵的絕佳選擇。
共用存取簽章和原則可讓您指定分割區索引鍵範圍,Azure 儲存體 確保包含簽章的要求只能存取指定的分割區索引鍵範圍。 這可讓您實 作代客密鑰模式,讓不受信任的用戶端存取單一租使用者的分割區,而不會影響其他租使用者。
針對大規模應用程式,請考慮每個數據表分割區和記憶體帳戶的最大輸送量。
每個租用戶的數據表
您可以在單一記憶體帳戶內為每個租使用者建立個別數據表。 您可以在記憶體帳戶內建立的數據表數目沒有限制。
藉由為每個租使用者建立數據表,您可以使用 Azure 儲存體 訪問控制,包括 SAS 來管理每個租用戶數據的存取權。
佇列記憶體隔離模型
下表摘要說明 Azure 儲存體 佇列的主要租用隔離模型之間的差異:
考量事項 | 共用佇列 | 每個租用戶的佇列 | 每個租用戶的記憶體帳戶 |
---|---|---|---|
資料隔離 | 低 | 中低 | 高 |
效能隔離 | 低 | 低。 大部分的配額和限制都適用於整個記憶體帳戶 | 高 |
部署複雜度 | 低 | 中 | 高 |
作業複雜度 | 低 | 中 | 高 |
範例案例 | 具有共用應用層的大型多租用戶解決方案 | 發出租用戶範圍的SAS URL | 每個租用戶的個別部署戳記 |
共用佇列
如果您選擇共用佇列,請考慮套用的配額和限制。 在具有高要求量的解決方案中,請考慮每秒 2,000 則訊息的目標輸送量是否足夠。
佇列不會提供數據分割或子佇列,因此所有租用戶的數據都可以交織在一起。
每個租用戶的佇列
您可以在單一記憶體帳戶內為每個租使用者建立個別佇列。 您可以在記憶體帳戶內建立的佇列數目沒有限制。
藉由為每個租使用者建立佇列,您可以使用 Azure 儲存體 訪問控制,包括 SAS 來管理每個租用戶數據的存取權。
當您動態為每個租使用者建立佇列時,請考慮應用層如何取用每個租使用者佇列中的訊息。 針對更進階的案例,請考慮使用 Azure 服務匯流排,其支援主題和訂用帳戶、會話和訊息自動轉送等功能,這在多租用戶解決方案中很有用。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主體作者:
- John Downs |首席軟體工程師
其他投稿人:
- 克利斯蒂安·蓋爾-波克曼 博士 |適用於 Azure 的主要客戶工程師 FastTrack
- 派翠克·霍恩 |適用於 Azure 的 FastTrack 資深客戶工程經理
- Ben Hummerstone |適用於 Azure 的主要客戶工程師 FastTrack
- 阿森·弗拉基米爾斯基 | 適用於 Azure 的主要客戶工程師 FastTrack
- Vic Perdana |雲端解決方案架構師、Azure ISV
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
下一步
檢閱 多租用戶的記憶體和數據方法。