防止 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 儲存體會根據 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 Gen2。 不支援 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 檔案共用。

若要緩解此問題,建議您採取下列三種方法之一:

  1. 遵循這些步驟,以使用 Microsoft Entra 帳戶授權存取檔案資料,或
  2. 在禁止透過共用金鑰存取帳戶之前,先將任何 Azure 檔案儲存體資料移轉至個別的儲存體帳戶,或
  3. 不要將此設定套用至支援 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 入口網站中指派適當範圍的內建原則:

  1. 在 Azure 入口網站中,搜尋 [原則] 以顯示 Azure 原則儀表板。

  2. 在 [編寫] 區段中,選取 [指派]。

  3. 選擇 [指派原則]。

  4. 在 [指派原則] 頁面的 [基本] 索引標籤中,在 [範圍] 區段指定原則指派的範圍。 選取 [更多] 按鈕 (...) 以選擇訂用帳戶和選用的資源群組。

  5. 針對 [原則定義] 欄位,選取 [更多] 按鈕 (...),然後在 [搜尋] 欄位中輸入「共用金鑰存取」。 選取名為 [儲存體帳戶應防止共用金鑰存取] 的原則定義。

    顯示如何選取內建原則以防止允許記憶體帳戶共用密鑰存取的螢幕快照

  6. 選取 [檢閱 + 建立]。

  7. 在 [檢閱 + 建立] 索引標籤上,檢閱原則指派,然後選取 [建立],將原則定義指派給指定的範圍。

使用原則監視合規性

若要監視您的儲存體帳戶是否符合共用金鑰存取原則,請遵循下列步驟:

  1. 在 Azure 原則儀表板的 [撰寫] 下方,選取 [指派]

  2. 找出並選取您在上一節中建立的原則指派。

  3. 選取 [檢視合規性] 索引標籤。

  4. 原則指派範圍內不符合原則需求的任何儲存體帳戶都會出現在合規性報告中。

    顯示如何檢視共用金鑰存取內建原則合規性報告的螢幕快照。

若要取得儲存體帳戶為何不符合規範的詳細資訊,請選取 [合規性原因] 底下的 [詳細資料]

偵測用戶端應用程式所使用的授權類型

若要瞭解在您進行這項變更之前,不允許共用金鑰授權如何影響用戶端應用程式,請啟用儲存體帳戶的記錄和計量。 然後,您可以在一段時間內分析帳戶要求的模式,以判斷要求的授權方式。

使用計量來判斷儲存體帳戶接收的要求數目,這些要求是以共用金鑰或共用存取簽章 (SAS) 來授權。 使用記錄來判斷哪些用戶端正在傳送這些要求。

SAS 可透過共用金鑰或 Microsoft Entra ID 獲得授權。 如需有關解讀以共用存取簽章提出之要求的詳細資訊,請參閱瞭解不允許 共用金鑰如何影響 SAS 權杖

判斷透過共用金鑰獲得授權的要求數目和頻率

若要追蹤如何授權儲存體帳戶的要求,請使用 Azure 入口網站中的 Azure 計量瀏覽器。 如需計量瀏覽器的詳細資訊,請參閱使用 Azure 監視器計量瀏覽器分析計量

遵循下列步驟來建立計量,以追蹤以共用金鑰或 SAS 所提出的要求:

  1. 在 Azure 入口網站中,瀏覽至您的儲存體帳戶。 選取 [監視] 區段底下的 [計量]

  2. 新的計量方塊應該出現:

    顯示新計量對話框的螢幕快照。

    若沒有出現,請選取 [新增計量]

  3. 在 [計量] 對話方塊中,指定下列值:

    1. 將 [範圍] 欄位設定為儲存體帳戶的名稱。
    2. 將計量 命名空間 設定為帳戶。 此計量會報告對儲存體帳戶的所有要求。
    3. 將 [計量] 欄位設定為 [交易]
    4. 將 [彙總] 欄位設定為 [總和]

    新計量會在指定的時間間隔內,顯示針對儲存體帳戶的交易數目總和。 產生的計量會如下圖所示:

    顯示如何設定計量以摘要使用共用密鑰或 SAS 進行的交易的螢幕快照。

  4. 接下來,選取 [新增篩選] 按鈕,以針對授權類型的度量建立篩選準則。

  5. 在 [篩選] 對話方塊中,指定下列值:

    1. 屬性值設定為 [驗證]
    2. 將 [運算子] 欄位設定為等號 (=)。
    3. 欄位中,選取帳戶金鑰SAS
  6. 在右上角,選取您要查看其度量的時間範圍。 您也可以指定從 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 進行分析,您必須先建立診斷設定,指出您想要記錄資料的要求類型和記憶體服務。 若要在 Azure 入口網站中建立診斷設定,請執行以下步驟:

  1. 在訂用帳戶中建立新的 log analytics 工作區,其中包含您的 Azure 儲存體帳戶,或使用現有的 log analytics 工作區。 設定儲存體帳戶的記錄後,Log Analytics 工作區中就會提供記錄。 如需詳細資訊,請參閱在 Azure 入口網站中建立 Log Analytics 工作區

  2. 在 Azure 入口網站中,瀏覽至您的儲存體帳戶。

  3. 在 [監視] 區段中,選取 [診斷設定]

  4. 選取您要記錄要求的 Azure 儲存體服務。 例如,選擇 [Blob] 以將要求記錄至 Blob 儲存體。

  5. 選取 [新增診斷設定]。

  6. 提供診斷設定的名稱。

  7. 類別細節下的記錄區段中,選擇 StorageReadStorageWriteStorageDelete,將所有資料要求記錄到選取的服務。

  8. 在 [目的地詳細資料] 底下,選取 [傳送至 Log Analytics]。 選取您的訂用帳戶和您稍早建立的 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/writeMicrosoft.Storage/storageAccounts/* 動作。 具有此動作的內建角色包括:

這些角色無法透過 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 入口網站中不允許儲存體帳戶的共用金鑰授權,請遵循下列步驟:

  1. 瀏覽至您的儲存體帳戶。

  2. 尋找設定底下的組態設定。

  3. 允許儲存體帳戶金鑰存取設定為已停用

    顯示如何不允許記憶體帳戶共用密鑰存取的螢幕快照。

不允許共用金鑰授權之後,對具有共用金鑰授權的儲存體帳戶提出要求將會失敗,並出現錯誤碼 403 (禁止)。 Azure 儲存體傳回錯誤,指出儲存體帳戶不允許金鑰型授權。

只有使用 Azure Resource Manager 部署模型的儲存體帳戶才支援 AllowSharedKeyAccess 屬性。 如需哪些儲存體帳戶使用 Azure Resource Manager 部署模型的詳細資訊,請參閱儲存體帳戶類型

確認不允許共用金鑰存取

若要確認不再允許共用密鑰授權,您可以使用下列命令查詢 Azure 儲存體 帳戶設定。 以您自己的值取代括弧中的佔位元值。

az storage account show \
    --name <storage-account-name> \
    --resource-group <resource-group-name> \
    --query "allow-shared-key-access"

如果記憶體帳戶不允許共用密鑰授權,此命令會傳回 false

注意

如果您已設定儲存體帳戶和容器進行匿名讀取存取,則不會授權匿名要求,且會繼續進行。 如需詳細資訊,請參閱針對容器和 Blob 設定匿名讀取存取

監視 Azure 原則以符合規範

在禁止所需儲存體帳戶上的共用金鑰存取之後,請繼續監視您稍早建立的原則,以持續符合規範。 根據監視結果,視需要採取適當的動作,包括變更原則範圍、禁止更多帳戶上的共用金鑰存取,或允許其用於需要更多時間進行補救的帳戶。

更新 Azure 原則以防止允許共用金鑰存取

若要開始強制執行您先前為原則 [儲存體應防止共用金鑰存取] 所建立的 Azure 原則指派,請將原則指派的 [效果] 變更為 [拒絕],以防止授權的使用者允許儲存體帳戶上的共用金鑰存取。 若要變更原則的效果,請執行下列步驟:

  1. 在 Azure 原則儀表板上,找出並選取您先前建立的原則指派。

  2. 選取 [編輯指派]

  3. 移至 [參數] 索引標籤。

  4. 取消核取 [只顯示需要輸入或檢閱的參數] 核取方塊。

  5. 在 [效果] 下拉式清單中,將 [稽核] 變更為 [拒絕],然後選取 [檢閱 + 儲存]

  6. 在 [檢閱 + 儲存] 索引標籤上,檢閱您的變更,然後選取 [儲存]

注意

您的原則變更可能最多需要 30 分鐘才會生效。

下一步