Authentication
Foreman 可以允許匿名只讀訪問嗎?
我需要一個自動化的工作來對 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 '-',