跳转到主要内容

用于管理、检索和存储机密的服务。

项目描述

Build Status

Custodia

管理机密的工具。

查看我们的快速入门指南

Custodia是一个旨在为现代云应用程序定义API的项目,允许轻松存储和共享密码、令牌、证书以及任何其他机密,同时保持数据安全、可管理且可审计。

Custodia项目提供了明文和加密后端的示例实现,并计划很快提供将数据存储在外部数据存储(如Vault项目、OpenStack的Barbican、FreeIPA的Vault等)的驱动程序。

在未来的发展中,Custodia项目计划增强和丰富API,以提供访问更安全的处理私钥的方法,如HSM作为服务和其他类似的安全系统。

有关更多信息,请参阅Custodia文档:https://custodia.readthedocs.io

需求

运行时

  • configparser (Python 2.7)

  • cryptography

  • jwcrypto >= 0.2

  • requests

  • six

测试

  • pip

  • setuptools >= 18.0

  • tox >= 2.3.1

  • wheel

custodia.ipa依赖于几个二进制扩展和共享库,例如python-cryptography、python-gssapi、python-ldap和python-nss。对于测试和在虚拟环境中安装,需要一个C编译器和几个开发包。

Fedora
$ sudo dnf install python2 python-pip python-virtualenv python-devel \
    gcc redhat-rpm-config krb5-workstation krb5-devel libffi-devel \
    nss-devel openldap-devel cyrus-sasl-devel openssl-devel
Debian / Ubuntu
$ sudo apt-get update
$ sudo apt-get install -y python2.7 python-pip python-virtualenv python-dev \
    gcc krb5-user libkrb5-dev libffi-dev libnss3-dev libldap2-dev \
    libsasl2-dev libssl-dev

API稳定性

一些API是临时的,未来可能会更改。

  • 模块custodia.cli中的命令行界面。

  • 脚本custodia-cli。

  • custodia.ipa插件


custodia.ipa — Custodia的IPA插件

警告 custodia.ipa 是一个技术预览版,具有临时 API。

custodia.ipa 是一组针对 Custodia 的插件集合。它提供了与 FreeIPA 的集成。 IPAVault 插件是访问 FreeIPA 保险库 的接口。机密信息被加密并存储在 Dogtag 的密钥恢复代理中。 IPACertRequest 插件可以根据需求创建私钥和签名证书。最后,IPAInterface 插件是一个辅助插件,它封装了 ipalib 和 GSSAPI 身份验证。

custodia.ipa 的要求

  • ipalib >= 4.5.0

  • ipaclient >= 4.5.0

  • Python 2.7(IPA 保险库对 Python 3 的支持不稳定。)

ipalib 和 ipaclient 不会被默认拉取和安装。这些软件包依赖于额外的操作系统软件包,用于 Kerberos/GSSAPI、LDAP 和 NSS 加密库。依赖项列在上述 测试 要求下。

$ pip install custodia[ipa]

custodia.ipa 需要一个 IPA 注册的主机和 Kerberos TGT 进行身份验证。建议使用密钥表文件或 GSS-Proxy 提供凭证。此外,IPAVault 依赖于密钥恢复代理服务(ipa-kra-install)。


示例配置

创建目录

$ sudo mkdir /etc/custodia /var/lib/custodia /var/log/custodia /var/run/custodia
$ sudo chown USER:GROUP /var/lib/custodia /var/log/custodia /var/run/custodia
$ sudo chmod 750 /var/lib/custodia /var/log/custodia

创建服务账户和密钥表

$ kinit admin
$ ipa service-add custodia/$HOSTNAME
$ ipa service-allow-create-keytab custodia/$HOSTNAME --users=admin
$ mkdir -p /etc/custodia
$ ipa-getkeytab -p custodia/$HOSTNAME -k /etc/custodia/ipa.keytab
$ chown custodia:custodia /etc/custodia/ipa.keytab

IPA 证书请求插件需要额外的权限

$ ipa privilege-add \
    --desc="Create and request service certs with Custodia" \
    "Custodia Service Certs"
$ ipa privilege-add-permission \
    --permissions="Retrieve Certificates from the CA" \
    --permissions="Request Certificate" \
    --permissions="Revoke Certificate" \
    --permissions="System: Modify Services" \
    "Custodia Service Certs"
# for add_principal=True
$ ipa privilege-add-permission \
    --permissions="System: Add Services" \
    "Custodia Service Certs"
$ ipa role-add \
    --desc="Create and request service certs with Custodia" \
    "Custodia Service Cert Adminstrator"
$ ipa role-add-privilege \
    --privileges="Custodia Service Certs" \
    "Custodia Service Cert Adminstrator"
$ ipa role-add-member \
    --services="custodia/$HOSTNAME" \
    "Custodia Service Cert Adminstrator"

创建 /etc/custodia/ipa.conf

# /etc/custodia/ipa.conf

[global]
debug = true
makedirs = true

[auth:ipa]
handler = IPAInterface
keytab = ${configdir}/${instance}.keytab
ccache = FILE:${rundir}/ccache

[auth:creds]
handler = SimpleCredsAuth
uid = root
gid = root

[authz:paths]
handler = SimplePathAuthz
paths = /. /secrets

[store:vault]
handler = IPAVault

[store:cert]
handler = IPACertRequest
backing_store = vault

[/]
handler = Root

[/secrets]
handler = Secrets
store = vault

[/secrets/certs]
handler = Secrets
store = cert

创建 /etc/systemd/system/custodia@ipa.service.d/override.conf

在 Fedora 26 及更高版本上,Custodia 服务文件默认使用 Python 3。尽管 FreeIPA 4.5 支持 Python 3,但还不是稳定的。因此,需要使用 Python 2.7 运行 custodia.ipa 插件。您可以使用 systemctl edit custodia@py2.service 创建覆盖或手动复制文件。在后者的情况下,别忘了运行 systemctl daemon-reload

[Service]
ExecStart=
ExecStart=/usr/sbin/custodia-2 --instance=%i /etc/custodia/%i.conf

运行 Custodia 服务器

$ systemctl start custodia@ipa.socket

IPA 证书请求

IPACertRequest 存储插件会动态生成或撤销证书。它使用后端存储来缓存证书和私钥。插件可以自动创建服务主体。然而,主机必须已经存在。《IPACertRequest》不会根据需求创建主机条目。

例如,GET /path/to/store/HTTP/client1.ipa.example 为服务 HTTP/client1.ipa.example 生成私钥和 CSR,DNS 主题备用名为 client1.ipa.example。然后 CSR 被转发到 IPA 并由 Dogtag 签名。生成的证书及其信任链与私钥一起作为 PEM 包返回。

$ export CUSTODIA_INSTANCE=ipa
$ custodia-cli get /certs/HTTP/client1.ipa.example
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
Subject: organizationName=IPA.EXAMPLE, commonName=client1.ipa.example
Serial Number: 22
Validity:
    Not Before: 2017-04-27 09:44:20
    Not After: 2019-04-28 09:44:20
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
Serial Number: 1
Validity:
    Not Before: 2017-04-26 08:24:11
    Not After: 2037-04-26 08:24:11
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

DELETE 请求从后端存储中删除证书/密钥对,并同时撤销证书。

尚未实现撤销或过期的证书的自动续订。

FreeIPA 4.4 支持

默认设置和权限已针对 FreeIPA >= 4.5 进行调整。对于 4.4,必须使用 chain=False 配置插件。还需要额外的权限 请求具有 SubjectAltName 的证书

ipa privilege-add-permission \
    --permissions="Request Certificate with SubjectAltName" \
    "Custodia Service Certs"

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码分发

custodia-0.6.0.tar.gz (133.1 kB 查看哈希值)

上传时间 源代码

构建分发

custodia-0.6.0-py2.py3-none-any.whl (60.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面