在使用 ES 的過(guò)程中乓梨,如果 ES 集群中存放的是敏感數(shù)據(jù),是不能夠隨便供人查看的径荔。什么督禽?在排查故障?那也不行总处,合規(guī)高于一切狈惫。
不知道大家有沒(méi)有遇到過(guò)上面描述的情景,或者如果是你遇到了鹦马,你會(huì)怎么辦呢胧谈?
我們常常講,解決問(wèn)題要抓住問(wèn)題的本質(zhì)荸频。人類(lèi)的本質(zhì)是復(fù)讀機(jī)菱肖,上述問(wèn)題的本質(zhì)是"敏感"。
既然問(wèn)題的本質(zhì)是數(shù)據(jù)敏感旭从,那就把敏感數(shù)據(jù)變成普通數(shù)據(jù)稳强。這樣既符合了合規(guī)要求,也促進(jìn)大家工作和悦。
話不多說(shuō)退疫,我們 demo。
在下面的 demo 過(guò)程中鸽素,我們主要用到 easysearch褒繁,不為別的,因?yàn)樗詭撁艄δ堋?/p>
準(zhǔn)備敏感數(shù)據(jù)
下面的數(shù)據(jù)中馍忽,字段 description 和 country 是敏感的棒坏。受限用戶查看時(shí),敏感數(shù)據(jù)顯示脫敏后的內(nèi)容遭笋。
POST movies/_doc/1
{
"year": 2023,
"title": "This is a movie",
"description":"我是敏感數(shù)據(jù)"
}
POST movies/_doc/2
{
"year": 2023,
"title": "What r u looking at",
"description":"我是敏感數(shù)據(jù)",
"country":"我是敏感數(shù)據(jù)"
}
建立 hash 脫敏角色并賦給用戶
默認(rèn)情況下坝冕,easysearch 安全模塊使用 BLAKE2b 算法,但你可以使用 JVM 提供的任何哈希算法瓦呼。此列表通常包括 MD5徽诲、SHA-1、SHA-384 和 SHA-512。
此次測(cè)試谎替,我們就用默認(rèn)的算法偷溺,建立一個(gè) masked_movie 角色。該角色只能查看 movies 索引钱贯,且 description 和 country 字段會(huì)被脫敏查看挫掏,脫敏方式是默認(rèn)的 BLAKE2b 算法。
PUT _security/role/masked_movie
{
"cluster": [],
"indices": [{
"names": ["movies"],
"field_mask": ["description","country"],
"privileges": ["read"]
}]
}
PUT _security/user/movie-user
{
"password": "password",
"roles": ["masked_movie"]
}
Hash 脫敏效果
受限用戶查看效果
高權(quán)用戶查看效果
像這樣切換用戶的操作秩命,在生產(chǎn)環(huán)境中其實(shí)也沒(méi)這么簡(jiǎn)單尉共。生產(chǎn)的密碼不能隨便告知他人,甚至不能通過(guò)口頭弃锐、通訊軟件來(lái)傳遞袄友。針對(duì)這種情況,easysearch 有個(gè)身份模擬功能霹菊,可配置一個(gè)用戶能模擬其他用戶來(lái)訪問(wèn) ES剧蚣。
配置好后,我就能用 admin 直接模擬 movie-user 用戶了(-H "security_run_as:movie-user")旋廷。
效果如下:
相關(guān)鏈接
https://www.infinilabs.com/docs/latest/easysearch/references/security/access-control/run-as/
正則脫敏
除了使用哈希鸠按,還可以使用一個(gè)或多個(gè)正則表達(dá)式來(lái)替換字符串從而達(dá)到字段脫敏的效果。語(yǔ)法是 <field>::/<regular-expression>/::<replacement-string> 饶碘。如果使用多個(gè)正則表達(dá)式目尖,則結(jié)果將從左向右傳遞,就像 shell 中的管道操作一樣扎运。
我們?cè)俳⒁粋€(gè)正則脫敏的角色和用戶瑟曲,讓敏感數(shù)據(jù)只顯示第一個(gè)漢字。
PUT _security/role/masked_movie_re
{
"cluster": [],
"indices": [{
"names": ["movies"],
"field_mask": [
"description::/(.)(.*)/::$1******",
"country::/(.)(.*)/::$1******"
],
"privileges": ["read"]
}]
}
PUT _security/user/movie-user-re
{
"password": "password",
"roles": ["masked_movie_re"]
}
正則脫敏效果
受限用戶查看效果
流量分析與脫敏
大家知道我們還有個(gè)產(chǎn)品叫 Infini Gateway豪治,它可做 ES 流量分析洞拨。在進(jìn)行流量分析時(shí),會(huì)抓取請(qǐng)求的內(nèi)容和返回鬼吵。由于"脫敏"是在 easysearch 里完成的,所以 Gateway 記錄的數(shù)據(jù)篮赢,已經(jīng)是脫敏后的了齿椅。
我們來(lái)看一下,把訪問(wèn)的 url 換成網(wǎng)關(guān)的端口启泣。
curl -ku movie-user-re:password http://localhost:8000/movies/_search?pretty
查看 Gateway 記錄的數(shù)據(jù)
嗯涣脚,香!
好了寥茫,這次 demo 到這里就結(jié)束了遣蚀。大家有什么好的想法、需要解決的場(chǎng)景,歡迎交流芭梯。