APISIX 是怎麼保護使用者的敏感資料不被洩露的?

API7_技術團隊發表於2023-03-02

本文以 APISIX 作為例子,為大家介紹瞭如何藉助 Global Data Encryption 功能來保護敏感資料,確保不會有任何敏感資料進行明文儲存,這樣即使 etcd 中所有儲存的資料都被盜取,也不會造成敏感資料洩露,從而有效提升了 APISIX 的安全性。

作者劉維,API7.ai 技術工程師,Apache APISIX Contributor。

原文連結

什麼是敏感資料

敏感資料,又稱隱私資料,主要是指洩露後可能會給個人或者公司帶來嚴重危害的資料,包括但不限於個人身份資訊,企業經營資料等。

為什麼要保護敏感資料

對於個人來說,如果敏感資料被洩露,輕則可能受到無止盡的廣告騷擾,重則可能導致人格尊嚴受到侵害,或者人身、財產安全受到危害。

對於企業來說,敏感資料直接關係企業的資訊保安。例如金鑰,證書等敏感資訊,一旦遭受洩露,企業將會遭受信任損失和財務損失,甚至可能面臨法律責任。

在 API 閘道器中有哪些敏感資料

API 閘道器作為業務流量的入口,往往包含了大量的敏感資料,例如 API 金鑰、用於鑑權認證的 token 等,除了基本的負載均衡、流量管理等功能外,提升安全、防止敏感資訊洩露,也至關重要,因此對 API 閘道器中的敏感資料進行保護具有重要意義。

Sensitive Data

API 閘道器怎麼保護隱私資料

大致思路一般如下:

  1. 將敏感資料置於保護區內,對訪問許可權進行嚴格的控制
  2. 增加風控系統,對異常行為和業務合規進行風險控制
  3. 對敏感資料進行脫敏處理或加密儲存

下面將以 Apache APISIX 為例,展示如何在 API 閘道器中對敏感資料進行保護。

Apache APISIX 在保護隱私資料中的實踐

Apache APISIX 是 Apache 軟體基金會的頂級開源專案,也是當前最活躍的開源閘道器專案。作為一個動態、實時、高效能的開源 API 閘道器,Apache APISIX 提供了負載均衡、動態上游、灰度釋出、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。

使用者可以透過編寫外掛來對 Apache APISIX 功能進行擴充套件,得益於成熟的社群和越來越多的活躍開發者,Apache APISIX 的外掛數量在日益增多,其中有些外掛攜帶敏感資訊,例如 jwt-auth 外掛的配置項 secretprivate_key,為了防止這些資料被非法獲取,我們有必要對其進行加密儲存。

為了增強 APISIX 的安全性,更好的保護使用者的隱私,APISIX 在 3.1.0 版本中引入了 Global Data Encryption 功能,有了這個功能,開發者在開發新外掛的時候,只需要在外掛的 schema 中指定要加密的資料,APISIX 就能在控制面寫入的時候自動進行加密儲存,資料面讀取的時候自動解密,對開發者完全透明。

Global Data Encryption

下面我們來看看具體的示例。

未開啟資料加密功能

  1. 下發配置
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"
        }
    }
}'
  1. 確定 etcd 中的敏感資料狀態
etcdctl get /apisix/consumers/foo
{"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}}}

可以看到 password 欄位是明文儲存

開啟資料加密功能

  1. config.yaml 中開啟 data_encryption
apisix:
    data_encryption:
    enable: true
    keyring:
        - edd1c9f0985e76a2
  1. 啟用已經支援敏感資料加密的外掛,這裡以 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"
        }
    }
}'
  1. 驗證外掛功能
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"}

外掛功能正常

  1. 確定 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 努力的目標。瞭解更多和產品試用

相關文章