cossacklabs/acra

GitHub: cossacklabs/acra

一款数据库安全防护套件,提供字段级加密、可搜索加密、SQL防火墙和入侵检测功能,帮助企业在存储层保护敏感数据并满足隐私合规要求。

Stars: 1475 | Forks: 136

Acra: database security suite
Database protection suite with field level encryption and intrusion detection.

GitHub release Circle CI Coverage Status godoc
Server platforms Client platforms Install on DigitalOcean


| [Acra 工程示例](https://github.com/cossacklabs/acra-engineering-demo) | [文档和教程](https://docs.cossacklabs.com/acra/) | [安装说明](https://github.com/cossacklabs/acra#installation-and-launch) | [Acra 反馈](#acra-feedback) | | ---- | ---- | ---- | ---- | ## 什么是 Acra Acra —— 用于保护敏感和个人数据的数据库安全套件。 Acra 在一个套件中提供了数据字段的[应用层加密](https://www.infoq.com/articles/ale-software-architects/)、多层访问控制、数据库防泄漏以及入侵检测功能。Acra 专为将数据存储在一个或多个数据库/数据存储中的分布式应用(Web、服务器端和移动端)而设计。
完美兼容 Acra 的应用 典型行业
将数据存储在中央数据库或对象存储中的 Web 和移动应用
  • 医疗保健、患者应用
  • 金融、金融科技、数字银行
  • SaaS
  • 关键基础设施
  • 拥有 > 1000 名用户的应用
在云端收集遥测数据并进行数据处理的物联网 (IoT) 应用
高负载数据处理应用
Acra 为您提供了在将每条敏感数据记录(数据字段、数据库单元格、json)存储到数据库/文件存储之前对其进行加密的工具。然后在安全隔离的区域(在 Acra 端)对其进行解密。Acra 允许尽早加密数据并对加密数据进行操作。 Acra 的[加密设计](https://docs.cossacklabs.com/acra/acra-in-depth/security-design/)确保从应用程序或数据库中泄漏的任何秘密信息(密码、密钥等)都不足以解密受保护的数据。Acra 将泄漏范围降至最低,检测未经授权的行为并防止数据泄漏,同时向运维人员通报正在发生的安全事件。 这是 [Acra 社区版](https://www.cossacklabs.com/acra/#pricing),对商业和非商业使用永久免费。 ### 主要安全特性
  • 应用层加密
  • 在客户端和/或 Acra 端进行加密——每个数据字段都使用唯一的加密密钥进行加密。
  • 选择性加密
  • 您可以选择要加密的列,以平衡安全性和性能。
  • 快速可靠的加密
  • 两种加密信封:AcraBlocks 和 AcraStructs
    AcraBlocks 是快速的对称容器,建议默认使用。
    AcraStructs 是非对称容器,用于客户端加密。
  • 可搜索加密
  • 无需解密即可搜索加密数据。专为精确查询而设计,基于 AES-GCM 和盲索引。
  • 掩码/匿名化
  • 使用完全或部分掩码来移除或遮蔽敏感数据。
  • 令牌化
  • 用令牌替换敏感数据,并仅在需要时将其与原始数据匹配。
  • 基础密钥管理工具
  • 内置的密钥生成、导出、备份、轮换等工具。
  • 拦截可疑 SQL 查询
  • 通过内置的 SQL 防火墙实现。
  • 入侵检测
  • 使用毒药记录(蜜罐)来警告可疑行为。
  • 无需数据重加密的密钥轮换
  • Acra 企业版用户可用。
  • KMS 支持
  • 加密保护的审计日志
  • Acra 针对数据生命周期的不同部分和阶段提供了不同层级的防御。这就是**纵深防御**——一套独立的安全控制措施,旨在在攻击者突破外围防线时减轻多种风险。 ### 多种集成方式
  • AcraServer:透明的 SQL 代理
  • 所有 Acra 功能被打包进一个数据库代理中,该代理解析应用程序与数据库之间的流量,并在适当时应用安全功能。
  • AcraTranslator:加密即服务 API
  • API 服务器,通过流量保护将 Acra 的大部分功能作为 HTTP / gRPC API 公开。
  • AcraConnector:传输身份验证和加密
  • 可选的客户端服务,用于身份验证和传输加密。
  • AnyProxy:通过 SDK 将 Acra 与任何数据库/数据存储一起使用 ᵉ
  • Acra 企业版用户可用。
  • AcraWriter:用于客户端加密的 SDK ᵉ
  • AcraReader:用于客户端解密的 SDK ᵉ
  • AcraTranslator 的 SDK:封装了 AcraTranslator API 的客户端 SDK ᵉ
  • AcraTranslator 的批量 API
  • ### 对开发和 DevOps 友好
  • 安全的默认设置
  • 您的基础设施从一开始就是安全的,无需额外配置。
  • 加密技术隐藏在底层
  • 没有选择错误密钥长度或算法填充的风险。
  • 对自动化友好
  • 易于配置和自动化。
  • 快速的基础设施集成
  • 可通过二进制包或 Docker 镜像集成。
  • 简单的客户端集成
  • 只需对应用程序代码进行最少的更改。
  • 日志、指标、链路追踪
  • 贯穿所有 Acra 组件;
    兼容 ELK stack、Datadog、Graylog、Prometheus、Grafana、Jaeger。
  • 无供应商锁定
  • 提供回滚工具可将数据库解密为明文。
  • 演示和示例
  • 提供大量基于 Web 和 Docker 的示例项目。
  • DigitalOcean Acra 一键应用
  • 在您的 DigitalOcean 云端运行 AcraServer。
  • 提供托管解决方案
  • 我们可以为您设置和管理 Acra
    ## 加密 Acra 依赖于我们的加密库 [Themis](https://www.cossacklabs.com/themis/),它基于[最可靠的密码](https://docs.cossacklabs.com/themis/architecture/soter/)的[最佳开源实现](https://docs.cossacklabs.com/themis/crypto-theory/cryptography-donors/)来实现高级加密系统。Acra 严格不包含自制的加密原语或晦涩的密码。 为了提供其独特的保证,Acra 依赖于知名密码和智能密钥管理方案的组合。请参阅[加密和密钥管理](https://docs.cossacklabs.com/acra/acra-in-depth/cryptography-and-key-management/)。
    默认加密原语来源 OpenSSL
    支持的加密原语来源 ᵉ BoringSSL、LibreSSL、符合 FIPS、符合 GOST、HSM
    存储加密 (AcraBlocks) AES-256-GCM + AES-256-GCM
    存储加密 (AcraStructs) AES-256-GCM + ECDH
    传输加密 TLS v1.2+ 或 Themis Secure Session
    KMS 集成 Amazon KMS、Google Cloud Platform KMS、HashiCorp Vault、Keywhiz 等
    ᵉ — 仅在 [Acra 企业版](https://www.cossacklabs.com/acra/#pricing/)中提供。[给我们发邮件](mailto:sales@cossacklabs.com)以获取完整的功能列表和报价。 ## Acra 是如何工作的? Acra 由多个服务和实用工具组成。Acra 服务允许您构建无限复杂的数据流,这些数据流完全适合您的特定基础设施。根据您的架构和用例,您可能只需部署基本服务或部署所有服务。 * **安全执行组件**:“发生加密”的服务。其中一个是必需的:AcraServer、AcraTranslator、AnyProxy 或客户端 SDK。 * **密钥存储:** Acra 保存加密密钥的数据存储:Redis、数据库中的表、任何键值 (KV) 存储。其中一个是必需的。 * **主密钥存储:** KMS、Vault。推荐使用其中一个。 * **附加服务和实用工具:** 密钥管理实用工具、数据迁移脚本、传输安全服务、策略管理工具。这些都是可选的。 请参阅 [Acra 深入解析 / 架构](https://docs.cossacklabs.com/acra/acra-in-depth/architecture/)以了解更多关于 Acra 组件的信息。请参阅 [Acra 深入解析 / 数据流](https://docs.cossacklabs.com/acra/acra-in-depth/data-flow/)以查看更多基于 Acra 的典型数据流和部署。 ### 使用 AcraServer 保护 SQL 数据库中的数据 让我们看看 [使用 AcraServer 的最简单数据流](https://docs.cossacklabs.com/acra/acra-in-depth/data-flow/#simplest-version-with-sql-proxy)。 AcraServer 作为透明加密/解密代理与 SQL 数据库配合使用。应用程序不知道数据在到达数据库之前已被加密,数据库也不知道有人加密了数据。这就是为什么我们经常将这种模式称为“透明加密”。

    Server-side encryption and decryption using AcraServer

    _您有一个与 SQL 数据库通信的客户端应用程序。您在中间添加 AcraServer,作为 SQL 代理运行,并将应用程序指向它。_ **以下是对数据库进行数据读取和写入的过程:** 1. 您部署 AcraServer 并对其进行配置:数据库连接、TLS 证书、选择要加密、掩码或令牌化的字段、启用 SQL 请求防火墙等。 2. AcraServer 一旦部署完成,就准备好接受 SQL 请求了。 3. 您将客户端应用程序指向 AcraServer,而不是 SQL 数据库。 4. 在接收到来自应用程序的 SQL 查询时,AcraServer 解析每个查询并执行安全操作:加密、掩码、令牌化。为了知道要更改哪些值,AcraServer 使用一个配置文件,您已在其中描述了哪些列应该被加密、掩码、令牌化。 5. 执行操作后,AcraServer 将修改后的查询传递给数据库,并将数据库的响应返回给客户端应用程序。假设您选择加密 email 字段:这意味着原始字符串被加密为[加密容器](https://docs.cossacklabs.com/acra/acra-in-depth/data-structures/)并作为二进制数据发送到数据库。 6. 当客户端应用程序想要读取数据时,它会向 AcraServer 发送一个 SELECT 查询,AcraServer 再将其发送到数据库。 7. 在检索到数据库响应后,AcraServer 尝试对指定的字段进行解密、反掩码、反令牌化,并将它们返回给应用程序。 8. 应用程序接收到明文数据。 除了数据处理操作外,AcraServer 还会分析 SQL 查询:使用内置的可配置 SQL 防火墙拦截不需要的查询,使用毒药记录检测 SQL 注入,发送日志和指标,并在出现可疑情况时向您的运维团队发出警报。 查看 [指南:将 AcraServer 集成到基础设施中](https://docs.cossacklabs.com/acra/guides/integrating-acra-server-into-infrastructure/)以了解更多关于 AcraServer 的功能及其使用方法。 ### 使用 AcraTranslator 保护任何文件存储中的数据 让我们看看[使用 AcraTranslator 的最简单数据流](https://docs.cossacklabs.com/acra/acra-in-depth/data-flow/#simplest-version-with-api-service)。 AcraTranslator 使用 HTTP 和 gRPC API 作为加密即服务运行。应用程序向 AcraTranslator 发送包含数据字段和操作(加密、解密、令牌化、反令牌化等)的 API 请求。应用程序负责将加密数据存储在数据库(NoSQL、KV 存储、SQL、AWS S3 —— 任何类型)中,并与 AcraTranslator 通信以将其解密回来。 AcraTranslator 和 AcraServer 是完全独立的服务器端组件,可以根据您的基础设施一起或单独使用。

    Server-side encryption and decryption using AcraTranslator

    _您有一个客户端应用程序,它知道要加密、解密、令牌化哪些字段,以及将它们存储在哪里。您添加了 AcraTranslator,并教导应用程序执行 API 调用来使用它。_ **以下是对数据库进行数据读取和写入的过程:** 1. 您在您的基础设施中部署 AcraTranslator 并配置 TLS 证书。 2. AcraTranslator 一旦部署完成,就准备好接受 API 请求了。 3. 您的应用程序调用 AcraTranslator 并发送数据字段以及对它们的操作(加密、解密、令牌化、反令牌化)。 4. 在接收到 API 请求时,AcraTranslator 执行所需的操作并将结果发送回应用程序。假设应用程序发送“email”字段和“encrypt”操作。在这种情况下,原始字符串被加密为[加密容器](https://docs.cossacklabs.com/acra/acra-in-depth/data-structures/)并作为二进制数据发送回应用程序。 5. 应用程序获取加密数据并将其存储在数据库/数据存储中。 6. 当应用程序需要获取明文数据时,它从数据库/数据存储中读取加密数据,并向 AcraTranslator 发送 API 请求。假设应用程序发送“email”字段和“decrypt”操作。在这种情况下,原始数据(二进制块)被解密为字符串并发送回应用程序。 除了数据处理操作外,AcraTranslator 还会分析 API 查询:使用毒药记录检测入侵,发送日志和指标,并在出现可疑情况时向您的运维团队发出警报。 查看 [指南:将 AcraTranslator 集成到基础设施中](https://docs.cossacklabs.com/acra/guides/integrating-acra-translator-into-new-infrastructure/)以了解更多关于 AcraServer 的功能及其使用方法。 ## 可用性 ### 兼容性和集成 Acra 是一套组件,其中大多数是“服务器端”的,这意味着您需要部署和配置 AcraServer、AcraTranslator 或 AnyProxy,并将您的客户端应用程序连接到它们。 Acra 组件兼容众多的关系型数据库 (RDBMS)、对象和键值存储、云平台、外部密钥管理系统 (KMS)、负载均衡系统。
    云平台 DigitalOcean、AWS、GCP、Heroku、任何平台
    关系型数据库 (RDBMS) MySQL v5.7+、PosgtreSQL v9.4-v11、MariaDB v10.3;
    Google Cloud SQL、Amazon RDS
    对象存储 文件系统、键值数据库、Amazon S3、Google Cloud DataStore
    负载均衡 HAProxy、云负载均衡器
    服务器端平台 Ubuntu、Debian、CentOS、RHEL;
    Docker
    客户端应用语言 任何语言 :)
    开源 Acra 的集成支持有限,更多服务仅在 [Acra 企业版](https://www.cossacklabs.com/acra/#pricing)中提供。 ### 服务器端 服务器端的 Acra 组件(AcraServer、AcraTranslator、AnyProxy)应运行在单独的服务器/虚拟机上,以实现更好的隔离和分区。密钥管理实用工具和数据库辅助程序通常与 AcraServer、AcraTranslator、AnyProxy 运行在同一台服务器上。 服务器端的 Acra 组件可在大多数 Linux 发行版(Ubuntu、Debian、CentOS)和 Docker 镜像上运行。请注意,服务器端的 Acra 组件与作为宿主操作系统的 Windows OS 不兼容,请考虑使用 Docker。 请参阅[入门](https://docs.cossacklabs.com/acra/getting-started/)以了解如何[安装 Acra](https://docs.cossacklabs.com/acra/getting-started/installing/)或[无需编写代码即可尝试 Acra](https://docs.cossacklabs.com/acra/getting-started/trying/)。 ### 客户端 Acra 可以与任何客户端应用程序配合使用。无论您使用什么语言编写应用程序,您都可以将它们连接到 AcraServer(通过 SQL)和 AcraTranslator/AnyProxy(通过 API)以进行数据加密、解密、令牌化和掩码。 Acra 提供了一组客户端 SDK,它们仅在特定用例中有用: - AcraWriter – 用于将数据字段加密为 AcraStructs 的 SDK。当在应用程序端加密数据很重要时(用于构建端到端加密的数据流或在恶劣环境中工作时),请使用它。 - AcraReader – 用于从 AcraStructs 解密数据字段的 SDK。当在应用程序端解密数据很重要时(用于构建端到端加密的数据流或在恶劣环境中工作时),请使用它。 - AcraTranslator 的 SDK – 封装了 AcraTranslator 的 API 的 SDK,使用起来更加方便。 这些 SDK 可用于 Ruby、Python、Go、C++、Node.js、iOS (Swift、ObjC)、Android (Java、Kotlin)、桌面 Java 和 PHP。 ## 安装和启动 请参阅[入门](https://docs.cossacklabs.com/acra/getting-started/)以了解如何[安装 Acra](https://docs.cossacklabs.com/acra/getting-started/installing/)或[无需编写代码即可尝试 Acra](https://docs.cossacklabs.com/acra/getting-started/trying/)。 ## 无需编写代码即可尝试 Acra [Acra 示例项目](https://github.com/cossacklabs/acra-engineering-demo)演示了如何将 Acra 数据保护套件集成到现有应用程序中:基于 Django 和 Ruby on Rails 框架的 Web 应用程序,以及简单的 CLI 应用程序。我们选取了知名应用程序,在其中检测敏感数据并添加了加密层。保护数据对用户是完全透明的,并且只需对基础设施和应用程序代码进行最少的更改。 对开发者和运维人员友好: * 运行单个命令即可部署应用程序、数据库、Acra 组件、日志和仪表板; * 阅读代码更改,看看将加密集成到客户端应用程序中需要多少精力; * 通过阅读日志、在 Prometheus 中监控指标、在 Jaeger 中检查链路追踪以及查看 Grafana 仪表板来了解 Acra 是如何工作的; * 检查 Docker-compose 文件、架构图、数据库表等等。 要求:安装了 Docker 的 Linux 或 macOS。 | ⚙️ [运行 Acra 示例项目](https://github.com/cossacklabs/acra-engineering-demo) ⚙️ | |---| ## 文档和教程 有关 Acra 的最新版本文档、教程和演示可在官方 [Cossack Labs 文档服务器](https://docs.cossacklabs.com/acra/)上获取。 为了初步了解 Acra,您可能需要: - [什么是 Acra](https://docs.cossacklabs.com/acra/what-is-acra/) 以获取事物的概述。 - Acra 的[安全控制](https://docs.cossacklabs.com/acra/security-controls/)以了解更多关于加密、掩码、令牌化、SQL 防火墙、入侵检测等的信息。 - 典型的[数据流](https://docs.cossacklabs.com/acra/acra-in-depth/data-flow/),展示了您需要哪些 Acra 组件以及每种组合的优缺点。 - 阅读关于 Acra [架构](https://docs.cossacklabs.com/acra/acra-in-depth/architecture/)和[安全设计](https://docs.cossacklabs.com/acra/acra-in-depth/security-design/)的说明,以更好地了解使用 Acra 时会得到什么,以及 Acra 运行在何种威胁模型中。 您还可以查看 Cossack Labs 工程师在以下演讲中的幻灯片: - Anastasiia Voitova 的 [“无魔法加密,无痛苦风险管理”](https://speakerdeck.com/vixentael/encryption-without-magic-risk-management-without-pain)。 - Dmytro Shapovalov 的 [“Ruby Web 应用程序的数据加密”](https://speakerdeck.com/shad/data-encryption-for-ruby-web-applications)。 - Artem Storozhuk 的 [“构建 SQL 防火墙:来自开发者的见解”](https://speakerdeck.com/storojs72/building-sql-firewall-insights-from-developers)。 ## 示例项目 | ⚙️ [运行 Acra 示例项目](https://github.com/cossacklabs/acra-engineering-demo) ⚙️ | |---| ## GDPR、HIPAA、CCPA Acra 可以帮助您遵守现行的隐私法规,例如: * [通用数据保护条例 (GDPR)](https://gdpr-info.eu/) * [HIPAA(健康保险流通与责任法案)](https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act) * [DPA(数据保护法)](http://www.legislation.gov.uk/ukpga/2018/12/contents/enacted) * [CCPA(加州消费者隐私法)](https://en.wikipedia.org/wiki/California_Consumer_Privacy_Act) 以指定形式配置和使用 Acra 将涵盖 GDPR 第 25、32、33 和 34 条中描述的大部分要求,以及 HIPAA 的 PII 数据保护要求。阅读更多关于 [Acra 与法规](https://docs.cossacklabs.com/acra/regulations/)的信息。 ## 开源版与企业版 这是 Acra 社区版,即 Acra 的开源版本,对商业和非商业使用 💯 永久免费。如果您发现了错误、看到了可能的改进或对安全设计有意见,请在 [Issues](https://www.github.com/cossacklabs/acra/issues) 中告诉我们。 此外还有 [Acra 企业版](https://www.cossacklabs.com/acra/#pricing)。它提供了更好的性能、冗余/负载均衡,预配置了您选择的加密原语(FIPS、GOST),与您技术栈中的密钥/机密管理工具相集成,包含策略管理、客户端 SDK,并为您的运维和 SRE 提供了大量方便操作的实用工具。[联系我们](mailto:sales@cossacklabs.com)以获取完整的功能列表和报价。 ## 安全咨询 保护敏感数据需要的不仅仅是让加密代码成功编译。Acra 不会让您“开箱即符合”所有现代安全法规,其他任何工具也不会。 [我们帮助公司](https://www.cossacklabs.com/solutions/security-strategy-advisory/)规划其数据安全战略,通过审计、评估数据流、对数据进行分类以及枚举风险。我们致力于达成合规中最艰难、最不受关注的部分——将其从经营成本”转变为“预防风险的安全框架”。 ## Acra 反馈 如果您是 Acra 用户,请留下[简短反馈](https://forms.gle/1pVtknvvRcDpiZYQ8)。 ## 许可证 Acra 社区版作为 Apache 2 开源软件授权。 ## 联系方式 如果您想提出技术问题,请随时提交 [Issue](https://github.com/cossacklabs/acra/issues) 或发送邮件至 [dev@cossacklabs.com](mailto:dev@cossacklabs.com)。 若要联系 Cossack Labs Limited 的业务部门,请发送电子邮件至 [info@cossacklabs.com](mailto:info@cossacklabs.com)。 [![博客](https://img.shields.io/badge/blog-cossacklabs.com-7a7c98.svg)](https://cossacklabs.com/) [![Twitter CossackLabs](https://img.shields.io/badge/twitter-cossacklabs-fbb03b.svg)](https://twitter.com/cossacklabs) [![DEV CossackLabs](https://img.shields.io/badge/devto-%40cossacklabs-black.svg)](https://dev.to/cossacklabs/) [![Medium CossackLabs](https://img.shields.io/badge/medium-%40cossacklabs-orange.svg)](https://medium.com/@cossacklabs/)
    标签:CISA项目, DevSecOps, Go语言, ProjectDiscovery, Python工具, SQL, 上游代理, 加密, 合规, 字段级加密, 安全测试工具, 搜索引擎查询, 数据保护, 数据库代理, 数据泄露, 日志审计, 测试用例, 漏洞扫描器, 程序破解, 系统审计, 网络安全, 网络安全, 蜜罐, 证书利用, 请求拦截, 透明加密, 防SQL注入, 隐私保护, 隐私保护