Skip to content
forked from ory/keto

关于 “Zanzibar:Google 一致的全球授权系统”的开源 (Go) 实现。提供 gRPC、REST API、newSQL 以及简单且精细的权限语言。支持ACL、RBAC等多种访问模型。

License

Notifications You must be signed in to change notification settings

yuanzhongqiao/keto

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,503 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Ory Keto - 开源和云原生访问控制服务器


Ory keto 的 CI 任务 覆盖状态 去报告卡 PkgGoDev

Ory Keto 是“Zanzibar:Google 一致的全球授权系统”的第一个也是最受欢迎的开源实现!

开始使用

您可以使用 Docker 在本地运行 Ory Keto或使用 Ory CLI 来尝试 Ory Keto:

# This example works best in Bash
bash <(curl https://raw.githubusercontent.com/ory/meta/master/install.sh) -b . ory
sudo mv ./ory /usr/local/bin/

# Or with Homebrew installed brew install ory/tap/cli

创建一个新项目(您也可以使用 Docker

ory create project --name "Ory Keto Example"
export project_id="{set to the id from output}"

并按照以下快速简单的步骤操作。

使用 Ory 权限语言创建命名空间

# Write a simple configuration with one namespace
echo "class Document implements Namespace {}" > config.ts

# Apply that configuration ory patch opl --project $project_id -f file://./config.ts

# Create a relationship that grants tom access to a document echo "Document:secret#read@tom"
| ory parse relation-tuples --project=$project_id --format=json -
| ory create relation-tuples --project=$project_id -

# List all relationships ory list relation-tuples --project=$project_id # Output: # NAMESPACE OBJECT RELATION NAME SUBJECT # Document secret read tom # # NEXT PAGE TOKEN # IS LAST PAGE true

现在,在Ory Network上查看您的项目或继续阅读更深入的指南

奥利网络上的奥利酮

Ory网络是使用 Ory 服务的最快、最安全且无忧的方式。Ory Permissions由 Ory Keto 开源权限服务器提供支持,并且完全兼容 API。

Ory Network 提供现代端到端安全的基础设施:

  • 身份和凭证管理可扩展到数十亿用户和设备
  • 用于密钥、生物识别、社交、SSO 和多因素身份验证的注册、登录和帐户管理流程
  • 预构建的登录、注册和帐户管理页面和组件
  • 用于单点登录、API 访问和机器对机器授权的 OAuth2 和 OpenID 提供商
  • 基于 Google 桑给巴尔模型的低延迟权限检查,并内置对 Ory 权限语言的支持

它是完全托管的、高度可用的、对开发人员和合规性友好的!

  • 具有数据局部性的 GDPR 友好型安全存储
  • 云原生API,与Ory的开源服务器兼容
  • 带有基于 Web 的 Ory 控制台和 Ory 命令行界面 (CLI) 的综合管理工具
  • 丰富的文档、简单的示例和易于遵循的指南
  • 公平、基于使用的定价

立即注册 免费开发者帐户

Ory网络混合支持计划

Ory 为 Ory Network Hybrid 提供支持计划,包括私有云部署上的 Ory。如果您有自托管解决方案并需要帮助,请考虑支持计划! Ory 的团队在云计算领域拥有多年的经验。 Ory 的产品是维护者提供合格支持的唯一官方计划。欲了解更多信息,请访问 网站预订会议

Ory Permissions、Keto 和 Google 的桑给巴尔模型

确定在线用户是否有权访问数字对象对于保护隐私至关重要。本文介绍了 Zanzibar(一个用于存储和评估访问控制列表的全球系统)的设计、实现和部署。 Zanzibar 提供了统一的数据模型和配置语言,用于表达来自 Google 数百个客户端服务的广泛访问控制策略,包括日历、云、云端硬盘、地图、照片和 YouTube。其授权决策尊重用户操作的因果顺序,从而在访问控制列表和对象内容的更改中提供外部一致性。桑给巴尔每秒可扩展至数万亿个访问控制列表和数百万个授权请求,以支持数十亿人使用的服务。在 3 年的生产使用中,它保持了 95% 的延迟低于 10 毫秒,可用性高于 99.999%。

来源

如果您需要知道是否允许用户(或机器人、汽车、服务)执行某些操作 - Ory Permissions 和 Ory Keto 非常适合您。

目前,Ory Permissions [在 Ory 网络上] 和开源 Ory Keto 权限服务器实现了用于管理和检查 HTTP 和 gRPC API 关系(“权限”)的 API 合约,以及通过 Ory 权限语言定义的全局规则(“用户集重写”)。未来的版本将包括 Zookies、反向权限查找等功能。


谁在使用它?

Ory 社区站在个人、公司和维护者的肩膀上。 Ory 团队感谢所有参与人员 - 从提交错误报告和功能请求,到贡献补丁和文档。 Ory 社区拥有超过 33,000 名成员,并且正在迅速增长。 Ory 堆栈每月通过超过 400.000 个活跃服务节点保护 60.000.000.000+ 个 API 请求。如果没有你们每一个人,这一切都不可能实现!

以下名单代表了陪伴我们一路走来并为我们的生态系统做出杰出贡献的公司。如果您认为您的公司值得在这里占有一席之地,请联系 现在就到office@ory.sh吧!

        <tr>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">领养者 *</font></font></td>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">dyrector.io</font></font></td>
        <td align="center">
            <themed-picture data-catalyst-inline="true" data-catalyst=""><picture>
                <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/dyrector_io.svg">
                <img height="32px" src="https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/dyrector_io.svg" alt="dyrector.io" style="visibility:visible;max-width:100%;">
            </picture></themed-picture>
        </td>
        <td><a href="https://dyrector.io/" rel="nofollow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">dyrector.io</font></font></a></td>
    </tr>
    
        <tr>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">领养者 *</font></font></td>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">斯塔克旋转</font></font></td>
        <td align="center">
            <themed-picture data-catalyst-inline="true" data-catalyst=""><picture>
                <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/stackspin.svg">
                <img height="32px" src="https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/stackspin.svg" alt="stackspin.net" style="visibility:visible;max-width:100%;">
            </picture></themed-picture>
        </td>
        <td><a href="https://www.stackspin.net/" rel="nofollow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">stackspin.net</font></font></a></td>
    </tr>
    
        <tr>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">领养者 *</font></font></td>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">振幅</font></font></td>
        <td align="center">
            <themed-picture data-catalyst-inline="true" data-catalyst=""><picture>
                <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/amplitude.svg">
                <img height="32px" src="https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/amplitude.svg" alt="振幅.com" style="visibility:visible;max-width:100%;">
            </picture></themed-picture>
        </td>
        <td><a href="https://amplitude.com/" rel="nofollow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">振幅.com</font></font></a></td>
    </tr>
     <tr>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">领养者 *</font></font></td>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">鳍足类</font></font></td>
        <td align="center">
            <themed-picture data-catalyst-inline="true" data-catalyst=""><picture>
                <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/pinniped.svg">
                <img height="32px" src="https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/pinniped.svg" alt="鳍足类开发者" style="visibility:visible;max-width:100%;">
            </picture></themed-picture>
        </td>
        <td><a href="https://pinniped.dev/" rel="nofollow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">鳍足类开发者</font></font></a></td>
    </tr>         
    <tr>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">领养者 *</font></font></td>
        <td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">普沃塔尔</font></font></td>
        <td align="center">
            <themed-picture data-catalyst-inline="true" data-catalyst=""><picture>
                <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/pvotal.svg">
                <img height="32px" src="https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/pvotal.svg" alt="普沃塔尔科技" style="visibility:visible;max-width:100%;">
            </picture></themed-picture>
        </td>
        <td><a href="https://pvotal.tech/" rel="nofollow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">普沃塔尔科技</font></font></a></td>
    </tr>
</tbody>
类型 姓名 标识 网站
领养者 * 树莓派基金会 树莓派基金会 树莓派.org
领养者 * 凯玛项目 凯玛项目 kyma-project.io
领养者 * 郁金香 郁金香零售 郁金香网
领养者 * Cashdeck / 我所有的资金 我所有的资金 cashdeck.com.au
领养者 * 胡特套件 胡特套件 hootsuite.com
领养者 * 部分 部分 Segment.com
领养者 * Arduino Arduino arduino.cc
领养者 * 数据检测 数据检测 Unifiedglobalarchiving.com/data-detect/
领养者 * 塞恩斯伯里 塞恩斯伯里 英国塞恩斯伯里公司
领养者 * 对比剂 对比剂 对比网站
领养者 * 雷亚 雷亚 雷亚.eu
领养者 * 零项目提交 获取零.dev
领养者 * 帕迪斯 帕迪斯 帕迪斯.io
领养者 * 云熊 云熊 云熊.eu
领养者 * 安全洋葱解决方案 安全洋葱解决方案 安全洋葱解决方案网站
领养者 * 事实上 事实上 事实实验室
领养者 * 诺塔尔 诺塔尔 北方网
领养者 * 订购我的装备 订购我的装备 ordermygear.com
领养者 * Spiribo Spiribo 螺旋波
领养者 * 努力 Spiribo strivacity.com
领养者 * 汉科 汉科 汉科.io
领养者 * 兔子 兔子 兔子网
领养者 * 音乐中 音乐中 inmusicbrands.com
领养者 * 布塔 布塔 布塔网
领养者 * 连线 连线 connctd.com
领养者 * 帕拉鲁斯 帕拉鲁斯 帕拉鲁斯io
领养者 * 第四级 第四级 tier4.jp
领养者 * R2Devops R2Devops r2devops.io
领养者 * 月神安全 月神安全 lunasec.io
领养者 * 塞尔洛 塞尔洛 塞洛网站

非常感谢所有个人贡献者

* 在生产中使用 Ory 的主要项目之一。

安装

前往文档了解 安装 Ory Keto的方法。

生态系统

在架构设计方面,我们根据几条指导原则构建 Ory:

  • 最小的依赖性
  • 到处跑
  • 轻松扩展
  • 最大限度地减少人为和网络错误的空间

Ory 的架构旨在在容器编排系统(例如 Kubernetes、CloudFoundry、OpenShift 和类似项目)上最佳运行。二进制文件很小 (5-15MB),可用于所有流行的处理器类型(ARM、AMD64、i386)和操作系统(FreeBSD、Linux、macOS、Windows),无需系统依赖项(Java、Node、Ruby、libxml...) 。

Ory Kratos:身份和用户基础设施及管理

Ory Kratos是一个 API 优先的身份和用户管理系统,根据云架构最佳实践构建 。它实现了几乎每个软件应用程序都需要处理的核心用例:自助登录和注册、多重身份验证 (MFA/2FA)、帐户恢复和验证、配置文件和帐户管理。

Ory Hydra:OAuth2 和 OpenID 连接服务器

Ory Hydra是 OpenID Certified™ OAuth2 和 OpenID Connect 提供商,可通过编写微型“桥接”应用程序轻松连接到任何现有身份系统。它提供对用户界面和用户体验流程的绝对控制。

Ory Oathkeeper:身份和访问代理

Ory Oathkeeper是 BeyondCorp/零信任身份和访问代理 (IAP),可为您的 Web 服务提供可配置的身份验证、授权和请求突变规则:验证 JWT、访问令牌、API 密钥、mTLS;检查所包含的主体是否被允许执行请求;将生成的内容编码到自定义标头 ( X-User-ID)、JSON Web 令牌等中!

Ory Keto:作为服务器的访问控制策略

Ory Keto是一个政策决策点。它使用一组访问控制策略(类似于 AWS IAM 策略)来确定主体(用户、应用程序、服务、汽车等)是否有权对资源执行特定操作。

安全

披露漏洞

如果您认为发现了安全漏洞,请不要在论坛、聊天或 GitHub 上公开发布。您可以在我们的security.txt中找到负责任披露的所有信息 。

遥测

我们的服务收集汇总的匿名数据,这些数据可以选择关闭。点击这里了解更多。

指导

该指南可在此处获取。

HTTP API 文档

HTTP API 记录在此处

升级和变更日志

新版本可能会引入重大更改。为了帮助您识别和合并这些更改,我们在 UPGRADE.mdCHANGELOG.md中记录了这些更改。

命令行文档

运行keto -hketo help.

发展

我们鼓励所有贡献并建议您阅读我们的 贡献指南

依赖关系

您需要 Go 1.19+ 并且(对于测试套件):

  • Docker 和 Docker 组合
  • GNU Make 4.3
  • NodeJS / npm >= v7

可以在 Windows 上开发 Ory Keto,但请注意,所有指南都假设使用 Unix shell,如 bash 或 zsh。

从源安装

进行安装

格式化代码

您可以使用 格式化所有代码make format。我们的 CI 检查您的代码格式是否正确。

运行测试

您可以运行两种类型的测试:

  • 简短测试(不需要像 PostgreSQL 这样的 SQL 数据库)
  • 定期测试(需要 PostgreSQL、MySQL、CockroachDB)
简短的测试

简短的测试运行得相当快。您可以一次测试所有代码:

go test -short -tags sqlite ./...

或仅测试特定模块:

go test -tags sqlite -short ./internal/check/...
定期测试

常规测试需要建立数据库。我们的测试套件能够直接与 docker 一起使用(使用ory/dockertest),但我们鼓励使用脚本。使用 dockertest 会增加系统上 Docker 镜像的数量,并且每次运行时启动它们都非常慢。相反,我们建议这样做:

source ./scripts/test-resetdb.sh
go test -tags sqlite ./...
端到端测试

e2e 测试是正常测试的一部分go test。要仅运行 e2e 测试,请使用:

source ./scripts/test-resetdb.sh
go test -tags sqlite ./internal/e2e/...

或者添加-short标签以仅针对内存中的 sqlite 进行测试。

构建 Docker

您可以使用以下方法构建开发 Docker 映像:

让码头工人

About

关于 “Zanzibar:Google 一致的全球授权系统”的开源 (Go) 实现。提供 gRPC、REST API、newSQL 以及简单且精细的权限语言。支持ACL、RBAC等多种访问模型。

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 79.7%
  • Mustache 12.8%
  • Shell 4.3%
  • JavaScript 1.9%
  • Makefile 0.8%
  • TypeScript 0.4%
  • Dockerfile 0.1%