本文以 APISIX 作為例子,為大家介紹了如何借助 Global Data Encryption
功能來保護敏感數(shù)據(jù)歇终,確保不會有任何敏感數(shù)據(jù)進行明文存儲,這樣即使 etcd 中所有存儲的數(shù)據(jù)都被盜取逼龟,也不會造成敏感數(shù)據(jù)泄露评凝,從而有效提升了 APISIX 的安全性。
作者劉維腺律,API7.ai 技術(shù)工程師奕短,Apache APISIX Contributor。
什么是敏感數(shù)據(jù)
敏感數(shù)據(jù)匀钧,又稱隱私數(shù)據(jù)篡诽,主要是指泄露后可能會給個人或者公司帶來嚴重危害的數(shù)據(jù),包括但不限于個人身份信息榴捡,企業(yè)經(jīng)營數(shù)據(jù)等杈女。
為什么要保護敏感數(shù)據(jù)
對于個人來說,如果敏感數(shù)據(jù)被泄露吊圾,輕則可能受到無止盡的廣告騷擾达椰,重則可能導致人格尊嚴受到侵害,或者人身项乒、財產(chǎn)安全受到危害啰劲。
對于企業(yè)來說,敏感數(shù)據(jù)直接關(guān)系企業(yè)的信息安全檀何。例如密鑰蝇裤,證書等敏感信息廷支,一旦遭受泄露,企業(yè)將會遭受信任損失和財務(wù)損失栓辜,甚至可能面臨法律責任恋拍。
在 API 網(wǎng)關(guān)中有哪些敏感數(shù)據(jù)
API 網(wǎng)關(guān)作為業(yè)務(wù)流量的入口,往往包含了大量的敏感數(shù)據(jù)藕甩,例如 API 密鑰施敢、用于鑒權(quán)認證的 token 等,除了基本的負載均衡狭莱、流量管理等功能外僵娃,提升安全、防止敏感信息泄露腋妙,也至關(guān)重要默怨,因此對 API 網(wǎng)關(guān)中的敏感數(shù)據(jù)進行保護具有重要意義。
API 網(wǎng)關(guān)怎么保護隱私數(shù)據(jù)
大致思路一般如下:
將敏感數(shù)據(jù)置于保護區(qū)內(nèi)骤素,對訪問權(quán)限進行嚴格的控制
增加風控系統(tǒng)先壕,對異常行為和業(yè)務(wù)合規(guī)進行風險控制
對敏感數(shù)據(jù)進行脫敏處理或加密存儲
下面將以 Apache APISIX 為例,展示如何在 API 網(wǎng)關(guān)中對敏感數(shù)據(jù)進行保護谆甜。
Apache APISIX 在保護隱私數(shù)據(jù)中的實踐
Apache APISIX 是 Apache 軟件基金會的頂級開源項目垃僚,也是當前最活躍的開源網(wǎng)關(guān)項目。作為一個動態(tài)规辱、實時谆棺、高性能的開源 API 網(wǎng)關(guān),Apache APISIX 提供了負載均衡罕袋、動態(tài)上游改淑、灰度發(fā)布、服務(wù)熔斷浴讯、身份認證朵夏、可觀測性等豐富的流量管理功能。
用戶可以通過編寫插件來對 Apache APISIX 功能進行擴展榆纽,得益于成熟的社區(qū)和越來越多的活躍開發(fā)者仰猖,Apache APISIX 的插件數(shù)量在日益增多,其中有些插件攜帶敏感信息奈籽,例如 jwt-auth 插件的配置項 secret
和 private_key
饥侵,為了防止這些數(shù)據(jù)被非法獲取,我們有必要對其進行加密存儲衣屏。
為了增強 APISIX 的安全性躏升,更好的保護用戶的隱私,APISIX 在 3.1.0 版本中引入了 Global Data Encryption
功能狼忱,有了這個功能膨疏,開發(fā)者在開發(fā)新插件的時候一睁,只需要在插件的 schema 中指定要加密的數(shù)據(jù),APISIX 就能在控制面寫入的時候自動進行加密存儲佃却,數(shù)據(jù)面讀取的時候自動解密者吁,對開發(fā)者完全透明。
下面我們來看看具體的示例双霍。
未開啟數(shù)據(jù)加密功能
- 下發(fā)配置
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "foo",
"plugins": {
"basic-auth": {
"username": "foo",
"password": "bar"
}
}
}'
- 確定 etcd 中的敏感數(shù)據(jù)狀態(tài)
etcdctl get /apisix/consumers/foo
{"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}}}
可以看到 password
字段是明文存儲
開啟數(shù)據(jù)加密功能
- 在
config.yaml
中開啟data_encryption
:
apisix:
data_encryption:
enable: true
keyring:
- edd1c9f0985e76a2
- 啟用已經(jīng)支持敏感數(shù)據(jù)加密的插件,這里以
basic-auth
插件為例
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "foo",
"plugins": {
"basic-auth": {
"username": "foo",
"password": "bar"
}
}
}'
- 驗證插件功能
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/get",
"plugins": {
"basic-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'
能正常訪問
curl -i -ufoo:bar http://127.0.0.1:9080/get
HTTP/1.1 200 OK
...
密碼錯誤批销,不能訪問
curl -i -ufoo:test http://127.0.0.1:9080/get
HTTP/1.1 401 Unauthorized
...
{"message":"Invalid user authorization"}
插件功能正常
- 確定 etcd 中的敏感數(shù)據(jù)狀態(tài)
etcdctl get /apisix/consumers/foo
{"create_time":1674009211,"update_time":1674009211,"plugins":{"basic-auth":{"password":"+kOEVUuRc5rC5ZwvvAMLwg==","username":"foo"}},"username":"foo"}
可以看到 password
字段已經(jīng)被成功加密洒闸,此時就算數(shù)據(jù)被泄露,其他人也無法破解均芽。
總結(jié)
在 API 網(wǎng)關(guān)中丘逸,包含了大量的敏感數(shù)據(jù),因此需要采取有效的手段來對數(shù)據(jù)進行保護掀宋,本文以 APISIX 作為例子深纲,為大家介紹了如何借助 Global Data Encryption
功能來保護敏感數(shù)據(jù),確保不會有任何敏感數(shù)據(jù)進行明文存儲劲妙,這樣即使 etcd 中所有存儲的數(shù)據(jù)都被盜取湃鹊,也不會造成敏感數(shù)據(jù)泄露,從而有效提升了 APISIX 的安全性镣奋。同時除了對敏感數(shù)據(jù)進行加密以外币呵,APISIX 還支持將敏感信息直接放到第三方服務(wù),即Secret Manager功能侨颈,進一步提升了安全性余赢。
希望通過上述分享,能夠使大家更多的了解如何在 API 網(wǎng)關(guān)中保護敏感數(shù)據(jù)哈垢,從而保障企業(yè)的信息安全妻柒。