適用于:Azure SQL數(shù)據(jù)庫(kù)、Azure SQL托管實(shí)例
本文提供了有關(guān)如何解決常見安全要求的最佳做法。并非所有要求都適用于所有環(huán)境,你應(yīng)該向數(shù)據(jù)庫(kù)和安全團(tuán)隊(duì)咨詢要實(shí)現(xiàn)哪些功能。
解決常見的安全要求
本文檔提供有關(guān)如何解決使用Azure SQL數(shù)據(jù)庫(kù)和Azure SQL托管實(shí)例的新應(yīng)用程序或現(xiàn)有應(yīng)用程序的常見安全要求的指導(dǎo)。本文檔的內(nèi)容已從較高層面按照安全考慮因素進(jìn)行組織。若要解決特定的威脅,請(qǐng)參閱常見安全威脅和潛在緩解措施部分。提供的某些建議在將應(yīng)用程序從本地遷移到Azure時(shí)適用,不過,本文檔不會(huì)重點(diǎn)說明遷移方案。
本指南涉及的Azure SQL數(shù)據(jù)庫(kù)部署產(chǎn)品/服務(wù)
Azure SQL數(shù)據(jù)庫(kù):服務(wù)器中的單一數(shù)據(jù)庫(kù)和彈性池
Azure SQL托管實(shí)例
本指南不涉及的部署產(chǎn)品/服務(wù)
Azure Synapse Analytics
Azure SQL VM(IaaS)
SQL Server
目標(biāo)受眾
本文檔旨在用作現(xiàn)有Azure SQL數(shù)據(jù)庫(kù)安全性文檔的配套資源。
除非另有說明,否則我們建議遵循每個(gè)部分中列出的所有最佳做法,以實(shí)現(xiàn)相關(guān)的目標(biāo)或要求。為了幫助客戶滿足特定的安全合規(guī)標(biāo)準(zhǔn)或最佳做法,在適用的情況下,“要求或目標(biāo)”部分下面會(huì)列出重要的法規(guī)控制措施。本文參考了以下安全標(biāo)準(zhǔn)和法規(guī):
FedRAMP:AC-04、AC-06
SOC:CM-3、SDL-3
ISO/IEC 27001:訪問控制、加密
Microsoft操作安全保障(OSA)做法:做法#1-6和#9
NIST???00-53安全控制:AC-5、AC-6
PCI DSS:6.3.2、6.4.2
我們計(jì)劃持續(xù)更新本文列出的建議和最佳做法。使用本文底部的"反饋"鏈接提供對(duì)此文檔的輸入或任何更正。
身份驗(yàn)證
身份驗(yàn)證是證明用戶所聲明身份的過程。Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例支持兩種類型的身份驗(yàn)證:
SQL身份驗(yàn)證
Azure Active Directory身份驗(yàn)證
備注
并非所有工具和第三方應(yīng)用程序都支持Azure Active Directory身份驗(yàn)證。
標(biāo)識(shí)的集中管理
集中式標(biāo)識(shí)管理提供以下優(yōu)勢(shì):
管理組帳戶并控制用戶權(quán)限,而無需跨服務(wù)器、數(shù)據(jù)庫(kù)和托管實(shí)例重復(fù)登錄。
簡(jiǎn)化且靈活的權(quán)限管理。
應(yīng)用程序的大規(guī)模管理。
如何實(shí)現(xiàn):
使用Azure Active Directory(Azure AD)身份驗(yàn)證實(shí)現(xiàn)集中式標(biāo)識(shí)管理。
最佳做法:
創(chuàng)建Azure AD租戶,創(chuàng)建用戶來表示人類用戶,并創(chuàng)建服務(wù)主體來表示應(yīng)用、服務(wù)和自動(dòng)化工具。服務(wù)主體相當(dāng)于Windows和Linux中的服務(wù)帳戶。
通過組分配向Azure AD主體分配資源訪問權(quán)限:創(chuàng)建Azure AD組,向組授予訪問權(quán)限,并將各個(gè)成員添加到組中。在數(shù)據(jù)庫(kù)中,創(chuàng)建包含的數(shù)據(jù)庫(kù)用戶用于映射Azure AD組。若要在數(shù)據(jù)庫(kù)中分配權(quán)限,請(qǐng)將與Azure AD組關(guān)聯(lián)的用戶置于具有適當(dāng)權(quán)限的數(shù)據(jù)庫(kù)角色中。
備注
在SQL托管實(shí)例中,還可以創(chuàng)建映射到master數(shù)據(jù)庫(kù)中的Azure AD主體的登錄名。請(qǐng)參閱CREATE LOGIN(Transact-SQL)。
使用Azure AD組可以簡(jiǎn)化權(quán)限管理,組所有者和資源所有者都可以在組中添加/刪除成員。
為每個(gè)服務(wù)器或托管實(shí)例創(chuàng)建單獨(dú)的Azure AD管理員組。
請(qǐng)參閱為服務(wù)器預(yù)配Azure Active Directory管理員一文。
使用Azure AD審核活動(dòng)報(bào)告監(jiān)視Azure AD組成員身份的更改。
對(duì)于托管實(shí)例,需要執(zhí)行一個(gè)單獨(dú)的步驟來創(chuàng)建Azure AD管理員。
請(qǐng)參閱為托管實(shí)例預(yù)配Azure Active Directory管理員一文。
備注
Azure AD身份驗(yàn)證記錄在Azure SQL審核日志中,而不是記錄在Azure AD登錄日志中。
Azure中授予的azure RBAC權(quán)限不適用于Azure SQL數(shù)據(jù)庫(kù)或SQL托管實(shí)例權(quán)限。必須使用現(xiàn)有的SQL權(quán)限手動(dòng)創(chuàng)建/映射此類權(quán)限。
在客戶端上,Azure AD身份驗(yàn)證需要訪問Internet,或通過用戶定義的路由(UDR)訪問虛擬網(wǎng)絡(luò)。
Azure AD訪問令牌緩存在客戶端,其生存期取決于令牌配置。請(qǐng)參閱Azure Active Directory中可配置的令牌生存期一文
Azure AD多重身份驗(yàn)證
內(nèi)容來源:OSA做法#2,ISO訪問控制(AC)
Azure AD多重身份驗(yàn)證通過要求多種形式的身份驗(yàn)證提供額外的安全性。
如何實(shí)現(xiàn):
使用條件訪問在Azure AD中啟用多重身份驗(yàn)證,并使用交互式身份驗(yàn)證。
或者,為整個(gè)Azure AD或AD域啟用多重身份驗(yàn)證。
最佳做法:
Azure AD(需要高級(jí)訂閱)中激活條件性訪問。
創(chuàng)建Azure AD組,并使用Azure AD條件訪問為選定的組啟用多重身份驗(yàn)證策略。
可為整個(gè)Azure AD或者與Azure AD聯(lián)合的整個(gè)Active Directory啟用多重身份驗(yàn)證。
對(duì)以交互方式請(qǐng)求密碼的Azure SQL數(shù)據(jù)庫(kù)和Azure SQL托管實(shí)例使用Azure AD交互式身份驗(yàn)證模式,然后啟用多重身份驗(yàn)證:
在SSMS中使用通用身份驗(yàn)證。請(qǐng)參閱在Azure SQL數(shù)據(jù)庫(kù)、SQL托管實(shí)例和Azure Synapse Analytics中使用多重Azure AD身份驗(yàn)證(SSMS對(duì)多重身份驗(yàn)證的支持)一文。
使用SQL Server Data Tools(SSDT)中支持的交互式身份驗(yàn)證。請(qǐng)參閱SQL Server Data Tools(SSDT)中的Azure Active Directory支持。
使用其他支持多重身份驗(yàn)證的SQL工具。
SSMS向?qū)?duì)導(dǎo)出/提取/部署數(shù)據(jù)庫(kù)操作的支持
sqlpackage.exe:選項(xiàng)“/ua”
sqlcmd實(shí)用工具:選項(xiàng)-G(交互式)
bcp實(shí)用工具:選項(xiàng)-G(交互式)
實(shí)現(xiàn)你的應(yīng)用程序,以使用支持多重身份驗(yàn)證的交互式身份驗(yàn)證連接到Azure SQL數(shù)據(jù)庫(kù)或Azure SQL托管實(shí)例。
備注
此身份驗(yàn)證模式需要使用基于用戶的標(biāo)識(shí)。如果使用的受信任標(biāo)識(shí)模型會(huì)繞過個(gè)體Azure AD用戶身份驗(yàn)證(例如,使用Azure資源的托管標(biāo)識(shí)),則不會(huì)應(yīng)用多重身份驗(yàn)證。
盡量減少對(duì)用戶使用基于密碼的身份驗(yàn)證
內(nèi)容來源:OSA做法#4,ISO訪問控制(AC)
基于密碼的身份驗(yàn)證方法是較弱的身份驗(yàn)證形式。憑據(jù)可能會(huì)透露或者被錯(cuò)誤地丟棄。
如何實(shí)現(xiàn):
使用Azure AD集成身份驗(yàn)證,此方法可消除密碼的使用。
最佳做法:
使用Windows憑據(jù)進(jìn)行單一登錄身份驗(yàn)證。將本地AD域與Azure AD相聯(lián)合,并使用Windows集成身份驗(yàn)證(適用于Azure AD中已加入域的計(jì)算機(jī))。
盡量減少對(duì)應(yīng)用程序使用基于密碼的身份驗(yàn)證
內(nèi)容來源:OSA做法#4,ISO訪問控制(AC)
如何實(shí)現(xiàn):
啟用Azure托管標(biāo)識(shí)。還可以使用集成式或基于證書的身份驗(yàn)證。
最佳做法:
使用Azure資源的托管標(biāo)識(shí)。
系統(tǒng)分配的托管標(biāo)識(shí)
用戶分配的托管標(biāo)識(shí)
從具有托管標(biāo)識(shí)的Azure應(yīng)用服務(wù)使用Azure SQL數(shù)據(jù)庫(kù)(無需更改代碼)
對(duì)應(yīng)用程序使用基于證書的身份驗(yàn)證。
請(qǐng)參閱此代碼示例。
對(duì)集成的聯(lián)合域和已加入域的計(jì)算機(jī)使用Azure AD身份驗(yàn)證(參閱上一部分)。
請(qǐng)參閱集成身份驗(yàn)證的示例應(yīng)用程序。
保護(hù)密碼和機(jī)密
如果不可避免地需要使用密碼,請(qǐng)確保密碼受到保護(hù)。
如何實(shí)現(xiàn):
使用Azure Key Vault存儲(chǔ)密碼和機(jī)密。在適用的情況下,請(qǐng)對(duì)Azure AD用戶使用Azure SQL數(shù)據(jù)庫(kù)的多重身份驗(yàn)證。
最佳做法:
如果無法避免密碼或機(jī)密的使用,請(qǐng)?jiān)贏zure Key Vault中存儲(chǔ)用戶密碼和應(yīng)用程序機(jī)密,并通過Key Vault訪問策略管理訪問權(quán)限。
各種應(yīng)用開發(fā)框架還可能提供框架特定的機(jī)制來保護(hù)應(yīng)用中的機(jī)密。例如:ASP.NET Core應(yīng)用。
對(duì)舊式應(yīng)用程序使用SQL身份驗(yàn)證
SQL身份驗(yàn)證是指使用用戶名和密碼連接到Azure SQL數(shù)據(jù)庫(kù)或SQL托管實(shí)例時(shí)對(duì)用戶進(jìn)行身份驗(yàn)證。需要在每個(gè)服務(wù)器或托管實(shí)例中創(chuàng)建一個(gè)登錄名,并在每個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)用戶。
如何實(shí)現(xiàn):
使用SQL身份驗(yàn)證。
最佳做法:
以服務(wù)器或?qū)嵗芾韱T的身份創(chuàng)建登錄名和用戶。除非將包含的數(shù)據(jù)庫(kù)用戶與密碼配合使用,否則所有密碼將存儲(chǔ)在master數(shù)據(jù)庫(kù)中。
請(qǐng)參閱控制和授予對(duì)SQL數(shù)據(jù)庫(kù)、SQL托管實(shí)例和Azure Synapse Analytics的數(shù)據(jù)庫(kù)訪問權(quán)限一文。
訪問管理
訪問管理(也稱為授權(quán))是控制和管理已授權(quán)用戶對(duì)Azure SQL數(shù)據(jù)庫(kù)或SQL托管實(shí)例的訪問權(quán)限與特權(quán)的過程。
實(shí)施最低特權(quán)原則
內(nèi)容來源:FedRamp控制措施AC-06,NIST:AC-6,OSA做法#3
最低特權(quán)原則指出,用戶擁有的特權(quán)不應(yīng)超過他們完成任務(wù)所需的特權(quán)。有關(guān)詳細(xì)信息,請(qǐng)參閱Just Enough Administration一文。
如何實(shí)現(xiàn):
僅分配完成所需任務(wù)而需要的權(quán)限:
在SQL數(shù)據(jù)庫(kù)中:
使用粒度權(quán)限和用戶定義的數(shù)據(jù)庫(kù)角色(或托管實(shí)例中的服務(wù)器角色):
創(chuàng)建所需的角色
CREATE ROLE
CREATE SERVER ROLE
創(chuàng)建所需的用戶
CREATE USER
將用戶作為成員添加到角色
ALTER ROLE
ALTER SERVER ROLE
然后將權(quán)限分配給角色。
GRANT
確保不要將用戶分配到不必要的角色。
在Azure資源管理器中:
使用內(nèi)置角色(如果可用)或Azure自定義角色,并分配所需的權(quán)限。
Azure內(nèi)置角色
Azure自定義角色
最佳做法:
以下最佳做法是可選的,但可以改善安全策略的易管理性和支持性:
如果可能,請(qǐng)從盡可能低的權(quán)限集開始,并在有實(shí)際需要(和理由)時(shí)逐個(gè)添加權(quán)限-而不要采用相反的方法:逐步去除權(quán)限。
避免將權(quán)限分配給單個(gè)用戶。改為以一致的方式使用角色(數(shù)據(jù)庫(kù)角色或服務(wù)器角色)。角色能夠?yàn)閳?bào)告權(quán)限和排查權(quán)限問題提供很大的幫助。(Azure RBAC僅支持通過角色分配權(quán)限。)
創(chuàng)建和使用具有所需確切權(quán)限的自定義角色。實(shí)踐中使用的典型角色:
安全部署
管理員
開發(fā)人員
支持人員
審核員
自動(dòng)化過程
最終用戶
只有當(dāng)角色的權(quán)限與用戶所需的權(quán)限完全匹配時(shí),才使用內(nèi)置角色??蓪⒂脩舴峙涞蕉鄠€(gè)角色。
請(qǐng)記住,數(shù)據(jù)庫(kù)引擎中的權(quán)限可以在以下范圍內(nèi)應(yīng)用(范圍越小,授予的權(quán)限的影響越小):
Azure中的服務(wù)器(master數(shù)據(jù)庫(kù)中的特殊角色)
數(shù)據(jù)庫(kù)
架構(gòu)
最佳做法是使用架構(gòu)在數(shù)據(jù)庫(kù)中授予權(quán)限。(另請(qǐng)參閱:架構(gòu)設(shè)計(jì):有關(guān)架構(gòu)設(shè)計(jì)的建議和安全注意事項(xiàng))
對(duì)象(表、視圖、過程等)
備注
不建議在對(duì)象級(jí)別應(yīng)用權(quán)限,因?yàn)榇思?jí)別會(huì)給整個(gè)實(shí)現(xiàn)帶來不必要的復(fù)雜性。如果決定使用對(duì)象級(jí)權(quán)限,應(yīng)明確闡述這些權(quán)限。這同樣適用于列級(jí)權(quán)限,出于相同的原因,我們更不建議應(yīng)用此類權(quán)限另請(qǐng)注意,默認(rèn)情況下,表級(jí)DENY不會(huì)覆蓋列級(jí)授權(quán)。這需要激活通用標(biāo)準(zhǔn)合規(guī)性服務(wù)器配置。
使用漏洞評(píng)估(VA)執(zhí)行定期檢查,以測(cè)試權(quán)限是否過多。
實(shí)現(xiàn)職責(zé)分離
內(nèi)容來源:FedRamp:AC-04,NIST:AC-5,ISO:6.1.2、PCI 6.4.2,SOC:CM-3、SDL-3
“職責(zé)分離”描述將敏感任務(wù)拆分為要分配給不同用戶的多個(gè)任務(wù)的要求。職責(zé)分離有助于防止數(shù)據(jù)違規(guī)。
如何實(shí)現(xiàn):
識(shí)別所需的職責(zé)分離級(jí)別。示例:
在開發(fā)/測(cè)試環(huán)境與生產(chǎn)環(huán)境之間
安全相關(guān)的任務(wù)、數(shù)據(jù)庫(kù)管理員(DBA)管理級(jí)別任務(wù)與開發(fā)人員任務(wù)。
示例:審核員為角色級(jí)安全性(RLS)創(chuàng)建安全策略,并使用DDL權(quán)限實(shí)現(xiàn)SQL數(shù)據(jù)庫(kù)對(duì)象。
識(shí)別有權(quán)訪問系統(tǒng)的用戶(和自動(dòng)化過程)的綜合層次結(jié)構(gòu)。
根據(jù)所需的用戶組創(chuàng)建角色,并將權(quán)限分配給角色。
對(duì)于通過Azure門戶或PowerShell自動(dòng)化完成的管理級(jí)任務(wù),請(qǐng)使用Azure角色。查找符合要求的內(nèi)置角色,或者使用可用權(quán)限創(chuàng)建Azure自定義角色
在托管實(shí)例中為服務(wù)器范圍的任務(wù)(創(chuàng)建新的登錄名和數(shù)據(jù)庫(kù))創(chuàng)建服務(wù)器角色。
為數(shù)據(jù)庫(kù)級(jí)任務(wù)創(chuàng)建數(shù)據(jù)庫(kù)角色。
對(duì)于某些敏感任務(wù),考慮創(chuàng)建由證書簽名的特殊存儲(chǔ)過程,以代表用戶執(zhí)行這些任務(wù)。數(shù)字簽名存儲(chǔ)過程的一個(gè)重要優(yōu)點(diǎn)是,如果更改了該過程,則會(huì)立即刪除授予該過程的舊版本的權(quán)限。
示例:教程:使用證書為存儲(chǔ)過程簽名
使用Azure Key Vault中客戶管理的密鑰實(shí)現(xiàn)透明數(shù)據(jù)加密(TDE),以便在數(shù)據(jù)所有者與安全所有者之間實(shí)現(xiàn)職責(zé)分離。
為了確保DBA無法看到高度敏感的數(shù)據(jù)但仍可執(zhí)行DBA任務(wù),可將Always Encrypted與角色分離配合使用。
如果使用Always Encrypted不可行(最起碼在不付出極大成本和工作量的情況下做不到這一點(diǎn),但如果付出,甚至可能會(huì)導(dǎo)致系統(tǒng)幾乎不可用),可以通過補(bǔ)償性的控制措施來采取折衷辦法,例如:
在過程中進(jìn)行人工干預(yù)。
審核線索–有關(guān)審核的詳細(xì)信息,請(qǐng)參閱審核關(guān)鍵安全事件。
最佳做法:
確保將不同的帳戶用于開發(fā)/測(cè)試環(huán)境和生產(chǎn)環(huán)境。不同的帳戶有助于滿足測(cè)試和生產(chǎn)系統(tǒng)分離的原則。
避免將權(quán)限分配給單個(gè)用戶。改為以一致的方式使用角色(數(shù)據(jù)庫(kù)角色或服務(wù)器角色)。使用角色能夠?yàn)閳?bào)告權(quán)限和排查權(quán)限問題提供很大的幫助。
當(dāng)權(quán)限與所需權(quán)限完全匹配時(shí)使用內(nèi)置角色–如果多個(gè)內(nèi)置角色的所有權(quán)限的聯(lián)合導(dǎo)致100%匹配,則還可以同時(shí)分配多個(gè)角色。
當(dāng)內(nèi)置角色授予的權(quán)限過多或不足時(shí),創(chuàng)建并使用用戶定義的角色。
還可以通過T-SQL的SQL代理作業(yè)步驟或適用于Azure角色的Azure PIM暫時(shí)執(zhí)行角色分配(也稱為動(dòng)態(tài)職責(zé)分離(DSD))。
確保DBA無權(quán)訪問加密密鑰或密鑰存儲(chǔ),而有權(quán)訪問密鑰的安全管理員無權(quán)訪問數(shù)據(jù)庫(kù)。(EKM)使用可擴(kuò)展的密鑰管理可以使此分離更容易實(shí)現(xiàn)。Azure Key Vault可用于實(shí)現(xiàn)EKM。
始終確保針對(duì)安全相關(guān)的操作提供審核線索。
可以檢索Azure內(nèi)置角色的定義以查看所用的權(quán)限,并通過PowerShell根據(jù)這些信息的摘錄和累積創(chuàng)建自定義角色。
由于db_owner數(shù)據(jù)庫(kù)角色的任何成員都可以更改透明數(shù)據(jù)加密(TDE)等安全設(shè)置或更改SLO,因此,應(yīng)謹(jǐn)慎地授予此成員身份。但是,許多任務(wù)要求使用db_owner特權(quán)。例如,更改數(shù)據(jù)庫(kù)選項(xiàng)等任何數(shù)據(jù)庫(kù)設(shè)置的任務(wù)。在任何解決方案中,審核都發(fā)揮著關(guān)鍵的作用。
無法限制db_owner的權(quán)限,因此應(yīng)阻止管理帳戶查看用戶數(shù)據(jù)。如果數(shù)據(jù)庫(kù)中包含高度敏感的數(shù)據(jù),可以使用Always Encrypted來安全阻止db_owners或任何其他DBA查看這些數(shù)據(jù)。
備注
對(duì)安全相關(guān)的任務(wù)或故障排除任務(wù)實(shí)現(xiàn)職責(zé)分離(SoD)會(huì)有難度。其他方面(例如開發(fā)和最終用戶角色)更易于分離。當(dāng)其他解決方案不可行時(shí),大多數(shù)合規(guī)性相關(guān)的控制措施允許使用替代的控制功能,例如審核。
執(zhí)行定期代碼評(píng)審
內(nèi)容來源:PCI:6.3.2,SOC:SDL-3
職責(zé)分離不局限于數(shù)據(jù)庫(kù)中的數(shù)據(jù),它還包括應(yīng)用程序代碼。惡意代碼可能會(huì)繞過安全控制。在將自定義代碼部署到生產(chǎn)環(huán)境之前,必須評(píng)審要部署的內(nèi)容,這一點(diǎn)至關(guān)重要。
如何實(shí)現(xiàn):
使用支持源代碼管理的數(shù)據(jù)庫(kù)工具,例如Azure Data Studio。
實(shí)現(xiàn)分離的代碼部署過程。
在提交到主分支之前,必須由某個(gè)人員(代碼本身的作者除外)檢查代碼是否存在提升特權(quán)的風(fēng)險(xiǎn),以及是否存在惡意的數(shù)據(jù)修改,以防止出現(xiàn)欺詐和惡意訪問??梢允褂迷创a管理機(jī)制實(shí)現(xiàn)此目的。
最佳做法:
標(biāo)準(zhǔn)化:實(shí)現(xiàn)每次更新代碼時(shí)都要遵循的標(biāo)準(zhǔn)過程會(huì)很有幫助。
漏洞評(píng)估中的規(guī)則可以檢查是否存在過多的權(quán)限、是否使用了舊加密算法,以及數(shù)據(jù)庫(kù)架構(gòu)中是否存在其他安全問題。
可以在QA或測(cè)試環(huán)境中使用高級(jí)威脅防護(hù)來執(zhí)行更多的檢查,此技術(shù)將掃描容易受到SQL注入攻擊的代碼。
要注意的方面的示例:
從自動(dòng)化SQL代碼更新部署內(nèi)部創(chuàng)建用戶或更改安全設(shè)置。
某個(gè)存儲(chǔ)過程根據(jù)提供的參數(shù)以不一致的方式更新單元格中的貨幣值。
確保執(zhí)行評(píng)審的人員是除原始代碼作者以外的個(gè)人,且熟悉代碼評(píng)審和安全編碼。
確保知道所有代碼更改來源。代碼可能位于T-SQL腳本中。它可能是要以視圖、函數(shù)、觸發(fā)器和存儲(chǔ)過程形式執(zhí)行或部署的臨時(shí)命令。它可能是SQL代理作業(yè)定義(步驟)的一部分。它還可能從SSIS包、Azure數(shù)據(jù)工廠和其他服務(wù)的內(nèi)部執(zhí)行。
數(shù)據(jù)保護(hù)
數(shù)據(jù)保護(hù)是通過加密或模糊處理來防止重要信息遭到透露的一組功能。
備注
Microsoft的Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例已通過FIPS 140-2級(jí)別1合規(guī)認(rèn)證。認(rèn)證過程中已確認(rèn)它嚴(yán)格使用FIPS 140-2級(jí)別1可接受的算法,以及這些算法的、經(jīng)FIPS 140-2級(jí)別1驗(yàn)證的實(shí)例,包括符合所需密鑰長(zhǎng)度、密鑰管理、密鑰生成和密鑰存儲(chǔ)的要求。此項(xiàng)認(rèn)證意味著,我們的客戶在處理數(shù)據(jù)或者交付系統(tǒng)或應(yīng)用程序的過程中,可以滿足使用FIPS 140-2級(jí)別1驗(yàn)證實(shí)例的需求或要求。我們定義了上述語句中使用的術(shù)語"FIPS 140-2 Level 1相容"和"FIPS 140-2 Level 1相容性",以演示其對(duì)美國(guó)和加拿大政府使用不同術(shù)語"FIPS 140-2 Level 1驗(yàn)證"的預(yù)期適用性。
加密傳輸中的數(shù)據(jù)
內(nèi)容來源:OSA做法#6,ISO控制系列:Cryptography
當(dāng)數(shù)據(jù)在客戶端與服務(wù)器之間移動(dòng)時(shí)為其提供保護(hù)。請(qǐng)參閱網(wǎng)絡(luò)安全性。
靜態(tài)數(shù)據(jù)加密
內(nèi)容來源:OSA做法#6,ISO控制系列:Cryptography
靜態(tài)加密是指對(duì)數(shù)據(jù)庫(kù)、日志和備份文件中保存的數(shù)據(jù)進(jìn)行加密保護(hù)。
如何實(shí)現(xiàn):
對(duì)于2017年后在Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例中創(chuàng)建的任何數(shù)據(jù)庫(kù),默認(rèn)將啟用通過服務(wù)托管的密鑰進(jìn)行透明數(shù)據(jù)庫(kù)加密(TDE)。
在托管實(shí)例中,如果數(shù)據(jù)庫(kù)是使用本地服務(wù)器從還原操作創(chuàng)建的,則會(huì)遵循原始數(shù)據(jù)庫(kù)的TDE設(shè)置。如果未為原始數(shù)據(jù)庫(kù)啟用TDE,則我們建議手動(dòng)為托管實(shí)例啟用TDE。
最佳做法:
不要將需要靜態(tài)加密的數(shù)據(jù)存儲(chǔ)在master數(shù)據(jù)庫(kù)中。無法使用TDE加密master數(shù)據(jù)庫(kù)。
如果需要提高透明度并精細(xì)控制TDE保護(hù),請(qǐng)使用Azure Key Vault中客戶管理的密鑰。Azure Key Vault允許隨時(shí)撤銷權(quán)限,使數(shù)據(jù)庫(kù)不可訪問。可以集中管理TDE保護(hù)器及其他密鑰,或使用Azure Key Vault按自己的計(jì)劃輪換TDE保護(hù)器。
如果使用Azure Key Vault中客戶管理的密鑰,請(qǐng)參閱文章有關(guān)使用Azure Key Vault配置TDE的指導(dǎo)原則和如何使用Azure Key Vault配置異地災(zāi)難恢復(fù)。
防止未經(jīng)授權(quán)的高特權(quán)用戶查看使用中的敏感數(shù)據(jù)
使用中的數(shù)據(jù)是指在執(zhí)行SQL查詢期間存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)存中的數(shù)據(jù)。如果數(shù)據(jù)庫(kù)存儲(chǔ)敏感數(shù)據(jù),則組織可能需要確保防止高特權(quán)用戶查看數(shù)據(jù)庫(kù)中的敏感數(shù)據(jù)。高特權(quán)用戶(例如組織中的Microsoft操作員或DBA)應(yīng)該能夠管理數(shù)據(jù)庫(kù),但不能通過查詢數(shù)據(jù)庫(kù)來查看并潛在地透露SQL進(jìn)程內(nèi)存中的敏感數(shù)據(jù)。
需要確定哪些數(shù)據(jù)是敏感的,以及敏感數(shù)據(jù)是否必須在內(nèi)存中加密并且不可供管理員以明文形式訪問,用于確定這些事項(xiàng)的策略特定于你的組織以及你需要遵守的合規(guī)性規(guī)定。請(qǐng)參閱相關(guān)要求:識(shí)別并標(biāo)記敏感數(shù)據(jù)。
如何實(shí)現(xiàn):
使用Always Encrypted來確保不會(huì)以純文本形式公開Azure SQL數(shù)據(jù)庫(kù)或SQL托管實(shí)例中的敏感數(shù)據(jù),即使是內(nèi)存中/使用中的數(shù)據(jù)。Always Encrypted可以防止數(shù)據(jù)庫(kù)管理員(DBA)和云管理員(或者可以仿冒未經(jīng)授權(quán)的高特權(quán)用戶的惡意行動(dòng)者)查看數(shù)據(jù),并使你能夠以更高的力度控制誰可以訪問數(shù)據(jù)。
最佳做法:
Always Encrypted不能取代靜態(tài)數(shù)據(jù)加密(TDE)或傳輸中數(shù)據(jù)加密(SSL/TLS)。為了盡量減輕對(duì)性能和功能的影響,請(qǐng)不要將Always Encrypted用于非敏感數(shù)據(jù)。建議將Always Encrypted與TDE和傳輸層安全性(TLS)結(jié)合使用,以全面保護(hù)靜態(tài)數(shù)據(jù)、傳輸中的數(shù)據(jù)和使用中的數(shù)據(jù)。
在生產(chǎn)數(shù)據(jù)庫(kù)中部署Always Encrypted之前,請(qǐng)先評(píng)估對(duì)所識(shí)別出的敏感數(shù)據(jù)列進(jìn)行加密會(huì)帶來的影響。通常情況下,Always Encrypted會(huì)降低對(duì)加密列的查詢功能,并具有其他限制,如Always Encrypted-功能詳細(xì)信息中所列。因此,你可能需要在客戶端重構(gòu)你的應(yīng)用程序來重新實(shí)現(xiàn)查詢不支持的功能,或者/并且重構(gòu)你的數(shù)據(jù)庫(kù)架構(gòu),包括存儲(chǔ)過程、函數(shù)、視圖和觸發(fā)器的定義。如果現(xiàn)有應(yīng)用程序未遵守Always Encrypted的限制,則可能無法使用加密列。雖然支持Always Encrypted的Microsoft工具、產(chǎn)品和服務(wù)的生態(tài)系統(tǒng)在不斷增長(zhǎng),但它們中還是有許多不能使用加密列。加密列還可能會(huì)影響查詢性能,具體取決于工作負(fù)荷的特征。
如果使用Always Encrypted來防止惡意DBA查看數(shù)據(jù),請(qǐng)通過角色分離來管理Always Encrypted密鑰。安全管理員可以使用角色分離來創(chuàng)建物理密鑰。DBA在數(shù)據(jù)庫(kù)中創(chuàng)建用于描述物理密鑰的列主密鑰和列加密密鑰元數(shù)據(jù)對(duì)象。在此過程中,安全管理員不需要訪問數(shù)據(jù)庫(kù),且DBA不需要訪問純文本形式的物理密鑰。
將列主密鑰存儲(chǔ)在Azure Key Vault中,以方便管理。避免使用會(huì)使密鑰管理變得困難的Windows證書存儲(chǔ)(以及一般的分布式密鑰存儲(chǔ)解決方案,而不是集中式密鑰管理解決方案)。
仔細(xì)考慮使用多個(gè)密鑰(列主密鑰或列加密密鑰)的利弊。保留少量的密鑰以減小密鑰管理成本。在穩(wěn)定態(tài)的環(huán)境中(而不是在密鑰輪換的中途),為每個(gè)數(shù)據(jù)庫(kù)準(zhǔn)備一個(gè)列主密鑰和一個(gè)列加密密鑰通常已足夠。如果有不同的用戶組,而每個(gè)組使用不同的密鑰并訪問不同的數(shù)據(jù),則可能需要更多的密鑰。
根據(jù)合規(guī)要求輪換列主密鑰。如果還需要輪換列加密密鑰,請(qǐng)考慮使用在線加密來盡量減少應(yīng)用程序停機(jī)時(shí)間。
如果需要支持?jǐn)?shù)據(jù)計(jì)算(相等性),請(qǐng)使用確定性加密。否則請(qǐng)使用隨機(jī)加密。避免將確定性加密用于低熵?cái)?shù)據(jù)集或采用眾所周知分布形式的數(shù)據(jù)集。
如果你擔(dān)心第三方在合法的情況下訪問你的數(shù)據(jù),請(qǐng)確保能夠以純文本形式訪問密鑰和數(shù)據(jù)的所有應(yīng)用程序和工具在Microsoft Azure云的外部運(yùn)行。如果第三方無權(quán)訪問密鑰,則除非繞過加密,否則他們無法解密數(shù)據(jù)。
Always Encrypted無法輕松支持授予對(duì)密鑰(和受保護(hù)數(shù)據(jù))的臨時(shí)訪問權(quán)限。例如,如果需要與DBA共享密鑰,使DBA能夠?qū)γ舾袛?shù)據(jù)和加密的數(shù)據(jù)執(zhí)行一些清理操作。可靠撤銷DBA的數(shù)據(jù)訪問權(quán)限的唯一方法是,同時(shí)輪換用于保護(hù)數(shù)據(jù)的列加密密鑰和列主密鑰,而這是一項(xiàng)開銷較高的操作。
若要訪問已加密列中的純文本值,用戶需要有權(quán)訪問用于保護(hù)列的列主密鑰(CMK)(在保存CMK的密鑰存儲(chǔ)中進(jìn)行配置)。用戶還需要擁有“查看任何列主密鑰定義”和“查看任何列加密密鑰定義”數(shù)據(jù)庫(kù)權(quán)限。
通過加密控制應(yīng)用程序用戶對(duì)敏感數(shù)據(jù)的訪問
可以使用加密來確保只有有權(quán)訪問加密密鑰的特定應(yīng)用程序用戶才能查看或更新數(shù)據(jù)。
如何實(shí)現(xiàn):
使用單元級(jí)加密(CLE)。有關(guān)詳細(xì)信息,請(qǐng)參閱加密數(shù)據(jù)列一文。
使用Always Encrypted,但要注意其限制。下面列出了限制。
最佳實(shí)踐
使用CLE時(shí):
通過SQL權(quán)限和角色控制對(duì)密鑰的訪問。
使用AES(推薦AES 256)進(jìn)行數(shù)據(jù)加密。由于存在已知漏洞,RC4、DES和TripleDES等算法已遭棄用,請(qǐng)不要使用它們。
使用非對(duì)稱密鑰/證書(而不是密碼)來保護(hù)對(duì)稱密鑰,以避免使用3DES。
通過導(dǎo)出/導(dǎo)入(bacpac文件)使用單元級(jí)加密遷移數(shù)據(jù)庫(kù)時(shí)請(qǐng)小心。
有關(guān)在遷移數(shù)據(jù)時(shí)如何防止丟失密鑰以及其他最佳做法指導(dǎo),請(qǐng)參閱有關(guān)在Azure SQL數(shù)據(jù)庫(kù)中使用單元級(jí)加密的建議。
請(qǐng)記住,Always Encrypted主要用于防止Azure SQL數(shù)據(jù)庫(kù)的高特權(quán)用戶(云操作員、DBA)查看使用中的敏感數(shù)據(jù)-請(qǐng)參閱防止防止未經(jīng)授權(quán)的高特權(quán)用戶查看使用中的敏感數(shù)據(jù)。使用Always Encrypted防止應(yīng)用程序用戶查看數(shù)據(jù)時(shí),請(qǐng)注意以下難點(diǎn):
默認(rèn)情況下,支持Always Encrypted的所有Microsoft客戶端驅(qū)動(dòng)程序都會(huì)維護(hù)列加密密鑰的全局緩存(每個(gè)應(yīng)用程序一個(gè)緩存)。在客戶端驅(qū)動(dòng)程序通過聯(lián)系保存列主密鑰的密鑰存儲(chǔ)獲取純文本列加密密鑰后,將會(huì)緩存純文本列加密密鑰。這使得將數(shù)據(jù)與多用戶應(yīng)用程序的用戶相隔離變得困難。如果應(yīng)用程序在與密鑰存儲(chǔ)交互(例如Azure Key Vault)時(shí)模擬最終用戶,則在用戶的查詢使用列加密密鑰填充緩存之后,需要同一個(gè)密鑰但由其他用戶觸發(fā)的后續(xù)查詢將使用緩存的密鑰。驅(qū)動(dòng)程序不會(huì)調(diào)用密鑰存儲(chǔ),也不會(huì)檢查第二個(gè)用戶是否有權(quán)訪問列加密密鑰。因此,即使用戶無權(quán)訪問密鑰,也可以查看加密的數(shù)據(jù)。若要在多用戶應(yīng)用程序中實(shí)現(xiàn)用戶隔離,可以禁用列加密密鑰緩存。禁用緩存會(huì)導(dǎo)致性能開銷增大,因?yàn)轵?qū)動(dòng)程序需要聯(lián)系密鑰存儲(chǔ)來完成每個(gè)數(shù)據(jù)加密或解密操作。
在保留數(shù)據(jù)格式的同時(shí)防止應(yīng)用程序用戶在未經(jīng)授權(quán)的情況下查看數(shù)據(jù)
防止未經(jīng)授權(quán)的用戶查看數(shù)據(jù)的另一種方法是對(duì)數(shù)據(jù)進(jìn)行模糊處理或掩碼,同時(shí)保留數(shù)據(jù)類型和格式,以確保用戶應(yīng)用程序可以繼續(xù)處理和顯示數(shù)據(jù)。
如何實(shí)現(xiàn):
使用動(dòng)態(tài)數(shù)據(jù)掩碼來模糊處理表列。
備注
Always Encrypted不能與動(dòng)態(tài)數(shù)據(jù)掩碼配合工作。無法加密和掩碼同一個(gè)列,這意味著,需確定是要優(yōu)先保護(hù)使用中的數(shù)據(jù),還是通過動(dòng)態(tài)數(shù)據(jù)掩碼來對(duì)應(yīng)用用戶掩碼數(shù)據(jù)。
最佳做法:
備注
動(dòng)態(tài)數(shù)據(jù)掩碼不可用于防止高特權(quán)用戶查看數(shù)據(jù)。掩碼策略不適用于擁有管理訪問權(quán)限的用戶,例如db_owner。
不要允許應(yīng)用用戶運(yùn)行臨時(shí)查詢(因?yàn)樗麄円苍S可以克服動(dòng)態(tài)數(shù)據(jù)掩碼)。
有關(guān)詳細(xì)信息,請(qǐng)參閱使用推理或暴力破解技術(shù)繞過掩碼一文。
使用適當(dāng)?shù)脑L問控制策略(通過SQL權(quán)限、角色、RLS)來限制用戶在掩碼列中進(jìn)行更新的權(quán)限。對(duì)列進(jìn)行掩碼不會(huì)阻止對(duì)該列進(jìn)行更新。如果查詢掩碼列時(shí)收到掩碼數(shù)據(jù)的用戶擁有寫入權(quán)限,則他們可以更新這些數(shù)據(jù)。
動(dòng)態(tài)數(shù)據(jù)掩碼不會(huì)保留掩碼值的統(tǒng)計(jì)屬性。這可能會(huì)影響查詢結(jié)果(例如,包含篩選謂詞的查詢或者對(duì)掩碼數(shù)據(jù)的聯(lián)接)。
網(wǎng)絡(luò)安全性
網(wǎng)絡(luò)安全性是指用于保護(hù)傳輸?shù)紸zure SQL數(shù)據(jù)庫(kù)的數(shù)據(jù)的訪問控制和最佳做法。
配置客戶端以安全連接到SQL數(shù)據(jù)庫(kù)/SQL托管實(shí)例
有關(guān)如何防范存在已知漏洞(例如,使用早期TLS協(xié)議和密碼套件)的客戶端計(jì)算機(jī)和應(yīng)用程序連接到Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例的最佳做法。
如何實(shí)現(xiàn):
確保連接到Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例的客戶端計(jì)算機(jī)使用傳輸層安全性(TLS)。
最佳做法:
配置所有應(yīng)用和工具以連接到啟用了加密的SQL數(shù)據(jù)庫(kù)
Encrypt=On,TrustServerCertificate=Off(或者在非Microsoft驅(qū)動(dòng)程序中配置相應(yīng)的設(shè)置)。
如果應(yīng)用使用的驅(qū)動(dòng)程序不支持TLS或者支持早期版本的TLS,請(qǐng)盡可能地更換驅(qū)動(dòng)程序。如果無法做到這一點(diǎn),請(qǐng)認(rèn)真評(píng)估安全風(fēng)險(xiǎn)。
減少通過SSL 2.0、SSL 3.0、TLS 1.0和TLS 1.1中的漏洞發(fā)起的攻擊途徑:根據(jù)傳輸層安全性(TLS)注冊(cè)表設(shè)置,在連接到Azure SQL數(shù)據(jù)庫(kù)的客戶端計(jì)算機(jī)上禁用相關(guān)的途徑。
檢查客戶端上的密碼套件:TLS/SSL(Schannel SSP)中的密碼套件。具體而言,根據(jù)配置TLS密碼套件順序禁用3DES。
對(duì)于Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例,將對(duì)“代理”和“重定向”連接類型強(qiáng)制加密。對(duì)于Azure SQL托管實(shí)例,請(qǐng)使用“代理”連接類型(默認(rèn)設(shè)置),因?yàn)檫@可以強(qiáng)制在服務(wù)器端加密。“重定向”連接類型目前不支持加密強(qiáng)制,僅在專用IP連接上可用。
盡量減少受攻擊面
盡量減少惡意用戶可以攻擊的特征數(shù)。對(duì)Azure SQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)網(wǎng)絡(luò)訪問控制。
內(nèi)容來源:OSA做法#5
如何實(shí)現(xiàn):
在SQL數(shù)據(jù)庫(kù)中:
在服務(wù)器級(jí)別將“允許訪問Azure服務(wù)”設(shè)置為“關(guān)閉”
使用VNet服務(wù)終結(jié)點(diǎn)和VNet防火墻規(guī)則。
使用專用鏈接(預(yù)覽)。
在SQL托管實(shí)例中:
遵循網(wǎng)絡(luò)要求中的指導(dǎo)原則。
最佳做法:
通過連接到專用終結(jié)點(diǎn)(例如,使用專用數(shù)據(jù)路徑)來限制對(duì)Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例的訪問:
可將托管實(shí)例隔離在虛擬網(wǎng)絡(luò)內(nèi),防止外部訪問。位于同一區(qū)域的相同或?qū)Φ忍摂M網(wǎng)絡(luò)中的應(yīng)用程序和工具可以直接訪問它。位于不同區(qū)域的應(yīng)用程序和工具可使用虛擬網(wǎng)絡(luò)到虛擬網(wǎng)絡(luò)連接,或使用ExpressRoute線路對(duì)等互連來建立連接??蛻魬?yīng)使用網(wǎng)絡(luò)安全組(NSG)來僅限通過端口1433訪問需要訪問托管實(shí)例的資源。
對(duì)于SQL數(shù)據(jù)庫(kù),請(qǐng)使用專用鏈接功能,該功能為虛擬網(wǎng)絡(luò)中的服務(wù)器提供專用專用IP。還可使用配置了虛擬網(wǎng)絡(luò)防火墻規(guī)則的虛擬網(wǎng)絡(luò)服務(wù)終結(jié)點(diǎn)來限制對(duì)服務(wù)器的訪問。
移動(dòng)用戶應(yīng)使用點(diǎn)到站點(diǎn)VPN連接,通過數(shù)據(jù)路徑進(jìn)行連接。
連接到本地網(wǎng)絡(luò)的用戶應(yīng)使用站點(diǎn)到站點(diǎn)VPN連接或ExpressRoute,通過數(shù)據(jù)路徑進(jìn)行連接。
可以通過連接到公共終結(jié)點(diǎn)(例如,使用公共數(shù)據(jù)路徑)來訪問Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例。應(yīng)考慮以下最佳做法:
對(duì)于SQL數(shù)據(jù)庫(kù)中的服務(wù)器,請(qǐng)使用IP防火墻規(guī)則,僅限訪問已授權(quán)的IP地址。
對(duì)于SQL托管實(shí)例,請(qǐng)使用網(wǎng)絡(luò)安全組(NSG),僅限通過端口3342訪問所需的資源。有關(guān)詳細(xì)信息,請(qǐng)參閱在公共終結(jié)點(diǎn)中安全使用托管實(shí)例。
備注
SQL托管實(shí)例公共終結(jié)點(diǎn)默認(rèn)未啟用,必須顯式啟用它。如果公司政策禁止使用公共終結(jié)點(diǎn),請(qǐng)首先使用Azure Policy來防止啟用公共終結(jié)點(diǎn)。
設(shè)置Azure網(wǎng)絡(luò)組件:
按照Azure網(wǎng)絡(luò)安全最佳做法進(jìn)行操作。
根據(jù)Azure虛擬網(wǎng)絡(luò)常見問題解答(FAQ)和計(jì)劃中所述的最佳做法規(guī)劃虛擬網(wǎng)絡(luò)配置。
將虛擬網(wǎng)絡(luò)劃分為多個(gè)子網(wǎng),并將類似角色的資源(例如,前端與后端資源)分配到同一子網(wǎng)。
使用網(wǎng)絡(luò)安全組(NSG)來控制Azure虛擬網(wǎng)絡(luò)邊界范圍內(nèi)子網(wǎng)之間的流量。
為訂閱啟用Azure網(wǎng)絡(luò)觀察程序,以監(jiān)視入站和出站網(wǎng)絡(luò)流量。
配置Power BI以安全連接到SQL數(shù)據(jù)庫(kù)/SQL托管實(shí)例
最佳做法:
對(duì)于Power BI Desktop,請(qǐng)盡可能地使用專用數(shù)據(jù)路徑。
根據(jù)傳輸層安全性(TLS)注冊(cè)表設(shè)置在客戶端計(jì)算機(jī)上設(shè)置注冊(cè)表項(xiàng),確保Power BI Desktop使用TLS1.2進(jìn)行連接。
通過Power BI行級(jí)安全性(RLS)限制特定用戶的數(shù)據(jù)訪問權(quán)限。
對(duì)于Power BI服務(wù),請(qǐng)使用本地?cái)?shù)據(jù)網(wǎng)關(guān),同時(shí)請(qǐng)記住限制和注意事項(xiàng)。
配置應(yīng)用服務(wù)以安全連接到SQL數(shù)據(jù)庫(kù)/SQL托管實(shí)例
最佳做法:
對(duì)于簡(jiǎn)單的Web應(yīng)用,通過公共終結(jié)點(diǎn)進(jìn)行連接需要將“允許Azure服務(wù)”設(shè)置為“打開”。
將應(yīng)用與Azure虛擬網(wǎng)絡(luò)集成,以通過專用數(shù)據(jù)路徑連接到托管實(shí)例。(可選)還可以部署采用應(yīng)用服務(wù)環(huán)境(ASE)的Web應(yīng)用。
對(duì)于連接到SQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)的、采用ASE的Web應(yīng)用或者與虛擬網(wǎng)絡(luò)集成的Web應(yīng)用,可以使用虛擬網(wǎng)絡(luò)服務(wù)終結(jié)點(diǎn)和虛擬網(wǎng)絡(luò)防火墻規(guī)則來限制從特定虛擬網(wǎng)絡(luò)和子網(wǎng)的訪問。然后,將“允許Azure服務(wù)”設(shè)置為“關(guān)閉”。還可以通過專用數(shù)據(jù)路徑將ASE連接到SQL托管實(shí)例中的托管實(shí)例。
確保Web應(yīng)用按照使用Azure應(yīng)用服務(wù)保護(hù)平臺(tái)即服務(wù)(PaaS)Web和移動(dòng)應(yīng)用程序的最佳做法一文進(jìn)行了配置。
安裝Web應(yīng)用程序防火墻(WAF),以防止Web應(yīng)用遭到常見的惡意利用和出現(xiàn)漏洞。
配置Azure虛擬機(jī)以安全連接到SQL數(shù)據(jù)庫(kù)/SQL托管實(shí)例
最佳做法:
在Azure虛擬機(jī)的NSG中結(jié)合使用“允許”和“拒絕”規(guī)則,以控制可從VM訪問哪些區(qū)域。
確保VM根據(jù)Azure中IaaS工作負(fù)載的安全性最佳做法一文進(jìn)行了配置。
確保所有VM與特定的虛擬網(wǎng)絡(luò)和子網(wǎng)相關(guān)聯(lián)。
根據(jù)關(guān)于強(qiáng)制隧道中的指導(dǎo),評(píng)估是否需要默認(rèn)路由0.0.0.0/Internet。
如果需要(例如在前端子網(wǎng)中),請(qǐng)保留默認(rèn)路由。
如果不需要(例如在中間層或后端子網(wǎng)中),請(qǐng)啟用強(qiáng)制隧道,使流量不會(huì)通過Internet抵達(dá)本地(即跨界)。
如果使用對(duì)等互連或者連接到本地,請(qǐng)實(shí)現(xiàn)可選默認(rèn)路由。
如果需要將虛擬網(wǎng)絡(luò)中的所有流量發(fā)送到網(wǎng)絡(luò)虛擬設(shè)備進(jìn)行數(shù)據(jù)包檢查,請(qǐng)實(shí)現(xiàn)用戶定義的路由。
使用虛擬網(wǎng)絡(luò)服務(wù)終結(jié)點(diǎn)通過Azure主干網(wǎng)絡(luò)安全訪問Azure存儲(chǔ)等PaaS服務(wù)。
防范分布式拒絕服務(wù)(DDoS)攻擊
分布式拒絕服務(wù)(DDoS)攻擊由惡意用戶嘗試向Azure SQL數(shù)據(jù)庫(kù)發(fā)送大量網(wǎng)絡(luò)流量,目的是使Azure基礎(chǔ)結(jié)構(gòu)成為驚人,并導(dǎo)致其拒絕有效登錄和工作負(fù)荷。
中提到的:OSA實(shí)踐#9
如何實(shí)現(xiàn):
在Azure平臺(tái)中,會(huì)自動(dòng)啟用DDoS保護(hù)。它包括always on流量監(jiān)視和對(duì)公共終結(jié)點(diǎn)上網(wǎng)絡(luò)級(jí)別攻擊的實(shí)時(shí)緩解。
使用Azure DDoS防護(hù)來監(jiān)視與虛擬網(wǎng)絡(luò)中部署的資源關(guān)聯(lián)的公共IP地址。
使用AZURE SQL數(shù)據(jù)庫(kù)的高級(jí)威脅防護(hù)來檢測(cè)對(duì)數(shù)據(jù)庫(kù)的拒絕服務(wù)(DoS)攻擊。
最佳做法:
遵循最小化攻擊面中所述的做法有助于最大程度地減少DDoS攻擊威脅。
高級(jí)威脅防護(hù)強(qiáng)力強(qiáng)制SQL憑據(jù)警報(bào)有助于檢測(cè)暴力破解攻擊。在某些情況下,警報(bào)甚至可以區(qū)分滲透測(cè)試工作負(fù)荷。
對(duì)于托管連接到SQL數(shù)據(jù)庫(kù)的應(yīng)用程序的Azure VM:
遵循建議,在Azure安全中心中通過面向Internet的終結(jié)點(diǎn)限制訪問。
使用虛擬機(jī)規(guī)模集在Azure Vm上運(yùn)行應(yīng)用程序的多個(gè)實(shí)例。
禁用來自Internet的RDP和SSH,以防止強(qiáng)力攻擊。
監(jiān)視、日志記錄和審核
本部分所述的功能可幫助你檢測(cè)異常活動(dòng),這些活動(dòng)指示非同尋?;蛘邼撛谟泻Φ脑L問或惡意利用數(shù)據(jù)庫(kù)的企圖。本部分還將提供有關(guān)配置數(shù)據(jù)庫(kù)審核來跟蹤和捕獲數(shù)據(jù)庫(kù)事件的最佳做法。
防范數(shù)據(jù)庫(kù)遭到攻擊
高級(jí)威脅防護(hù)可在發(fā)生異?;顒?dòng)時(shí)提供安全警報(bào),讓我們檢測(cè)潛在威脅并做出響應(yīng)。
如何實(shí)現(xiàn):
使用適用于SQL的高級(jí)威脅防護(hù)來檢測(cè)非同尋?;蛘邼撛谟泻Φ脑L問或惡意利用數(shù)據(jù)庫(kù)的企圖,包括:
SQL注入攻擊。
憑據(jù)盜竊/泄露。
特權(quán)濫用。
數(shù)據(jù)透露。
最佳做法:
為特定服務(wù)器或托管實(shí)例配置Azure Defender for SQL。還可以通過切換到Azure安全中心標(biāo)準(zhǔn)層,為訂閱中的所有服務(wù)器和托管實(shí)例配置Azure Defender for SQL。
若要獲得完整的調(diào)查體驗(yàn),建議啟用SQL數(shù)據(jù)庫(kù)審核。使用審核可以跟蹤數(shù)據(jù)庫(kù)事件,并將這些事件寫入到Azure存儲(chǔ)帳戶或Azure Log Analytics工作區(qū)中的審核日志。
審核關(guān)鍵安全事件
跟蹤數(shù)據(jù)庫(kù)事件有助于了解數(shù)據(jù)庫(kù)活動(dòng)??梢远床炜赡苤甘緲I(yè)務(wù)關(guān)注點(diǎn)或可疑安全違規(guī)的差異與異常。此措施還有助于遵守法規(guī)標(biāo)準(zhǔn)。
如何實(shí)現(xiàn):
啟用SQL數(shù)據(jù)庫(kù)審核或托管實(shí)例審核以跟蹤數(shù)據(jù)庫(kù)事件,并將這些事件寫入到Azure存儲(chǔ)帳戶、Log Analytics工作區(qū)(預(yù)覽版)或事件中心(預(yù)覽版)中的審核日志。
可將審核日志寫入Azure存儲(chǔ)帳戶、寫入Log Analytics工作區(qū)(供Azure Monitor日志使用),或?qū)懭胧录行模ü┦录行氖褂茫?。可以將這些選項(xiàng)隨意組合起來進(jìn)行配置,審核日志會(huì)寫入到每一個(gè)之中。
最佳做法:
在服務(wù)器上配置SQL數(shù)據(jù)庫(kù)審核或配置托管實(shí)例審核以審核事件后,該服務(wù)器上所有現(xiàn)有的和新建的數(shù)據(jù)庫(kù)都會(huì)被審核。
審核策略默認(rèn)包括對(duì)數(shù)據(jù)庫(kù)執(zhí)行的所有操作(查詢、存儲(chǔ)過程,以及成功和失敗的登錄),這可能會(huì)導(dǎo)致生成大量的審核日志。建議客戶使用PowerShell對(duì)不同類型的操作和操作組配置審核。此項(xiàng)配置有助于控制審核的操作數(shù)量,并將事件丟失的風(fēng)險(xiǎn)降到最低。自定義審核配置可讓客戶僅捕獲所需的審核數(shù)據(jù)。
可以在Azure門戶中直接使用審核日志,或者從配置的存儲(chǔ)位置使用。
備注
啟用在Log Analytics中進(jìn)行審核會(huì)根據(jù)引入速率產(chǎn)生成本。請(qǐng)注意,使用此選項(xiàng)會(huì)產(chǎn)生相關(guān)的成本;或者,可以考慮將審核日志存儲(chǔ)在Azure存儲(chǔ)帳戶中。
其他資源:
SQL數(shù)據(jù)庫(kù)審核
SQL Server審核
保護(hù)審核日志
限制對(duì)存儲(chǔ)帳戶的訪問,以支持職責(zé)分離,并將DBA與審核員區(qū)分開來。
如何實(shí)現(xiàn):
將審核日志保存到Azure存儲(chǔ)時(shí),請(qǐng)確保按照最低安全原則來限制對(duì)存儲(chǔ)帳戶的訪問。控制誰有權(quán)訪問存儲(chǔ)帳戶。
有關(guān)詳細(xì)信息,請(qǐng)參閱授權(quán)訪問Azure存儲(chǔ)。
最佳做法:
控制對(duì)審核目標(biāo)的訪問是將DBA與審核員相區(qū)分時(shí)使用的重要概念。
審核對(duì)敏感數(shù)據(jù)的訪問時(shí),請(qǐng)考慮使用數(shù)據(jù)加密來保護(hù)數(shù)據(jù),以免向?qū)徍藛T透露信息。有關(guān)詳細(xì)信息,請(qǐng)參閱防止未經(jīng)授權(quán)的高特權(quán)用戶查看使用中的敏感數(shù)據(jù)部分。
安全管理
本部分介紹有關(guān)管理數(shù)據(jù)庫(kù)安全態(tài)勢(shì)的各個(gè)方面和最佳做法。其中提供了有關(guān)確保根據(jù)安全標(biāo)準(zhǔn)配置數(shù)據(jù)庫(kù)、發(fā)現(xiàn)漏洞,以及分類和跟蹤對(duì)數(shù)據(jù)庫(kù)中潛在敏感數(shù)據(jù)的訪問的最佳做法。
確保根據(jù)安全最佳做法配置數(shù)據(jù)庫(kù)
通過發(fā)現(xiàn)并修正潛在數(shù)據(jù)庫(kù)漏洞來主動(dòng)改善數(shù)據(jù)庫(kù)的安全性。
如何實(shí)現(xiàn):
啟用SQL漏洞評(píng)估(VA)來掃描數(shù)據(jù)庫(kù)的安全問題,并使其定期對(duì)數(shù)據(jù)庫(kù)自動(dòng)運(yùn)行。
最佳做法:
對(duì)數(shù)據(jù)庫(kù)運(yùn)行首次VA,在補(bǔ)救不符合安全最佳做法的失敗檢查后反復(fù)運(yùn)行VA。設(shè)置可接受配置的基線,直到掃描結(jié)果全部正常,或所有檢查均已通過。
將定期的重復(fù)掃描配置為每周運(yùn)行一次,并配置相關(guān)人員來接收摘要電子郵件。
完成每周掃描后查看VA摘要。對(duì)于發(fā)現(xiàn)的任何漏洞,評(píng)估與前一次掃描結(jié)果的偏差,并確定是否應(yīng)解決本次檢查發(fā)現(xiàn)的問題。查看配置發(fā)生更改是否有合理的原因。
解決檢查發(fā)現(xiàn)的問題并更新相關(guān)的基線。為解決措施創(chuàng)建票證項(xiàng),并在解決問題之前跟蹤這些項(xiàng)。
其他資源:
SQL漏洞評(píng)估
SQL漏洞評(píng)估服務(wù)有助于識(shí)別數(shù)據(jù)庫(kù)漏洞
識(shí)別并標(biāo)記敏感數(shù)據(jù)
發(fā)現(xiàn)可能包含敏感數(shù)據(jù)的列。什么數(shù)據(jù)是敏感數(shù)據(jù)在很大程度上取決于客戶、合規(guī)性規(guī)定等,并且需要由負(fù)責(zé)該數(shù)據(jù)的用戶進(jìn)行評(píng)估。將列分類以使用基于敏感性的高級(jí)審核和保護(hù)方案。
如何實(shí)現(xiàn):
使用SQL數(shù)據(jù)發(fā)現(xiàn)和分類來發(fā)現(xiàn)、分類、標(biāo)記和保護(hù)數(shù)據(jù)庫(kù)中的敏感數(shù)據(jù)。
在SQL數(shù)據(jù)發(fā)現(xiàn)和分類儀表板中查看自動(dòng)發(fā)現(xiàn)創(chuàng)建的分類建議。接受相關(guān)的分類,以使用分類標(biāo)簽來持久標(biāo)記敏感數(shù)據(jù)。
對(duì)于未被自動(dòng)機(jī)制發(fā)現(xiàn)的任何其他敏感數(shù)據(jù)字段,請(qǐng)手動(dòng)添加分類。
有關(guān)詳細(xì)信息,請(qǐng)參與SQL數(shù)據(jù)發(fā)現(xiàn)和分類。
最佳做法:
定期監(jiān)視分類儀表板,準(zhǔn)確評(píng)估數(shù)據(jù)庫(kù)的分類狀態(tài)??梢詫?dǎo)出或打印有關(guān)數(shù)據(jù)庫(kù)分類狀態(tài)的報(bào)告,以使在合規(guī)與審核措施中共享。
持續(xù)監(jiān)視SQL漏洞評(píng)估中建議的敏感數(shù)據(jù)的狀態(tài)。跟蹤敏感數(shù)據(jù)發(fā)現(xiàn)規(guī)則,識(shí)別建議列中的任何分類偏差。
使用根據(jù)你的組織的特定需求定制的方式使用分類。在Azure安全中心的SQL信息保護(hù)策略中,自定義信息保護(hù)策略(敏感度標(biāo)簽、信息類型、發(fā)現(xiàn)邏輯)。
跟蹤對(duì)敏感數(shù)據(jù)的訪問
在審核日志中監(jiān)視誰訪問了敏感數(shù)據(jù),并捕獲對(duì)敏感數(shù)據(jù)運(yùn)行的查詢。
如何實(shí)現(xiàn):
結(jié)合使用SQL審核和數(shù)據(jù)分類。
在SQL數(shù)據(jù)庫(kù)審核日志中,可以專門跟蹤對(duì)敏感數(shù)據(jù)的訪問。還可以查看訪問的數(shù)據(jù)及其敏感性標(biāo)簽等信息。有關(guān)詳細(xì)信息,請(qǐng)參閱數(shù)據(jù)發(fā)現(xiàn)和分類和審核對(duì)敏感數(shù)據(jù)的訪問。
最佳做法:
參閱有關(guān)審核和數(shù)據(jù)分類的最佳做法部分:
審核關(guān)鍵安全事件
識(shí)別并標(biāo)記敏感數(shù)據(jù)
可視化安全性與合規(guī)性狀態(tài)
使用統(tǒng)一的基礎(chǔ)結(jié)構(gòu)安全管理系統(tǒng)來增強(qiáng)數(shù)據(jù)中心(包括SQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù))的安全態(tài)勢(shì)。查看有關(guān)數(shù)據(jù)庫(kù)安全性與合規(guī)性狀態(tài)的建議列表。
如何實(shí)現(xiàn):
在Azure安全中心監(jiān)視SQL相關(guān)的安全建議與正在進(jìn)行的威脅。
常見安全威脅和潛在緩解措施
本部分幫助你找到用于防范特定攻擊途徑的安全措施。遵循上述一條或多條安全指導(dǎo)原則預(yù)期可以實(shí)現(xiàn)大部分緩解措施。
安全威脅:數(shù)據(jù)透露
Data透露是指在未經(jīng)授權(quán)的情況下,從計(jì)算機(jī)或服務(wù)器復(fù)制、傳輸或檢索數(shù)據(jù)。查看維基百科中的數(shù)據(jù)透露定義。
通過公共終結(jié)點(diǎn)連接到服務(wù)器會(huì)帶來數(shù)據(jù)透露的風(fēng)險(xiǎn),因?yàn)檫@需要客戶向公共IP打開其防火墻。
場(chǎng)景1:Azure VM上的某個(gè)應(yīng)用程序連接到Azure SQL數(shù)據(jù)庫(kù)中的某個(gè)數(shù)據(jù)庫(kù)。惡意行動(dòng)者獲取VM的訪問權(quán)限并入侵到其中。在此場(chǎng)景中,數(shù)據(jù)透露表示使用惡意VM的外部實(shí)體連接到數(shù)據(jù)庫(kù),復(fù)制個(gè)人數(shù)據(jù),并將這些數(shù)據(jù)存儲(chǔ)在Blob存儲(chǔ)中或者不同訂閱內(nèi)的不同SQL數(shù)據(jù)庫(kù)中。
場(chǎng)景2:惡意DBA。這種場(chǎng)景通常出現(xiàn)在受管制行業(yè)的安全敏感型客戶那里。在此場(chǎng)景中,高特權(quán)用戶可將Azure SQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)復(fù)制到不受數(shù)據(jù)所有者控制的其他訂閱。
潛在緩解措施:
Azure SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例目前提供以下技術(shù)來緩解數(shù)據(jù)透露威脅:
在Azure VM的NSG中結(jié)合使用“允許”和“拒絕”規(guī)則,以控制可從VM訪問哪些區(qū)域。
如果在SQL數(shù)據(jù)庫(kù)中使用服務(wù)器,請(qǐng)?jiān)O(shè)置以下選項(xiàng):
將“允許Azure服務(wù)”設(shè)置為“關(guān)閉”。
設(shè)置VNet防火墻規(guī)則,僅允許來自包含你的Azure VM的子網(wǎng)的流量。
使用專用鏈接
對(duì)于SQL托管實(shí)例,使用專用IP訪問默認(rèn)可以解決惡意VM的首要數(shù)據(jù)透露隱患。在子網(wǎng)中啟用子網(wǎng)委托功能,以在SQL托管實(shí)例子網(wǎng)中自動(dòng)設(shè)置最嚴(yán)格的策略。
惡意DBA隱患主要出現(xiàn)在SQL托管實(shí)例上,因?yàn)镾QL托管實(shí)例的受攻擊面較大,而網(wǎng)絡(luò)要求對(duì)客戶是可見的。此問題的最佳緩解措施是首先應(yīng)用本安全指南中的所有做法,以防止出現(xiàn)惡意DBA的情景(不僅可以解決數(shù)據(jù)透露)。Always Encrypted是保護(hù)敏感數(shù)據(jù)的一種方法,它可以加密敏感數(shù)據(jù),并使DBA無法訪問密鑰。
業(yè)務(wù)連續(xù)性和可用性的安全性方面
大多數(shù)安全標(biāo)準(zhǔn)在操作連續(xù)性方面解決數(shù)據(jù)可用性問題,實(shí)現(xiàn)此效果的方式是實(shí)施冗余和故障轉(zhuǎn)移功能來避免單一故障點(diǎn)。對(duì)于災(zāi)難恢復(fù)方案,常見的做法是保留數(shù)據(jù)和日志文件的備份。以下部分概述了Azure中內(nèi)置的功能。此外,提供了可根據(jù)具體需求進(jìn)行配置的其他選項(xiàng):
Azure提供內(nèi)置的高可用性:SQL數(shù)據(jù)庫(kù)和SQL托管實(shí)例的高可用性
“業(yè)務(wù)關(guān)鍵”層包括故障轉(zhuǎn)移組、完整和差異日志備份,以及默認(rèn)已啟用的時(shí)間點(diǎn)還原備份:
自動(dòng)備份
使用自動(dòng)數(shù)據(jù)庫(kù)備份恢復(fù)數(shù)據(jù)庫(kù)-時(shí)間點(diǎn)還原
可以配置其他業(yè)務(wù)連續(xù)性功能,如跨不同Azure地域的區(qū)域冗余配置和自動(dòng)故障轉(zhuǎn)移組:
高級(jí)&業(yè)務(wù)關(guān)鍵服務(wù)層的高可用性區(qū)域冗余配置
常規(guī)用途服務(wù)層的高可用性區(qū)域冗余配置
業(yè)務(wù)連續(xù)性概述