Azure SQL Database 伺服器時,「伺服器識別」

在建立 Azure SQL Database 伺服器時,「伺服器識別」的選擇主要關係到 SQL Server 想要去存取別的 Azure 資源(例如儲存帳戶、Key Vault) 時的身份證明。

針對你的校務系統架構,建議如下:


1. 建議選擇:啟用「系統指派的受控識別」 (System-assigned Managed Identity)

雖然預設是「未啟用」,但我強烈建議你 「啟用」 它。

  • 原因:當你的 SQL Server 擁有了這個識別碼,它就有了自己的「身分證」。
  • 用途
    • 透明資料加密 (TDE):如果你未來想用自己的金鑰 (Customer-Managed Key) 加密資料庫,SQL Server 需要這個識別去存取 Azure Key Vault。
    • 匯入/匯出功能:如果你想在 Azure Portal 直接將資料庫備份成 .bacpac 檔存到 Blob Storage,SQL Server 必須透過這個識別才能獲得寫入 Storage 的權限。

2. 伺服器識別 vs. 應用程式識別 (容易搞混的地方)

在開發校務系統時,你需要分清楚兩個層次:

  • SQL 伺服器識別(你現在看到的):是讓 SQL Server 去連別人的。
  • 應用程式受控識別 (Web App Managed Identity):是讓你的 Python 程式 去連 SQL Server 的(這是在 Web App 端設定,不是在 SQL 這裡)。

3. 三種選項的白話文建議

選項建議程度適用情境
未啟用⚠️ 可行,但功能受限僅做單純的資料存取,不打算使用 Azure 的進階安全或備份功能。
系統指派首選推薦建立後會自動產生一個與該 SQL Server 同名的識別。刪除 SQL Server 時識別也會自動刪除。最簡單省事。
使用者指派🟦 進階需求你預先建立好一個識別(如 Identity-For-SQL),並手動指派給這台伺服器。適合多台伺服器共用同一個權限設定的場景。

總結操作建議

在建立畫面上,請選擇 「系統指派的受控識別」

啟用它不會產生額外費用,但能為你省去未來設定「自動化備份到 Blob」或「資料加密」時,還得回頭修改伺服器設定的麻煩。

小撇步

啟用後,如果你之後想實作「自動清理超過一年的 Blob 附件」,你甚至可以寫一段預存程序 (Stored Procedure) 讓 SQL Server 直接動用這個「受控識別」去操作 Blob Storage,而不需要在 SQL 裡面存 Storage Key。


官方說明:
https://learn.microsoft.com/zh-tw/azure/azure-sql/database/transparent-data-encryption-byok-identity?view=azuresql&WT.mc_id=Portal-SqlAzureExtension

Microsoft Entra ID (先前稱為 Azure Active Directory) 提供自動受控識別,以向任何支援 Microsoft Entra 驗證的 Azure 服務進行驗證,例如 Azure Key Vault,而不會在程式碼中公開認證。 如需詳細資訊,請參閱 Azure 中的受控識別類型

受控身分識別可以有兩種類型:

  • 系統指派
  • 使用者指派

如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra ID 中的受控識別

對於 Azure SQL 中 具有客戶管理金鑰的 TDE, 伺服器上的受控識別可用來提供金鑰保存庫或受控 HSM 上伺服器的存取權。 例如,在伺服器上啟用具有 CMK 的 TDE 之前,應該先提供伺服器系統指派的受控識別與 Azure Key Vault 許可權 。

除了 CMK 已支援 TDE 的系統指派受控識別之外,指派給伺服器的使用者指派受控識別 (UMI) 可用來允許伺服器存取密鑰保存庫或受控 HSM。 啟用金鑰保存庫或受控 HSM 存取的必要條件是確保已提供使用者指派的受控身分識別在金鑰保存庫或受控 HSM 上的 GetwrapKey 和 unwrapKey 許可權。 由於使用者指派的受控識別是一種獨立資源,可以建立並授與密鑰保存庫或受控 HSM 的存取權, 因此現在可以在伺服器或資料庫的建立時間啟用具有客戶自控密鑰的 TDE

 注意

若要將「使用者指派的受控識別」指派給邏輯伺服器或受控執行個體,使用者必須具備 SQL Server 參與者或 SQL 受控執行個體參與者 Azure RBAC 的角色,以及任何其他含有 Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action 動作的 Azure RBAC 角色。

使用 UMI 進行客戶自控 TDE 的優點

  • 即使在伺服器或資料庫尚未建立之前,也可以透過建立使用者指派的受控識別,並授予其對金鑰保存庫或受控 HSM 的存取權,以預先授權 Azure SQL 邏輯伺服器或 Azure SQL 受控實例的存取權。
  • 允許建立已啟用 TDE 和 CMK 的 Azure SQL 邏輯伺服器。
  • 允許相同的使用者指派受控識別指派給多部伺服器,省去為每個 Azure SQL 邏輯伺服器或 Azure SQL 受控實例啟用系統指派受控識別的需求,並提供對金鑰保存庫或受控 HSM 的存取權。
  • 提供在伺服器建立時間使用可用的內建 Azure 原則來強制執行 CMK 的功能。

使用 UMI 進行客戶自控 TDE 時的考慮

  • 根據預設,Azure SQL 中的 TDE 會使用伺服器上針對金鑰保存庫或受管 HSM 存取設定的主要使用者指派的受管識別。 如果未將使用者指派的身分識別指派給伺服器,則伺服器系統指派的受控識別會用於密鑰保存庫或受控 HSM 存取。
  • 搭配 CMK 使用使用者指派的 TDE 受控識別時,請將身分識別指派給伺服器,並將它設定為伺服器的主要身分識別。
  • 主要使用者指派的受管理的身分識別需要持續擁有金鑰保存庫或受管理的 HSM 存取權限(get、wrapKey、unwrapKey 許可權)。 如果已撤銷身分識別對密鑰保存庫或受控 HSM 的存取權,或未提供足夠的許可權,資料庫將會移至 無法存取 的狀態。
  • 如果主要使用者指派的受控識別正在更新為不同的使用者指派受控識別,則新身分識別必須先獲得密鑰保存庫或受控 HSM 的必要許可權,才能更新主要身分識別。
  • 若要將伺服器從使用者指派切換至系統指派的受控識別,以取得密鑰保存庫或受控 HSM 存取權,請提供系統指派的受控識別與必要的密鑰保存庫或受控 HSM 許可權,然後從伺服器移除所有使用者指派的受控識別。

 重要

不應該從 Azure 刪除用於 TDE 與 CMK 的主要使用者指派受控識別。 刪除此身分識別會導致伺服器無法存取金鑰保存庫或受控 HSM 和資料庫。

限制與已知問題

  • 如果金鑰保存庫或受控 HSM 位於使用防火牆的虛擬網路後方,如果您想要使用使用者指派的受控識別或系統指派的受控識別,則必須在密鑰保存庫或受控 HSM 的 網路功能表中啟用 [允許受信任的 Microsoft 服務略過此防火牆] 的選項。 啟用此選項之後,Azure 入口網站的 SQL Server TDE 功能表將無法列出可用的金鑰。 若要設定個別 CMK,必須使用金鑰識別碼。 未啟用 [允許信任的 Microsoft 服務略過此防火牆] 選項時,會傳回下列錯誤:
    • Failed to save Transparent Data Encryption settings for SQL resource: <ServerName>. Error message: The managed identity with ID '/subscriptions/subscriptionID/resourcegroups/resource_name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/umi_name' requires the following Azure Key Vault permissions: 'Get, WrapKey, UnwrapKey' to the key 'https://keyvault_name/keys/key_name'. Please grant the missing permissions to the identity. Additionally ensure the key is not expired and is not disabled. For expired key, please extend the key expiry time so that SQL can use it to perform wrap and unwrap operations. If your key vault is behind a virtual network or firewall, ensure you select the 'Allow trusted Microsoft services to bypass this firewall' option. (https://aka.ms/sqltdebyokcreateserver).
    • 如果您收到上述錯誤,請檢查密鑰保存庫或受控 HSM 是否位於虛擬網路或防火牆後方,並確定 [ 允許受信任的Microsoft服務略過此防火牆 ] 選項已啟用。
  • 將多個使用者指派的受控識別指派給伺服器或受控執行個體時,如果在 Azure 入口網站的 [身分識別] 窗格中移除了伺服器中的單一身分識別,則即使刪除作業成功,該身分識別也不會從伺服器移除。 可在 Azure 入口網站中一次順利移除所有使用者指派的受控識別。
  • 當伺服器或受控實例設定為客戶管理的 TDE,且伺服器上啟用系統指派和使用者指派的受控識別時,從伺服器移除使用者指派的受控識別,而不需要先將系統指派的受控識別存取權授與密鑰保存庫或受控 HSM,就會 產生未預期的錯誤 訊息。 先確定系統指派的受控識別已提供密鑰保存庫或受控 HSM 存取權,再從伺服器移除主要使用者指派的受控識別(以及任何其他使用者指派的受控識別)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *