以資料為中心的資料安全基礎能力建設探索

安全頻道發表於2022-03-03

企業資料安全治理,除了熟悉法律法規條文,資訊採集最小化,服務入口明確隱私協議外,更多的是需要建設內部基礎能力,如資料識別、分類分級、資料加密、許可權管控等資料安全的基礎能力。

本文資料為中心的理念,圍繞資料識別、分類分級、基礎防護幾個方面,結合開源軟體做一次梳理和功能演示,希望能幫助有需要的人員對資料安全有個直觀的瞭解。

在資料識別基礎上,建立資料資產大盤,實現資料資產風險識別、監測、運營的資產全生命週期管理;

在資料分類分級的基礎上,對不同資料資產進行分類、分級,將優勢資源投入到關鍵資產的安全防護上;

在資料安全基礎防護方面,除了應具有基礎設施和架構的安全穩固外,基於資料識別和分類分級,對儲存、傳輸的敏感資料進行加密防護、賬號許可權管控、資料脫敏和分發管控,結合內外部風險變化,最終走向資料安全風控之路。

1、資料識別、分類

在大資料時代的今天,如何做好資料識別、分類,在這個基礎上建立資料資產全生命週期管理是很多企業面臨的挑戰。比如企業內部有多少資料庫表明文儲存手機號欄位、有多少介面對外暴露且有手機號欄位,這些資料庫表、介面等資產又面臨哪些風險,如何做到全生命週期的風險管控。針對結構化資料,如資料庫表中欄位識別、半結構化資料,如日誌中的資料識別、非結構化如圖片、音影片檔案的資料識別,在識別能力的覆蓋範圍、識別準確率、對效能的影響等方面,這對很多企業還是有不小的挑戰。

1.1. 內容識別示例

資料識別可以透過關鍵字、正則、演算法等實現,網上文章很多,以及一些大廠也有成熟的識別技術和方案,從落地實現上主要還是基於業務場景,從資料型別上看主要分為結構化、半結構化、非結構化的資料識別。

結構化:關係型資料庫

半結構化:日誌資料、JSON資料、XML文件等

非結構化:HTML網頁、辦公文件、圖片、音影片檔案等

1.2. 分類分級管理展示

2、利用ShardingSphere-Proxy實現敏感資料加密

ShardingSphere是apache頂級開源專案,旨在構建異構資料庫上層的標準和生態。它關 注如何充分合理地利用資料庫的計算和儲存能力,而並非實現一個全新的資料庫。ShardingSphere 站在 資料庫的上層視角,關注他們之間的協作多於資料庫自身。

連線、增量和可插拔是 Apache ShardingSphere 的核心概念。

  • 連線:透過對資料庫協議、SQL方言以及資料庫儲存的靈活適配,快速的連線應用與多模式的異構資料庫;
  • 增量:獲取資料庫的訪問流量,並提供流量重定向(資料分片、讀寫分離、影子庫)、流量變形(資料加密、資料脫敏)、流量鑑權(安全、審計、許可權)、流量治理(熔斷、限流)以及流量分析(服 務質量分析、可觀察性)等透明化增量功能;
  • 可插拔:專案採用微核心+三層可插拔模型,使核心、功能元件以及生態對接完全能夠靈活的方式 進行插拔式擴充套件,開發者能夠像使用積木一樣定製屬於自己的獨特系統。

ShardingSphere-Proxy定位為透明化的資料庫代理端,提供封裝了資料庫二進位制協議的服務端版本,用於完成對異構語言的支 持。目前提供 MySQL 和 PostgreSQL

安裝

下載ShardingSphere‐Proxy 的最新發行版。解壓縮後修改conf/server.yaml和以config-字首開頭的檔案,如:conf/config-encrypt.yaml 檔案,進行欄位加密配置,其他配置如分片規則、讀寫分離規則配置暫不討論。Linux 作業系統執行 bin/start.sh,可以指定proxy埠,bin/start.sh 3308.

敏感欄位配置

(base) gengdeMacBook-Pro:conf js2thon$ mysql -h127.0.0.1 -uroot -P3308
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.20-Sharding-Proxy 4.1.0
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+----------------------+------------+
| Tables_in_encrypt_db | Table_type |
+----------------------+------------+
| t_encrypt            | BASE TABLE |
+----------------------+------------+
1 row in set (0.03 sec)
mysql> select * from t_encrypt;
+----------+---------+-------------+
| order_id | user_id | phone       |
+----------+---------+-------------+
|       10 |       0 | 18516014911 |
|       11 |       1 | 18516014922 |
|       12 |       2 | 18516014933 |
|       13 |       3 | 18516014944 |
|       14 |       4 | 18516014955 |
+----------+---------+-------------+
5 rows in set (0.09 sec)
mysql> select * from t_encrypt;
+----------+---------+--------------------------+-------------+
| order_id | user_id | phone_cipher             | phone       |
+----------+---------+--------------------------+-------------+
|       10 |       0 | uFZ1RGQfxsUM+GUJqI5rlQ== | 18516014911 |
|       11 |       1 | SGxnMaUHY/HR50hJcYp6Vg== | 18516014922 |
|       12 |       2 | Z5NBefdS9WN3Bl6p45R1Dw== | 18516014933 |
|       13 |       3 | SKqYOUF4dxloUH5M9t/wEg== | NULL        |
|       14 |       4 | 4q+dOa+bxUTFSzX6AOjvUg== | NULL        |
+----------+---------+--------------------------+-------------+

3、利用Vault實現資料庫動態憑證和資料加解密的介面呼叫

Hashicorp Vault解決了管理敏感資訊的問題,如資料庫憑證和API金鑰就是需要以安全的方式儲存和提供給應用程式的敏感資料,Vault支援許多secret引擎,部分如下:

Key-Value: 簡單的靜態鍵值對

動態生成的憑據:由Vault根據客戶端請求生成

加密金鑰:用於使用客戶端資料執行加密功能

3.1.資料庫動態憑證

Vault安裝配置較為簡單,這裡主要列下相關配置資訊:

資料庫連結配置

角色配置

獲取資料庫憑證

使用動態憑證登入驗證

(base) js2thondeMacBook-Pro:Downloads js2thon$ mysql -u v-my-r-owFmZ3LFu -pM8DdaYZXYRU-rNIm2CbQ
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1379
Server version: 5.6.41-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

上面在Vault配置了使用者只有SELECT許可權,驗證可以正常查詢

mysql> use mysql_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables_in_mysql_test |
+----------------------+
| account              |
+----------------------+
mysql> select * from account;
+------+------+
| id   | name |
+------+------+
|  100 | abc  |
+------+------+
1 row in set (0.00 sec)

執行資料插入操作,因為沒有許可權Vault報錯。

mysql> insert into account values(101,'def');
ERROR 1142 (42000): INSERT command denied to user 'v-my-r-owFmZ3LFu'@'localhost' for table 'account'

3.2.資料加解密介面呼叫

Vault作為kms提供加解密介面,透過呼叫介面實現資料加解密,Vault資料金鑰的建立可參考官網文件,此處忽略。

Vault管理後臺金鑰建立

加解密介面呼叫Python實現

4、問題和思考

本文從資料識別、分類分級、配置管理、儲存欄位加密這個流程梳理下來,其實需要橫向和縱向擴充套件的還非常多,統一金鑰管理、賬號許可權、資產大盤、風險監測和運營管理,這些組成了資料安全的基礎能力。上面也只是羅列了一些開源工具的能力,只是做了單點的簡單功能演示,沒有詳細進一步去了解實現機制和優劣勢,後續有精力再做深一步的研究,也希望有落地實現的同行交流實際經驗,如在架構方案設計、異構適配、效能穩定性等方面的多維度實踐探索。

來自 “ Freebuf ”, 原文作者:js2thon;原文連結:https://www.freebuf.com/articles/database/323318.html,如有侵權,請聯絡管理員刪除。

相關文章