防止 Azure 儲存體帳戶的共用金鑰授權
Azure 儲存體帳戶的每個安全要求都必須獲得授權。 根據預設,您可以使用 Microsoft Entra 認證或使用共用金鑰授權的帳戶存取金鑰來授權要求。 在這兩種類型的授權中,Microsoft Entra ID 可提供優於共用金鑰的絕佳安全性且容易使用,因此 Microsoft 建議使用此方法。 若要要求用戶端使用 Microsoft Entra ID 來授權要求,您可以不允許要求使用共用金鑰授權的儲存體帳戶。
如果您不允許儲存體帳戶使用共用金鑰授權,則 Azure 儲存體會拒絕對該帳戶所提出使用帳戶存取金鑰授權的所有後續要求。 只有使用 Microsoft Entra ID 授權的安全要求才會成功。 如需使用 Microsoft Entra ID 的詳細資訊,請參閱授權存取 Azure 儲存體中的資料。
預設不會設定儲存體帳戶的 AllowSharedKeyAccess 屬性,而且在您明確設定之後,才會傳回值。 當屬性值為 null 或為 true時,儲存體帳戶允許以共用金鑰授權的要求。
本文描述如何使用 DRAG (偵測、補救、稽核、治理 (Detection-Remediation-Audit-Governance)) 架構,來持續管理儲存體帳戶的共用金鑰授權。
必要條件
在禁止任何儲存體帳戶上的共用金鑰存取之前:
- 了解禁止共用金鑰如何影響 SAS 權杖
- 考慮與其他 Azure 工具和服務的相容性
- 考慮需要禁止共用金鑰授權以使用 Microsoft Entra 條件式存取
- 授權存取檔案資料或轉換 Azure 檔案儲存體工作負載
瞭解禁止共用金鑰如何影響 SAS 權杖
如果儲存體帳戶不允許共用金鑰存取,Azure 儲存體會根據 sas 的類型以及要求的目標服務來處理 sas 權杖。 下表說明每種類型的 sas 如何獲得授權,以及當儲存體帳戶的AllowSharedKeyAccess屬性為false時,Azure 儲存體將如何處理該 sas。
SAS 類型 | 授權類型 | AllowSharedKeyAccess 為 false 時的行為 |
---|---|---|
使用者委派 SAS (僅限 Blob 儲存體) | Microsoft Entra ID | 允許要求。 Microsoft 建議盡可能採用使用者委派 SAS 以獲得絕佳的安全性。 |
服務 SAS | 共用金鑰 | 所有 Azure 儲存體服務的要求都會遭到拒絕。 |
帳戶 SAS | 共用金鑰 | 所有 Azure 儲存體服務的要求都會遭到拒絕。 |
Azure 監視器中的 Azure 計量和記錄不會區分不同類型的共用存取簽章。 Azure 計量瀏覽器中的sas篩選器,以及 Azure 儲存體記錄的sas欄位 Azure 監視器以任何類型的 SAS 授權的報表要求。 不過,不同類型的共用存取簽章會以不同的方式進行授權,而且不允許共用金鑰存取時,會有不同的行為:
- 服務 SAS 權杖或帳戶 SAS 權杖是以共用金鑰授權,而且當 AllowSharedKeyAccess 屬性設定為 false時,將不允許在對 Blob 儲存體的要求中使用。
- 使用者委派的 SAS 是透過 Microsoft Entra ID 授權的,當 AllowSharedKeyAccess 屬性設定為 false 時,將允許在對 Blob 儲存體的要求上進行。
當您評估儲存體帳戶的流量時,請記住,如「偵測 用戶端應用程式所使用的授權類型 」中所述的計量和記錄,可能會包含使用者委派 SAS 所提出的要求。
如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS) 授與 Azure 儲存體資源的有限存取權。
考慮與其他 Azure 工具和服務的相容性
許多 Azure 服務會使用共用金鑰授權來與 Azure 儲存體通訊。 如果您不允許儲存體帳戶共用金鑰授權,這些服務將無法存取該帳戶中的資料,而且您的應用程式可能會受到負面影響。
某些 Azure 工具提供使用 Microsoft Entra 授權來存取 Azure 儲存體的選項。 下表列出一些熱門的 Azure 工具,並說明是否可以使用 Microsoft Entra ID 來授權對 Azure 儲存體的要求。
Azure 工具 | Azure 儲存體的 Microsoft Entra 授權 |
---|---|
Azure 入口網站 | 支援。 如需從 Azure 入口網站中使用 Microsoft Entra 帳戶進行授權的相關資訊,請參閱選擇如何授權存取 Azure 入口網站中的 blob 資料。 |
AzCopy | 支援 Blob 儲存體。 如需授權 AzCopy 作業的相關資訊,請參閱 AzCopy 檔中的 選擇如何提供授權認證。 |
Azure 儲存體總管 | Blob 儲存體、佇列儲存體、資料表儲存體以及 Azure Data Lake Storage 都可支援。 不支援 Microsoft Entra ID 對檔案儲存體的存取。 請務必選取正確的 Microsoft Entra 租用戶。 如需詳細資訊,請參閱開始使用儲存體總管 |
Azure PowerShell | 支援。 如需如何使用 Microsoft Entra ID 為 Blob 或佇列作業授權 PowerShell 命令的相關資訊,請參閱使用 Microsoft Entra 認證來執行 PowerShell 命令以存取 Blob 資料,或使用 Microsoft Entra 認證來執行 powerShell 命令以存取佇列資料。 |
Azure CLI | 支援。 如需如何使用 Microsoft Entra ID 存取 blob 和佇列資料的授權 Azure CLI 命令的相關資訊,請參閱使用 Microsoft Entra 認證來執行 Azure CLI 命令以存取 blob 或佇列資料。 |
Azure IoT 中樞 | 支援。 如需詳細資訊,請參閱 虛擬網路的 IoT 中樞支援。 |
Azure Cloud Shell | Azure Cloud Shell 是 Azure 入口網站中的整合式 Shell。 Azure Cloud Shell 會在儲存體帳戶中裝載 Azure 檔案共用的持續性檔案。 如果該儲存體帳戶不允許共用金鑰授權,這些檔案將變成無法存取。 如需詳細資訊,請參閱在 Azure Cloud Shell 中保存檔案。 若要在 Azure Cloud Shell 中執行命令以管理不允許共用金鑰存取的儲存體帳戶,請先確定您已透過 Azure RBAC 授與這些帳戶所需的許可權。 如需詳細資訊,請參閱什麼是 Azure 角色型存取控制 (Azure RBAC)?。 |
禁止共用金鑰授權以使用 Microsoft Entra 條件式存取
若要使用 Microsoft Entra 條件式存取原則來保護 Azure 儲存體帳戶,您必須禁止儲存體帳戶的共用金鑰授權。
授權存取檔案資料或轉換 Azure 檔案儲存體工作負載
Azure 記憶體支援對 Azure 檔案儲存體、Blob 儲存體、佇列儲存體和表格儲存體的要求進行 Microsoft Entra 授權。 不過,根據預設,Azure 入口網站會使用共用金鑰授權來存取 Azure 檔案共用。 如果您禁止針對未使用適當 RBAC 指派設定的儲存體帳戶進行共用金鑰授權,則對 Azure 檔案儲存體的要求將會失敗,而且您無法在 Azure 入口網站中存取 Azure 檔案共用。
若要緩解此問題,建議您採取下列三種方法之一:
- 遵循這些步驟,以使用 Microsoft Entra 帳戶授權存取檔案資料,或
- 在禁止透過共用金鑰存取帳戶之前,先將任何 Azure 檔案儲存體資料移轉至個別的儲存體帳戶,或
- 不要將此設定套用至支援 Azure 檔案儲存體工作負載的儲存體帳戶。
識別允許共用金鑰存取的儲存體帳戶
有兩種方式可識別允許共用金鑰存取的儲存體帳戶:
檢查多個帳戶的共用金鑰存取設定
若要在一組具有最佳效能的儲存體帳戶間檢查共用金鑰存取設定,您可以在 Azure 入口網站中使用 Azure Resource Graph Explorer。 若要深入了解如何使用 Resource Graph Explorer,請參閱快速入門:使用 Azure Resource Graph Explorer 執行您的第一個 Resource Graph 查詢。
在 Resource Graph Explorer 中執行下列查詢,會傳回儲存體帳戶的清單,並顯示每個帳戶的共用金鑰存取設定:
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend allowSharedKeyAccess = parse_json(properties).allowSharedKeyAccess
| project subscriptionId, resourceGroup, name, allowSharedKeyAccess
在稽核模式下設定共用金鑰存取的 Azure 原則
Azure 原則 [儲存體帳戶應防止共用金鑰存取] 會防止具有適當權限的使用者設定新的或現有的儲存體帳戶來允許共用金鑰授權。 在稽核模式下設定此原則,以識別允許共用金鑰授權的儲存體帳戶。 在已將應用程式變更為使用 Microsoft Entra 而非共用金鑰進行授權之後,您可以更新原則以防止允許共用金鑰存取。
如需內建原則的詳細資訊,請參閱內建原則定義清單中的 [儲存體帳戶應防止共用金鑰存取]。
指派資源範圍的內建原則
請遵循下列步驟,在 Azure 入口網站中指派適當範圍的內建原則:
在 Azure 入口網站中,搜尋 [原則] 以顯示 Azure 原則儀表板。
在 [編寫] 區段中,選取 [指派]。
選擇 [指派原則]。
在 [指派原則] 頁面的 [基本] 索引標籤中,在 [範圍] 區段指定原則指派的範圍。 選取 [更多] 按鈕 (...) 以選擇訂用帳戶和選用的資源群組。
針對 [原則定義] 欄位,選取 [更多] 按鈕 (...),然後在 [搜尋] 欄位中輸入「共用金鑰存取」。 選取名為 [儲存體帳戶應防止共用金鑰存取] 的原則定義。
選取 [檢閱 + 建立]。
在 [檢閱 + 建立] 索引標籤上,檢閱原則指派,然後選取 [建立],將原則定義指派給指定的範圍。
使用原則監視合規性
若要監視您的儲存體帳戶是否符合共用金鑰存取原則,請遵循下列步驟:
在 Azure 原則儀表板的 [撰寫] 下方,選取 [指派]。
找出並選取您在上一節中建立的原則指派。
選取 [檢視合規性] 索引標籤。
原則指派範圍內不符合原則需求的任何儲存體帳戶都會出現在合規性報告中。
若要取得儲存體帳戶為何不符合規範的詳細資訊,請選取 [合規性原因] 底下的 [詳細資料]。
偵測用戶端應用程式所使用的授權類型
若要瞭解在您進行這項變更之前,不允許共用金鑰授權如何影響用戶端應用程式,請啟用儲存體帳戶的記錄和計量。 然後,您可以在一段時間內分析帳戶要求的模式,以判斷要求的授權方式。
使用計量來判斷儲存體帳戶接收的要求數目,這些要求是以共用金鑰或共用存取簽章 (SAS) 來授權。 使用記錄來判斷哪些用戶端正在傳送這些要求。
SAS 可透過共用金鑰或 Microsoft Entra ID 獲得授權。 如需有關解讀以共用存取簽章提出之要求的詳細資訊,請參閱瞭解不允許 共用金鑰如何影響 SAS 權杖。
判斷透過共用金鑰獲得授權的要求數目和頻率
若要追蹤如何授權儲存體帳戶的要求,請使用 Azure 入口網站中的 Azure 計量瀏覽器。 如需計量瀏覽器的詳細資訊,請參閱使用 Azure 監視器計量瀏覽器分析計量。
遵循下列步驟來建立計量,以追蹤以共用金鑰或 SAS 所提出的要求:
在 Azure 入口網站中,瀏覽至您的儲存體帳戶。 選取 [監視] 區段底下的 [計量]。
新的計量方塊應該出現:
若沒有出現,請選取 [新增計量]。
在 [計量] 對話方塊中,指定下列值:
- 將 [範圍] 欄位設定為儲存體帳戶的名稱。
- 將計量 命名空間 設定為帳戶。 此計量會報告對儲存體帳戶的所有要求。
- 將 [計量] 欄位設定為 [交易]。
- 將 [彙總] 欄位設定為 [總和]。
新計量會在指定的時間間隔內,顯示針對儲存體帳戶的交易數目總和。 產生的計量會如下圖所示:
接下來,選取 [新增篩選] 按鈕,以針對授權類型的度量建立篩選準則。
在 [篩選] 對話方塊中,指定下列值:
- 將屬性值設定為 [驗證]。
- 將 [運算子] 欄位設定為等號 (=)。
- 在值欄位中,選取帳戶金鑰 和 SAS。
在右上角,選取您要查看其度量的時間範圍。 您也可以指定從 1 分鐘到 1 個月之間的間隔,以指定要求的彙總細微程度。 例如,將 時間範圍 設定為30天,並將 時間細微性 設定為1天,以查看過去30天內依日匯總的要求。
設定計量之後,對您儲存體帳戶的要求就會開始出現在圖形上。 下圖顯示以共用金鑰授權或使用 SAS 權杖進行授權的要求。 過去三十天內的要求是每天匯總的。
您也可以設定警示規則,以在針對您的儲存體帳戶進行共用金鑰授權的特定要求數目時通知您。 如需詳細資訊,請參閱使用 Azure 監視器建立、檢視及管理計量警示。
分析記錄以識別以共用金鑰或 SAS 授權要求的用戶端
Azure 儲存體記錄會擷取對儲存體帳戶提出的要求詳細資料,包括要求的授權方式。 您可以分析記錄,以判斷哪些用戶端是以共用金鑰或 SAS 權杖來授權要求。
若要將要求記錄到您的 Azure 儲存體帳戶以評估其授權方式,您可以使用 Azure 監視器中的 Azure 儲存體記錄。 如需詳細資訊,請參閱監視 Azure 儲存體。
Azure 監視器中的 Azure 儲存體記錄支援使用記錄查詢來分析記錄資料。 若要查詢記錄,您可以使用 Azure Log Analytics 工作區。 若要深入了解記錄查詢,請參閱教學課程:開始使用 Log Analytics 查詢。
在 Azure 入口網站中建立診斷設定
若要使用 Azure 監視器記錄 Azure 儲存體資料,並使用 Azure Log Analytics 進行分析,您必須先建立診斷設定,指出您想要記錄資料的要求類型和記憶體服務。 設定儲存體帳戶的記錄之後,記錄會出現在 Log Analytics 工作區中。 若要建立工作區,請參閱在 Azure 入口網站中建立 Log Analytics 工作區。
若要在 Azure 入口網站中了解如何建立診斷設定,請參閱 建立 Azure 監視器中的診斷設定。
如需 Azure 儲存體記錄在 Azure 監視器中的可用欄位參考,請參閱資源記錄。
使用共用金鑰或 SAS 提出要求的查詢記錄
Azure 監視器中的 Azure 儲存體記錄包含用來對儲存體帳戶提出要求的授權類型。 若要取得過去七天內以共用金鑰或 SAS 授權之要求的記錄,請開啟您的 Log Analytics 工作區。 接下來,將下列查詢貼入新的記錄查詢中,然後執行。 此查詢會顯示以共用金鑰或 SAS 授權之最常傳送要求的10個 IP 位址:
StorageBlobLogs
| where AuthenticationType in ("AccountKey", "SAS") and TimeGenerated > ago(7d)
| summarize count() by CallerIpAddress, UserAgentHeader, AccountName
| top 10 by count_ desc
您也可以根據此查詢來設定警示規則,以通知您以共用金鑰或 SAS 授權的要求。 如需詳細資訊,請參閱使用 Azure 監視器建立、檢視和管理記錄警示。
透過共用金鑰補救授權
分析儲存體帳戶的要求獲得授權之後,您可以採取動作來防止透過共用金鑰存取。 但首先,您必須更新任何使用共用金鑰授權的應用程式,以改用 Microsoft Entra ID。 您可以依照「偵測 用戶端應用程式所用的授權類型 來追蹤轉換」中所述,監視記錄和計量。 如需使用 Microsoft Entra ID 來存取儲存體帳戶中資料的詳細資訊,請參閱授權存取 Azure 儲存體中的資料。
當您確信可以安全地拒絕以共用金鑰授權的要求時,可以將儲存體帳戶的 AllowSharedKeyAccess 屬性設定為 false。
警告
如果有任何用戶端目前正在以共用金鑰存取儲存體帳戶中的資料,則 Microsoft 建議您先將這些用戶端移轉至 Microsoft Entra ID,然後再禁止使用共用金鑰存取儲存體帳戶。
允許或禁止共用金鑰存取的權限
若要設定儲存體帳戶的 AllowSharedKeyAccess 屬性,使用者必須具有建立及管理儲存體帳戶的權限。 提供這些權限的 Azure 角色型存取控制 (Azure RBAC) 角色包括 Microsoft.Storage/storageAccounts/write 或 Microsoft.Storage/storageAccounts/* 動作。 具有此動作的內建角色包括:
- Azure Resource Manager 擁有者角色
- Azure Resource Manager 參與者角色
- 儲存體帳戶參與者角色
這些角色無法透過 Microsoft Entra ID 提供儲存體帳戶中資料的存取權。 不過,這些角色包含 Microsoft.Storage/storageAccounts/listkeys/action,可授與帳戶存取金鑰的存取權。 使用此權限時,使用者可以使用帳戶存取金鑰來存取儲存體帳戶中的所有資料。
角色指派的範圍必須設定為儲存體帳戶或更高的層級,以允許使用者允許或禁止對儲存體帳戶進行共用金鑰存取。 如需角色範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。
請小心將這些角色的指派限制為需要建立儲存體帳戶或更新其屬性的使用者。 使用最低權限原則,以確保使用者具有完成其工作所需的最低權限。 如需使用 Azure RBAC 管理存取權的詳細資訊,請參閱 Azure RBAC 的最佳做法。
注意
傳統訂用帳戶管理員角色「服務管理員」和「共同管理員」含有 Azure Resource Manager 擁有者角色的相等權限。 擁有者角色包含所有動作,因此具有其中一個系統管理角色的使用者也可以建立和管理儲存體帳戶。 如需詳細資訊,請參閱 Azure 角色、Microsoft Entra 角色和傳統訂用帳戶管理員角色。
停用共用金鑰授權
使用具有必要權限的帳戶時,在 Azure 入口網站中、透過 PowerShell 或使用 Azure CLI 停用共用金鑰授權。
若要在 Azure 入口網站中不允許儲存體帳戶的共用金鑰授權,請遵循下列步驟:
不允許共用金鑰授權之後,對具有共用金鑰授權的儲存體帳戶提出要求將會失敗,並出現錯誤碼 403 (禁止)。 Azure 儲存體傳回錯誤,指出儲存體帳戶不允許金鑰型授權。
只有使用 Azure Resource Manager 部署模型的儲存體帳戶才支援 AllowSharedKeyAccess 屬性。 如需哪些儲存體帳戶使用 Azure Resource Manager 部署模型的詳細資訊,請參閱儲存體帳戶類型。
確認不允許共用金鑰存取
若要驗證共用金鑰授權已不受允許,您可以使用下列命令查詢 Azure 儲存體帳戶設定。 將括弧中的預留位置值取代為您自己的值。
az storage account show \
--name <storage-account-name> \
--resource-group <resource-group-name> \
--query "allowSharedKeyAccess"
當儲存體帳戶不允許共用金鑰授權時,此命令會傳回 false。
注意
如果您已設定儲存體帳戶和容器進行匿名讀取存取,則不會授權匿名要求,且會繼續進行。 如需詳細資訊,請參閱針對容器和 Blob 設定匿名讀取存取。
監視 Azure 原則以符合規範
在禁止所需儲存體帳戶上的共用金鑰存取之後,請繼續監視您稍早建立的原則,以持續符合規範。 根據監視結果,視需要採取適當的動作,包括變更原則範圍、禁止更多帳戶上的共用金鑰存取,或允許其用於需要更多時間進行補救的帳戶。
更新 Azure 原則以防止允許共用金鑰存取
若要開始強制執行您先前為原則 [儲存體應防止共用金鑰存取] 所建立的 Azure 原則指派,請將原則指派的 [效果] 變更為 [拒絕],以防止授權的使用者允許儲存體帳戶上的共用金鑰存取。 若要變更原則的效果,請執行下列步驟:
在 Azure 原則儀表板上,找出並選取您先前建立的原則指派。
選取 [編輯指派]。
移至 [參數] 索引標籤。
取消核取 [只顯示需要輸入或檢閱的參數] 核取方塊。
在 [效果] 下拉式清單中,將 [稽核] 變更為 [拒絕],然後選取 [檢閱 + 儲存]。
在 [檢閱 + 儲存] 索引標籤上,檢閱您的變更,然後選取 [儲存]。
注意
您的原則變更可能最多需要 30 分鐘才會生效。