dadrus/heimdall

GitHub: dadrus/heimdall

Heimdall 是一个云原生零信任身份感知代理与访问控制决策服务,用于对进入的 HTTP 请求进行统一的身份验证、授权和上下文转换。

Stars: 249 | Forks: 32

# Heimdall [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/dadrus/heimdall/actions/workflows/ci.yml) [![Security-Scan](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cfaf48d68726a2c35710d59fc989f24d9c2ec08f8c8bffdb697872dc17fd5b8d.svg)](https://github.com/dadrus/heimdall/actions/workflows/security.yml) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7738/badge)](https://www.bestpractices.dev/projects/7738) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/dadrus/heimdall/badge)](https://securityscorecards.dev/viewer/?uri=github.com/dadrus/heimdall) [![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://slsa.dev) [![Go Report Card](https://goreportcard.com/badge/github.com/dadrus/heimdall)](https://goreportcard.com/report/github.com/dadrus/heimdall) [![codecov](https://codecov.io/gh/dadrus/heimdall/branch/main/graph/badge.svg)](https://codecov.io/gh/dadrus/heimdall) [![Docker](https://img.shields.io/badge/image-0.17.17-blue?logo=docker)](https://hub.docker.com/r/dadrus/heimdall) [![Helm Chart](https://img.shields.io/badge/dynamic/yaml.svg?label=chart&url=https://dadrus.github.io/heimdall/charts/index.yaml&query=$.entries.heimdall[0].version&logo=helm&logoColor=white)](https://github.com/dadrus/heimdall/tree/main/charts/heimdall) [![Discord](https://img.shields.io/discord/1100447190796742698?logo=discord&logoColor=white&label=community)](https://discord.gg/qQgg8xKuyb) ## 背景 Heimdall 受到了零信任理念、[Pomerium](https://www.pomerium.com/docs) 以及 [Ory 的 OAthkeeper](https://www.ory.sh/docs/oathkeeper) 的启发。对这两者的使用经验,加上我无法通过更新后者来实现所需的功能和行为,促成了 Heimdall 的诞生。 ## 什么是 Heimdall Heimdall 会对传入的 HTTP(HTTP 1.x 和 HTTP 2.0)请求进行身份验证和授权,为其补充进一步的上下文信息,并最终将生成的 subject 信息转换为上游服务所需的格式。 它可以通过以下方式实现: * 作为独立的代理部署在您的服务或 Web 服务器之前,拒绝未经授权的请求,并将授权的请求转发至您的 endpoint;或者 * 集成到任何其他代理、Ingress Controller 或 API 网关中,例如 Kong、NGINX、Envoy、Traefik、Contour、Ambassador 等。在这种情况下,其他代理会将传入的请求转发给 Heimdall,并根据其响应,决定是将经过 Heimdall 验证和更新后的原始请求转发给您的上游服务,还是使用 Heimdall 提供的信息拒绝该请求。 在这两种情况下,根据 [NIST 零信任架构 (SP 800-207)](https://doi.org/10.6028/NIST.SP.800-207),它都扮演着策略执行点,并在某种程度上扮演着策略决策点的角色。 ## 身份验证、授权和转换是如何工作的 Heimdall 中的决策和转换过程由规则或规则集控制。这些规则集可以由每个上游服务独立配置和管理。Heimdall 会从多种来源动态加载这些规则,包括: * `RuleSet` kubernetes 资源(Helm Chart 中附带了相应的 CRD) * 云存储,例如 AWS S3、Google 的 GC 等 * 本地文件系统 * 任何 HTTP endpoint 这样一来,这些规则集不仅可以进行集中管理,还可以与特定的上游服务一起部署,而无需重启或重新部署 Heimdall。实际上,这些规则集是上游服务的可选一等公民,并允许: * 实现安全的默认设置。如果没有规则与传入的请求匹配,将应用默认的决策和转换(如果已配置)。这就是上文提到“可选一等公民”的原因。 * 根据特定系统的需要,配置所需数量的身份验证(例如 OpenID Connect)、授权(例如通过 CEL 表达式、OPA 或 OpenFGA)、上下文化(例如通过与特定 endpoint 通信)和终结机制(例如利用可用的 subject 信息创建 JWT),Heimdall 均提供支持。因此,如果您的系统需要与多个身份验证提供商集成,或者您想从一个提供商迁移到另一个,只需在 Heimdall 中进行相应配置即可。 * 根据特定系统的需要,在任意数量的规则中重用和组合这些机制。 * 如果上游服务需要,可对规则中特定机制进行部分重新配置。 * 身份验证机制回退。 * 通过将身份验证机制与错误处理器结合,实现不同的决策流程方案,以驱动特定于身份验证机制的错误处理策略。 * 以任意顺序执行授权和上下文化机制。这样,如果身份验证系统中可用的 subject 信息不足以做出正确的授权决策,您可以让 Heimdall 调用其他服务来检索这些附加信息。 * 支持有条件地执行授权、上下文化和终结机制。例如,如果根据有关 subject 的可用信息,您希望 Heimdall 阻止请求,或者让上游返回所请求资源的不同表示形式。 ## 功能之外的关注点 Heimdall 在功能之外的主要关注点是: * 性能 —— 为了实现这一点,Heimdall 确实会使用任何 HTTP 路由框架,并尽可能避免在执行期间加载或转换数据。对于反射的使用也是如此。 * 清晰的抽象 —— 允许扩展甚至替换组件而不会产生副作用。 * 简单性 —— 让每一个愿意贡献代码的人都能更好地理解代码。 ## 哪里可以找到更多详细信息 请访问[文档](https://dadrus.github.io/heimdall/)了解详细信息,或者如果您想试用一下的话。 ## 当前状态 * 已具备生产可用性,并且已被全球多个组织使用。 * 代码库稳定且经过充分测试。 * 仍有一些功能缺失,这些功能的开发可能会导致未来更新中出现破坏性变更。 有关当前支持的功能信息,请参阅[版本说明](https://github.com/dadrus/heimdall/releases)。计划开发的功能可以在定义的[里程碑](https://github.com/dadrus/heimdall/milestones)中找到。 ## 如果您... * ...喜欢这个项目 —— 请给它点个 :star: * ...觉得缺少了什么,或者发现了 Bug,请[提交工单](https://github.com/dadrus/heimdall/issues)。也非常欢迎您[做出贡献](CONTRIBUTING.md) :wink: * ...想要提供支持,请通过 [Discord](https://discord.gg/qQgg8xKuyb) 联系我 * ...需要帮助,也可以前往 [Discord](https://discord.gg/qQgg8xKuyb)
标签:EVTX分析, Go语言, JSONLines, Streamlit, 子域名突变, 日志审计, 程序破解, 访问控制, 请求拦截, 身份认证代理, 零信任