用于解決 Azure SQL 數(shù)據(jù)庫(kù)和 Azure SQL 托管實(shí)例常見安全要求的 playbook

來源: Microsoft Azure
作者:Microsoft Azure
時(shí)間:2020-12-31
16717
本文提供了有關(guān)如何解決常見安全要求的最佳做法。并非所有要求都適用于所有環(huán)境,你應(yīng)該向數(shù)據(jù)庫(kù)和安全團(tuán)隊(duì)咨詢要實(shí)現(xiàn)哪些功能。

適用于: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ù)性概述

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Microsoft Azure,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營(yíng)方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營(yíng)、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-172024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁,突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-162024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-102024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-092024-12-09
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家