本文以 APISIX 作為例子,為大家介紹瞭如何藉助 Global Data Encryption
功能來保護敏感資料,確保不會有任何敏感資料進行明文儲存,這樣即使 etcd 中所有儲存的資料都被盜取,也不會造成敏感資料洩露,從而有效提升了 APISIX 的安全性。
作者劉維,API7.ai 技術工程師,Apache APISIX Contributor。
什麼是敏感資料
敏感資料,又稱隱私資料,主要是指洩露後可能會給個人或者公司帶來嚴重危害的資料,包括但不限於個人身份資訊,企業經營資料等。
為什麼要保護敏感資料
對於個人來說,如果敏感資料被洩露,輕則可能受到無止盡的廣告騷擾,重則可能導致人格尊嚴受到侵害,或者人身、財產安全受到危害。
對於企業來說,敏感資料直接關係企業的資訊保安。例如金鑰,證書等敏感資訊,一旦遭受洩露,企業將會遭受信任損失和財務損失,甚至可能面臨法律責任。
在 API 閘道器中有哪些敏感資料
API 閘道器作為業務流量的入口,往往包含了大量的敏感資料,例如 API 金鑰、用於鑑權認證的 token 等,除了基本的負載均衡、流量管理等功能外,提升安全、防止敏感資訊洩露,也至關重要,因此對 API 閘道器中的敏感資料進行保護具有重要意義。
API 閘道器怎麼保護隱私資料
大致思路一般如下:
- 將敏感資料置於保護區內,對訪問許可權進行嚴格的控制
- 增加風控系統,對異常行為和業務合規進行風險控制
- 對敏感資料進行脫敏處理或加密儲存
下面將以 Apache APISIX 為例,展示如何在 API 閘道器中對敏感資料進行保護。
Apache APISIX 在保護隱私資料中的實踐
Apache APISIX 是 Apache 軟體基金會的頂級開源專案,也是當前最活躍的開源閘道器專案。作為一個動態、實時、高效能的開源 API 閘道器,Apache APISIX 提供了負載均衡、動態上游、灰度釋出、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。
使用者可以透過編寫外掛來對 Apache APISIX 功能進行擴充套件,得益於成熟的社群和越來越多的活躍開發者,Apache APISIX 的外掛數量在日益增多,其中有些外掛攜帶敏感資訊,例如 jwt-auth 外掛的配置項 secret
和 private_key
,為了防止這些資料被非法獲取,我們有必要對其進行加密儲存。
為了增強 APISIX 的安全性,更好的保護使用者的隱私,APISIX 在 3.1.0 版本中引入了 Global Data Encryption
功能,有了這個功能,開發者在開發新外掛的時候,只需要在外掛的 schema 中指定要加密的資料,APISIX 就能在控制面寫入的時候自動進行加密儲存,資料面讀取的時候自動解密,對開發者完全透明。
下面我們來看看具體的示例。
未開啟資料加密功能
- 下發配置
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 中的敏感資料狀態
etcdctl get /apisix/consumers/foo
{"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}}}
可以看到 password
欄位是明文儲存
開啟資料加密功能
- 在
config.yaml
中開啟data_encryption
:
apisix:
data_encryption:
enable: true
keyring:
- edd1c9f0985e76a2
- 啟用已經支援敏感資料加密的外掛,這裡以
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 中的敏感資料狀態
etcdctl get /apisix/consumers/foo
{"create_time":1674009211,"update_time":1674009211,"plugins":{"basic-auth":{"password":"+kOEVUuRc5rC5ZwvvAMLwg==","username":"foo"}},"username":"foo"}
可以看到 password
欄位已經被成功加密,此時就算資料被洩露,其他人也無法破解。
總結
在 API 閘道器中,包含了大量的敏感資料,因此需要採取有效的手段來對資料進行保護,本文以 APISIX 作為例子,為大家介紹瞭如何藉助 Global Data Encryption
功能來保護敏感資料,確保不會有任何敏感資料進行明文儲存,這樣即使 etcd 中所有儲存的資料都被盜取,也不會造成敏感資料洩露,從而有效提升了 APISIX 的安全性。同時除了對敏感資料進行加密以外,APISIX 還支援將敏感資訊直接放到第三方服務,即Secret Manager功能,進一步提升了安全性。
希望透過上述分享,能夠使大家更多的瞭解如何在 API 閘道器中保護敏感資料,從而保障企業的資訊保安。
關於 API7.ai 與 APISIX
API7.ai 是一家提供 API 處理和分析的開源基礎軟體公司,於 2019 年開源了新一代雲原生 API 閘道器 -- APISIX 並捐贈給 Apache 軟體基金會。此後,API7.ai 一直積極投入支援 Apache APISIX 的開發、維護和社群運營。與千萬貢獻者、使用者、支持者一起做出世界級的開源專案,是 API7.ai 努力的目標。瞭解更多和產品試用。