如何在Docker中configurationCouchDB身份validation?

我正在尝试构build一个Dockerized CouchDB以在AWS中运行,为我的应用程序启动身份validation。 我有一个Dockerfile安装CouchDB 1.6.1,并以我需要的方式设置其余的环境。 但是,在我把它放在AWS上并且可能暴露给它之前,我想要进行一些身份validation。 文档显示了这一点:

http://docs.couchdb.org/en/1.6.1/api/server/authn.html

这很难解释正确的configuration或者基本的安全需求。 我已经花了下午的时间阅读所有关于如何去做的问题,文档和博客,但是没有一致的故事,我不知道2009年的工作现在是否有效,哪些部分已经过时。 我在当前的ini文件中看到了一些可能的设置,但是它们与我在networkingsearch中看到的不匹配。 我即将开始尝试从各种阅读中收集到的各种随机build议,但是我认为在做试错之前我会问。

因为我希望它能够在AWS中运行,所以我需要它能够在无需手动修改的情况下启动。 我需要我的Dockerfile做configuration,所以使用蒲团不会削减它。 如果我需要,我可以添加一个脚本开始运行,以处理在那里不能做的事情。

我相信我需要设置一个pipe理员用户,然后为用户定义一个angular色,提供一个validationfunction来检查适当的angular色,然后创build具有该angular色的用户。 然后,我可以使用Cookie身份validation(通过SSL)来限制访问我的应用程序,提供正确的login和处理会话/ cookie。

它看起来像一些可以在Dockerfile中完成。 我需要在ini文件中configurationauthentication_handlers和一个admin用户吗? 我猜测修改数据库的操作需要通过一些运行时脚本来完成。 有没有人做过这个,或者看到过这样做的一些例子?

更新:

基于Kxepal的build议,我现在正在工作。 我的Dockerfile是从klaemo的docker-couchdb派生的,如下所述。 解决方法是强制数据库要求身份validation,但全新的安装将以Admin-Party身份启动。 为了制止这种情况,您必须创build一个pipe理员用户,这个用户可以保护系统数据,同时保持其他数据库的打开 首先,在Dockerfile中创build一个pipe理员用户:

 RUN sed -e '/^\[admins\]$/a admin=openpassword\n' -i /usr/local/etc/couchdb/local.ini 

(只是在使用-e的klaemo的sed模式之后),当CouchDB运行时,它将用salt和散列这个密码并replace它在local.ini文件中。 我提取这个密码,用这个代替“openpassword”,这样我的Dockerfile就没有纯文本的密码。 CouchDB可以通过它的forms告诉不要再次散列它。

现在保护其他数据库的正常模式是创build用户/angular色,并在validationfunction中使用它们来拒绝对其他数据库的访问。 由于我只是希望获得一个安全的系统来进行testing,所以我select推迟这个,只是使用local.ini中的设置来强制每个人进行身份validation。

Dockerfile现在需要设置require_valid_user标志:

 RUN sed -e '/^\[couch_httpd_auth\]$/a require_valid_user = true\n' -i /usr/local/etc/couchdb/local.ini 

这需要取消注释WWW-Authenticate设置:

 RUN sed -e 's/^;WWW-Authenticate/WWW-Authenticate/' -i /usr/local/etc/couchdb/local.ini 

其中,自设置显示Basic realm="administrator"意味着我的iOS应用程序中的NSURLProtectionSpace需要使用@"administrator"作为领域。

在此之后,我现在有一个Dockerfile创build一个不允许匿名修改或读取的CouchDB服务器。

这并没有解决我所有的configuration问题,因为我需要填充一个数据库,但是因为我使用python脚本来做到这一点,并且由于我可以通过凭据,当我运行,我已经解决了大多数问题。

要在构build映像期间设置authconfiguration,您需要检查不是API,而是服务器pipe理员的configuration 。 TL; DR只是将[admin]部分放在local.ini文件中,用纯文本的用户名和密码 – 在开始时,CouchDB将用它的散列代替密码,并且CouchDB不会处于Admin Party状态。

PS你检查了docker-couchdb项目吗?