Foreman 可以允许匿名只读访问吗?

Foreman 可以允许匿名只读访问吗?

我需要一个自动化作业来针对 Foreman 执行 REST API 调用,而且我更愿意不是费心为其建立一个帐户——然后永远保留该密码。

然而,看起来,Foreman 只有“全有或全无”——如果任何事情都需要身份验证(:login: true),那么它将需要一切

这是真的吗?还是表面现象具有欺骗性,可以告诉 Foreman 允许匿名查找和主机浏览,但仍然要求对任何变化

答案1

好吧,事实证明,Foreman 支持 OAuth1 类型的访问,这并不多(甚至任何) 比简单的静态用户名/密码更好。更糟糕的是,除非您采取特殊措施将此类访问映射到非特权帐户,否则使用 OAuth1 的连接将具有管理员权限。

访问 Foreman 安装的设置页面来打开映射和/或了解/设置 OAuth1“密钥”和“秘密”字符串。

虽然真实用户可能通过 LDAP(例如针对您的企业 Active Directory)或其他方式进行身份验证,但使用 OAuth1 的脚本可以永远使用相同的“密钥”和“秘密”值 - 它们甚至不会过期。

编辑:启用用户映射似乎根本没有提高安全性——任何可以指定现有的帐户名,并且不需要了解帐户的密码或任何其他秘密。

因此,我用 Python 实现的简单 Foreman 搜索脚本(不支持分页 - 我的所有查询都返回不到 50 个条目):

from requests_oauthlib import OAuth1Session
import json
import sys

search=sys.argv[1]
fields=sys.argv[2:]
if not fields:
    fields = ['ip']

URL=("https://foreman.example.net/api/v2/hosts?search=%s" % search)

# The below highly-secret credentials come from
#
#   https://foreman.example.net/settings
#
Key='mykey'
Secret='mysecret'
User='readonly'

session=OAuth1Session(Key, Secret)
# The FOREMAN-USER header is necessary, if mapping of OAuth-requests is
# turned on in Foreman's settings. The username must exist and have the
# right "roles" enabled to allow the account to perform the request.
session.headers.update({'FOREMAN-USER': User})

request=session.get(URL, verify='/path/to/your/CA/certificate.crt')

if not request.ok:
    request.raise_for_status()

response=json.loads(request.content)
results=response["results"]

for i in xrange(0, response["subtotal"]):
    entry=results[i]
    if i > 0:
        print
    for field in fields:
        try:
            print entry[field],
        except KeyError:
        print '-',

相关内容