對儲存體帳戶的要求強制執行最低必要版本的傳輸層安全性 (TLS)
用戶端應用程式和 Azure 儲存體帳戶之間的通訊,是使用傳輸層安全性 (TLS) 進行加密。 TLS 為標準密碼編譯通訊協定,可確保網際網路上用戶端與服務之間的隱私權和資料完整性。 如需 TLS 的詳細資訊,請參閱傳輸層安全性。
Azure 儲存體目前支援三種版本的 TLS 通訊協定:1.0、1.1 和 1.2。 Azure 儲存體在公用 HTTPS 端點上會使用 TLS 1.2,但是仍支援 TLS 1.0 和 TLS 1.1 以提供回溯相容性。
提示
Azure 儲存體倚靠不是以 OpenSSL 為基礎的 SSL 實作,因此不會公開至 OpenSSL 相關弱點。
Azure 儲存體帳戶允許用戶端以最舊版本的 TLS (TLS 1.0) 和更新版本來傳送和接收資料。 若要強制執行更嚴格的安全性措施,您可以設定您的儲存體帳戶,要求用戶端以較新版本的 TLS 傳送和接收資料。 如果儲存體帳戶需要最低版本的 TLS,則使用較舊版本提出的任何要求都會失敗。
本文會說明如何使用 DRAG (偵測、補救、稽核、治理 (Detection-Remediation-Audit-Governance)) 架構來持續管理儲存體帳戶的安全 TLS。
如需從用戶端應用程式傳送要求時如何指定特定版本 TLS 的詳細資訊,請參閱設定用戶端應用程式的傳輸層安全性 (TLS)。
注意
用戶端將資料傳送至儲存體帳戶或從中接收資料時使用的加密套件,取決於使用的 TLS 版本。 除了要求最低 TLS 版本以外,無法將儲存體帳戶設定為封鎖使用特定加密。 如果您需要在連線至儲存體帳戶時只允許特定加密套件,請考慮使用 Azure 應用程式閘道。 如需針對此目的使用應用程式閘道的詳細資訊,請參閱在 Azure 應用程式閘道上設定 TLS 原則版本和加密套件。
偵測用戶端應用程式所使用的 TLS 版本
當您針對儲存體帳戶強制執行最低的 TLS 版本時,會有拒絕用戶端 (使用舊版 TLS 傳送資料) 所提出要求的風險。 若要了解設定最低 TLS 版本會如何影響用戶端應用程式,Microsoft 建議您啟用 Azure 儲存體帳戶的記錄,並在一段時間後分析記錄,以偵測用戶端應用程式使用哪個 TLS 版本。
若要將要求記錄到您的 Azure 儲存體帳戶並判斷用戶端所使用的 TLS 版本,您可以使用 Azure 監視器中的 Azure 儲存體記錄。 如需詳細資訊,請參閱監視 Azure 儲存體。
Azure 監視器中的 Azure 儲存體記錄支援使用記錄查詢來分析記錄資料。 若要查詢記錄,您可以使用 Azure Log Analytics 工作區。 若要深入了解記錄查詢,請參閱教學課程:開始使用 Log Analytics 查詢。
若要使用 Azure 監視器記錄 Azure 儲存體資料,並使用 Azure Log Analytics 進行分析,您必須先建立診斷設定,指出您想要記錄資料的要求類型和記憶體服務。 若要在 Azure 入口網站中建立診斷設定,請執行以下步驟:
在包含您的 Azure 儲存體帳戶的訂用帳戶中建立新的 Log Analytics 工作區。 設定儲存體帳戶的記錄後,Log Analytics 工作區中就會提供記錄。 如需詳細資訊,請參閱在 Azure 入口網站中建立 Log Analytics 工作區。
在 Azure 入口網站中,瀏覽至您的儲存體帳戶。
在 [監視] 區段中,選取 [診斷設定]。
選取您要記錄要求的 Azure 儲存體服務。 例如,選擇 [Blob] 以將要求記錄至 Blob 儲存體。
選取 [新增診斷設定]。
提供診斷設定的名稱。
在 [類別詳細資料] 底下的 [記錄] 區段中,選擇要記錄的要求類型。 您可以記錄讀取、寫入和刪除要求。 例如,選擇 [StorageRead] 和 [StorageWrite] 會將讀取和寫入要求記錄到選取的服務。
在 [目的地詳細資料] 底下,選取 [傳送至 Log Analytics]。 選取您的訂用帳戶和您稍早建立的 Log Analytics 工作區,如下圖所示。
建立診斷設定後,系統後續會根據該設定記錄儲存體帳戶的要求。 如需詳細資訊,請參閱建立診斷設定以收集 Azure 中的資源記錄和計量。
如需 Azure 儲存體記錄在 Azure 監視器中的可用欄位參考,請參閱資源記錄。
依 TLS 版本查詢記錄的要求
Azure 監視器中的 Azure 儲存體記錄包含用來將要求傳送至儲存體帳戶的 TLS 版本。 使用 TlsVersion 屬性來檢查已記錄要求的 TLS 版本。
若要判斷在過去七天內使用不同 TLS 版本對 Blob 儲存體發出多少要求,請開啟您的 Log Analytics 工作區。 接下來,將下列查詢貼入新的記錄查詢中,然後執行。 請記得將括弧中的預留位置值取代為您自己的值:
StorageBlobLogs
| where TimeGenerated > ago(7d) and AccountName == "<account-name>"
| summarize count() by TlsVersion
結果會顯示使用每個 TLS 版本所提出的要求數目計數:
依呼叫者 IP 位址和使用者代理程式標頭查詢記錄的要求
Azure 監視器中的 Azure 儲存體記錄也包含呼叫者 IP 位址和使用者代理程式標頭,以協助您評估哪些用戶端應用程式存取了儲存體帳戶。 您可以分析這些值,以決定用戶端應用程式是否必須更新為使用較新的 TLS 版本,或者是否可以接受當用戶端的要求不是以最低 TLS 版本傳送時失敗的情形。
若要判斷哪些用戶端在過去七天內使用 TLS 1.2 以前的 TLS 版本提出要求,請將下列查詢貼入新的記錄查詢中,然後執行。 請記得將括弧中的預留位置值取代為您自己的值:
StorageBlobLogs
| where TimeGenerated > ago(7d) and AccountName == "<account-name>" and TlsVersion != "TLS 1.2"
| project TlsVersion, CallerIpAddress, UserAgentHeader
使用最低版本的 TLS 來補救安全性風險
當您確信使用舊版 TLS 的用戶端流量極少,或是可接受使用舊版 TLS 提出要求失敗時,您就可以開始在儲存體帳戶上強制執行最低版本的 TLS。 要求用戶端使用最低版本的 TLS 來對儲存體帳戶提出要求,是將資料安全性風險降至最低的策略一部分。
重要
如果您使用連線到 Azure 儲存體的服務,請確定該服務使用適當的 TLS 版本將要求傳送至 Azure 儲存體,然後再設定儲存體帳戶的必要最低版本。
設定儲存體帳戶的最低 TLS 版本
若要設定儲存體帳戶的最低 TLS 版本,請針對帳戶設定 MinimumTlsVersion 版本。 此屬性適用於使用 Azure Resource Manager 部署模型建立的所有儲存體帳戶。 如需 Azure Resource Manager 部署模型的詳細資訊,請參閱儲存體帳戶概觀。
MinimumTlsVersion 屬性的預設值依據您的設定方式而有所不同。 當您使用 Azure 入口網站建立儲存體帳戶時,最低 TLS 版本預設會設定為 1.2。 當您使用 PowerShell、Azure CLI 或 Azure Resource Manager 範本建立儲存體帳戶時,預設不會設定 MinimumTlsVersion 屬性,而且在您明確設定之前,不會傳回值。
如果未設定 MinimumTlsVersion 屬性,其值可能會顯示為 Null 或空字串,依據內容而定。 如果未設定屬性,儲存體帳戶將會允許以 TLS 1.0 版或更高版本傳送的要求。
當您使用 Azure 入口網站建立儲存體帳戶時,最低 TLS 版本預設會設定為 1.2。
若要使用 Azure 入口網站設定現有儲存體帳戶的最低 TLS 版本,請遵循下列步驟:
注意
在您更新儲存體帳戶的最低 TLS 版本之後,最多可能需要 30 秒的時間,變更才會完全傳播。
設定最低 TLS 版本需要 Azure 儲存體資源提供者 2019-04-01 版或更新版本。 如需詳細資訊,請參閱 Azure 儲存體資源提供者 REST API。
檢查多個帳戶的必要最低 TLS 版本
若要透過最佳效能檢查一組儲存體帳戶上的必要最低 TLS 版本,您可以使用 Azure 入口網站中的 Azure Resource Graph Explorer。 若要深入了解如何使用 Resource Graph Explorer,請參閱快速入門:使用 Azure Resource Graph Explorer 執行您的第一個 Resource Graph 查詢。
在 Resource Graph Explorer 中執行下列查詢會傳回儲存體帳戶的清單,並顯示每個帳戶的最低 TLS 版本:
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend minimumTlsVersion = parse_json(properties).minimumTlsVersion
| project subscriptionId, resourceGroup, name, minimumTlsVersion
從用戶端測試最低 TLS 版本
若要測試儲存體帳戶的必要最低 TLS 版本是否禁止使用舊版進行呼叫,您可以將用戶端設定為使用較舊版本的 TLS。 如需設定用戶端使用特定 TLS 版本的詳細資訊,請參閱設定用戶端應用程式的傳輸層安全性 (TLS)。
當用戶端使用不符合為帳戶所設定最低 TLS 版本的 TLS 版本來存取儲存體帳戶時,Azure 儲存體會傳回錯誤碼 400 錯誤 (不正確的要求) 以及訊息,指出所使用的 TLS 版本不允許對此儲存體帳戶提出要求。
注意
當您為儲存體帳戶設定最低 TLS 版本時,會在應用程式層強制執行最低版本。 當您直接針對儲存體帳戶端點執行時,嘗試在通訊協定層上判斷 TLS 支援的工具,可能還會傳回除了必要最低版本以外的 TLS 版本。
使用 Azure 原則對合規性進行稽核
如果您有大量的儲存體帳戶,您可能會想要執行稽核,以確定所有帳戶皆已針對您組織所需的最低 TLS 版本進行設定。 若要稽核一組儲存體帳戶的合規性,請使用 Azure 原則。 Azure 原則是一項服務,可讓您用來建立、指派和管理將規則套用至 Azure 資源的原則。 當您使用 Azure 原則時,這些資源會符合您的公司標準及服務等級協定規範。 如需詳細資訊,請參閱 Azure 原則概觀。
建立具有稽核效果的原則
Azure 原則支援的效果可判斷對資源評估原則規則時所發生的情況。 當資源不符合規範時,此稽核效果會建立一則警告,但不會停止要求。 如需有關效果的詳細資訊,請參閱了解 Azure 原則效果。
若要使用 Azure 入口網站以最低 TLS 版本的「稽核」結果來建立原則,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至 [Azure 原則] 服務。
在 [編寫] 區段底下,選取 [定義]。
選取 [新增原則定義] 以建立新的原則定義。
在 [ 定義位置] 欄位中,選取 [更多] 按鈕以指定稽核原則資源所在的位置。
指定原則的名稱。 您可以選擇性指定說明和類別。
在 [原則規則] 底下,將下列原則定義新增至 [policyRule] 區段。
{ "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "anyOf": [ { "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion", "notEquals": "TLS1_2" }, { "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion", "exists": "false" } ] } ] }, "then": { "effect": "audit" } } }
儲存原則。
指派原則
接著,將原則指派給資源。 原則的範圍會對應至該資源及其底下的任何資源。 如需原則指派的詳細資訊,請參閱 Azure 原則指派結構。
若要使用 Azure 入口網站指派原則,請遵循下列步驟:
- 在 Azure 入口網站中,瀏覽至 [Azure 原則] 服務。
- 在 [編寫] 區段底下,選取 [指派]。
- 選取 [指派原則] 以建立新的原則指派。
- 在 [範圍] 欄位中,選取原則指派的範圍。
- 在 [原則定義] 欄位中,選取 [更多] 按鈕,然後從清單中選取您在上一節中定義的原則。
- 提供原則指派的名稱。 描述是選擇性的。
- 將 [原則強制執行] 的設定保留為 [已啟用]。 此設定不會影響稽核原則。
- 選取 [檢閱 + 建立] 以建立指派。
檢視合規性報告
指派原則之後,您可以檢視合規性報告。 稽核原則的合規性報告會提供哪些儲存體帳戶不符合原則的相關資訊。 如需詳細資訊,請參閱取得原則合規性資料。
在建立原則指派之後,可能需要幾分鐘的時間,合規性報告才會變成可用狀態。
若要在 Azure 入口網站中檢視合規性報告,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至 [Azure 原則] 服務。
選取 [合規性]。
篩選您在上一個步驟中建立的原則指派名稱結果。 報告會顯示有多少資源不符合原則。
您可以向下切入報告以取得其他詳細資料,包括不符合規範的儲存體帳戶清單。
使用 Azure 原則強制執行最低 TLS 版本
Azure 原則可藉由確保 Azure 資源遵循需求和標準,以支援雲端治理。 若要在您的組織中強制執行儲存體帳戶的最低 TLS 版本需求,您可以建立原則,以防止建立新的儲存體帳戶,將最低 TLS 需求設定為比原則規定還要舊的 TLS 版本。 如果現有帳戶的 TLS 版本設定與此原則不相容,此原則也會防止對現有帳戶進行所有設定變更。
強制原則會使用「拒絕」效果來防止要求建立或修改儲存體帳戶,使最低 TLS 版本不再符合您組織的標準。 如需有關效果的詳細資訊,請參閱了解 Azure 原則效果。
若要針對低於 TLS 1.2 的最低 TLS 版本建立具有「拒絕」效果的原則,請遵循使用 Azure 原則對合規性進行稽核中所述的相同步驟,但在原則定義的 [policyRule] 區段中提供下列 JSON:
{
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
{
"anyOf": [
{
"field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
"notEquals": "TLS1_2"
},
{
"field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
"exists": "false"
}
]
}
]
},
"then": {
"effect": "deny"
}
}
}
當您建立具有「拒絕」效果的原則,並將其指派給某個範圍之後,使用者將無法建立其最低 TLS 版本比 1.2 版舊的儲存體帳戶。 使用者也不能對現有的儲存體帳戶進行任何設定變更,而現有儲存體帳戶目前需要的最低 TLS 版本比 1.2 版舊。 嘗試這麼做會導致錯誤。 儲存體帳戶的必要最低 TLS 版本必須設定為1.2,才能繼續建立或設定帳戶。
下圖顯示當具有「拒絕」效果的原則需要將最低 TLS 版本設定為 TLS 1.2 時,如果您嘗試建立最低 TLS 版本設為 TLS 1.0 (新帳戶的預設值) 的儲存體帳戶,會發生什麼錯誤。
要求最低 TLS 版本的必要權限
若要設定儲存體帳戶的 MinimumTlsVersion 屬性,使用者必須具有建立及管理儲存體帳戶的權限。 提供這些權限的 Azure 角色型存取控制 (Azure RBAC) 角色包括 Microsoft.Storage/storageAccounts/write 或 Microsoft.Storage/storageAccounts/* 動作。 具有此動作的內建角色包括:
- Azure Resource Manager 擁有者角色
- Azure Resource Manager 參與者角色
- 儲存體帳戶參與者角色
這些角色無法透過 Microsoft Entra ID 提供儲存體帳戶中資料的存取權。 不過,這些角色包含 Microsoft.Storage/storageAccounts/listkeys/action,可授與帳戶存取金鑰的存取權。 使用此權限時,使用者可以使用帳戶存取金鑰來存取儲存體帳戶中的所有資料。
角色指派的範圍必須設定為儲存體帳戶或更高的層級,以允許使用者要求儲存體帳戶的最低版本 TLS。 如需角色範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。
請小心將這些角色的指派限制為需要建立儲存體帳戶或更新其屬性的使用者。 使用最低權限原則,以確保使用者具有完成其工作所需的最低權限。 如需使用 Azure RBAC 管理存取權的詳細資訊,請參閱 Azure RBAC 的最佳做法。
注意
傳統訂用帳戶管理員角色「服務管理員」和「共同管理員」含有 Azure Resource Manager 擁有者角色的相等權限。 擁有者角色包含所有動作,因此具有其中一個系統管理角色的使用者也可以建立和管理儲存體帳戶。 如需詳細資訊,請參閱 Azure 角色、Microsoft Entra 角色和傳統訂用帳戶管理員角色。
網路考量
當用戶端將要求傳送至儲存體帳戶時,用戶端會先與儲存體帳戶的公用端點建立連線,然後再處理任何要求。 建立連線之後,會檢查最低 TLS 版本設定。 如果要求所使用的 TLS 版本比設定所指定的版本還舊,則連線會繼續成功,但是要求最後會失敗。 如需 Azure 儲存體的公用端點詳細資訊,請參閱資源 URI 語法。