Authentication

Foreman 可以允許匿名只讀訪問嗎?

  • January 25, 2017

我需要一個自動化的工作來對 Foreman 執行 REST API 呼叫,我寧願為它設置一個帳戶——然後永遠維護密碼。

然而,Foreman 似乎只有“全有或全無”——如果任何事情都需要身份驗證 ( :login: true),那麼一切都需要身份驗證。

這真的是真的嗎,還是外觀具有欺騙性,可以告訴工頭允許匿名查找和主機瀏覽,同時仍需要對任何更改進行身份驗證?

好的,事實證明,Foreman 支持 OAuth1 類型的訪問,這並不比簡單的靜態使用者名/密碼好多少(甚至*任何)。*更糟糕的是,除非您通過將此類訪問映射到非特權帳戶來採取特殊措施,否則使用 OAuth1 的連接將具有管理員權限。

訪問 Foreman 安裝的設置頁面以打開映射和/或學習/設置 OAuth1“密鑰”和“秘密”字元串。

雖然真實使用者可能正在通過 LDAP(例如針對您的公司 Active Directory)或其他方式進行身份驗證,但使用 OAuth1 的腳本可以永遠使用相同的“密鑰”和“秘密”值——它們甚至不會過期。

編輯:啟用使用者映射似乎根本不會提高安全性——可以指定任何現有的帳戶名,並且不需要知道帳戶的密碼或任何其他機密。

因此,我用 Python 實現的簡單 Foreman-search 腳本是(不支持分頁——我的所有查詢都返回不到 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 '-',

引用自:https://serverfault.com/questions/828170