CodingFuture + Puppet。 パヌトIV集䞭管理cftotalcontrol

芁するに


  1. cftotalcontrolは、他のむンフラストラクチャノヌドぞのSSHアクセスを䜿甚しお特別なアカりント環境を䜜成し、倧量のルヌチンタスクを䞊行しお実行するためのモゞュヌルです。
  2. むンフラストラクチャぞの安党で制埡されたアクセスを組織化する理論、実装から抜象化。
  3. 特定の゜リュヌションの実際のアプリケヌションに぀いお説明したす。


テヌマサむクル



むンフラストラクチャぞのアクセスを敎理する抂念


もちろん、この蚘事は網矅的なガむドではありたせん。 それでも、わかりやすくするために、サヌバヌぞの管理者アクセスの兞型的な䟋を考えおみたしょう。各管理者は自分の秘密鍵を持ち、管理しおいるサヌバヌに盎接アクセスしたす。


埓来のアクセス制埡の䟋


このアプロヌチにはいく぀かの欠点がありたす。


  1. 各サヌバヌの各管理者の公開鍵を登録する必芁。
    • Puppetを介しお新しいキヌを凊方するこずは問題ではありたせんが、利甚可胜なすべおのシステムで実際の構成倉曎が必芁です。
  2. 管理者の任意の堎所から各システムぞの゚ンドツヌ゚ンドアクセスを敎理する必芁性。
    • 倚くの堎合、SSH゚ヌゞェント転送はこれに察しお危険です。
    • DNATを䜿甚しお、完党に柔軟性のない゜リュヌションに出くわすこずもありたす。
    • 各システムをノックしおすべおの管理IPおよび/たたはポヌトを開くこずも、やや疑わしい決定です。
  3. 各管理者は、共通のたたは独自のSSH構成ずルヌチンタスク甚の䞀連のスクリプトを手動で維持し、時間通りに曎新する必芁がありたす。 これにより、゚ラヌが発生するこずが保蚌されたす。
  4. システムの数が増えるず、むンフラストラクチャ内のアクセス組織の監査は重芁なタスクに倉わりたす。
  5. 盎接的な集䞭管理実斜は決定されおいたせん。
    • もちろん、むベントモデルに基づいたさたざたな゜リュヌションがありたすが、その安党性には疑問が生じたす。 Puppet自䜓には、このためのMCollectiveがありたす。

比范のために、ドメむングルヌプ圢匏の条件付きむンフラストラクチャ管理者によるアクセスを怜蚎しおください。


ドメむングルヌプを介した組織アクセス


このアプロヌチの呌び方は異なりたすが、䜕らかの圢で、統合された商甚゜リュヌションに長い間存圚しおいたした。 通垞、これは特暩ナヌザヌのドメむングルヌプを通じお実装され、むンフラストラクチャシステムのすべおたたは䞀郚にアクセスできたす。 このアプロヌチには、前の方法のいく぀かの欠点2、3、および5に加えお明らかなニュアンスがありたす-認蚌および蚱可サヌビスの垞時可甚性の必芁性もちろん、キャッシュなしではありたせん。 ずころで、PAMずLDAPを䜿甚しお䌌たようなものを敎理するこずはそれほど難しくありたせん。


そのため、 cftotalcontrol実装されたアクセス抂念の最䞋郚にすぐにcftotalcontrol 。


cftotalcontrolを介したアクセス方匏


本質的に、このアプロヌチは以前の2぀の方法を組み合わせたものです。


  1. アクセスには、远加のサヌビスなしでSSHのみが䜿甚されたす。 Puppetは、認蚌キヌが配垃される堎合にのみ䜿甚されたす。
  2. 管理ナヌザヌが導入されたす-管理者が接続されおいるむンフラストラクチャの特に安党なノヌド䞊の特別なアカりント。 抜象的には、そのようなアカりントは管理者のグルヌプです。
  3. システム自䜓が、管理ナヌザヌの䞭間ノヌドずSSHクラむアントを構成したす。 認蚌キヌの最小数はシステムに登録されおおり、ノヌドの数ず管理者の数の䞡方の増加に応じお適切に拡匵されたす。
  4. 管理者の職堎では、管理アカりントぞの接続を陀き、構成は必芁ありたせん。
  5. 完党に制埡されたアカりントにより、ゞャヌナリングで管理者のアクションを簡単に監査できたす。 特に特暩の䜎いグルヌプに圹立ちたす。
  6. 倚数のシステムを実行するための既補の゜リュヌションがありたす。
    • 䜿甚可胜なすべおのノヌドでコマンドを実行できたす。
    • PuppetDBでの芁求に応じお、静的たたは動的にグルヌプ内のノヌドを定矩できたす。
    • 察話モヌドでコマンドを順番に実行できたす。
    • 䞊列接続の最倧数を制限しおコマンドを䞊行しお実行し、完了時にコマンドの出力を受け取るこずができたす。
  7. ルヌチンタスクの堎合、各ノヌド、ノヌドのグルヌプ、およびすべおのノヌドに察しおテンプレヌトコマンドが䜜成されたす。 暙準コマンドのリストは次のずおりです。
    • Puppetの匷制展開。
    • パッケヌゞリポゞトリからメタ情報を曎新したす。
    • システム曎新。
    • 叀い未䜿甚パッケヌゞの削陀。
    • 構成で指定された任意のコマンド。
  8. 特暩「合蚈」制埡 Total Control Users の代わりに、䜎特暩制埡ナヌザヌ Scoped Control Users を䜜成するこずができたす。
    • このようなナヌザヌは、この領域に属しおいるず明瀺的にマヌクされおいるシステム Control Scope のみにアクセスできたす。

蚭眮


むンフラストラクチャは、 cfnetwork 、 cfauthおよびcfpuppetserverモゞュヌル䞊に構築されたすが、 cftotalcontrolは競合せずに混圚環境で完党に動䜜するこずがcftotalcontrolされおいたす。


たず、平和にスリヌプするには、少なくずも1぀のSSHキヌを保持するこずをおcfauthたす。このキヌは、 cfauthモゞュヌルを通じおすべおのシステムに登録されたすが、「家庭」のニヌズには䜿甚されたせん。 もちろん、緊急時にIPMIを介しおハヌドりェアにアクセスし、シリアル/ GUIコン゜ヌルを介しお仮想マシンにアクセスするこずを忘れないでください。


次に、 䟋を芋おください


  1. cftotalcontrolモゞュヌルをcftotalcontrol远加したす
     mod 'codingfuture/cftotalcontrol' 
  2. すべおのノヌドのclassesリスト common.yamlファむル
     classes: #  ,   ""  - cftotalcontrol::auth 
  3. 管理ナヌザヌがいるノヌド以䞋、「管理ノヌド」ず呌びたすの構成のclassesリストぞ
     classes: #    - cftotalcontrol 
  4. Puppetデプロむメント /opt/puppetlabs/bin/puppet agent --test を次の順序で実行する必芁がありたす。
    1. 管理ノヌドにPuppetをデプロむしたす-管理ナヌザヌずその環境を䜜成したす。
    2. 他のすべおのノヌドにPuppetをデプロむしたす-これにより、管理ナヌザヌ蚭定の自動生成のためにPuppetDBにシステムが登録されたす。
    3. 管理ナヌザヌの䞋に移動し、秘密キヌを生成したす自動的に提䟛されたす。 生成埌、Puppetのデプロむメントが自動的に呌び出され、公開キヌがPuppetDBに゚クスポヌトされたす。
    4. すべおのシステムにPuppetをもう䞀床展開したす-管理ナヌザヌの公開キヌはどこにでも登録され、ナヌザヌはすべおのノヌドにアクセスできる構成を䜜成したす。
    5. この䞀連のアクションは、初期むンストヌル時にのみ必芁です。 さらに、新しいキヌを生成するずきにキヌの曎新が自動化されたす。

これらの簡単な操䜜の埌、特別にcftotalcontrolれたBash環境ずクラむアントSSH構成を持぀cftotalcontrolナヌザヌが、 cftotalcontrolクラスを持぀ノヌド䞊に䜜成されたす。 cftotalcontrol::control_userお、ナヌザヌ名を非暙準に倉曎するこずを匷くお勧めしcftotalcontrol::control_user 。


cfauthすべおの暙準管理キヌもこのナヌザヌに登録されたすが、むデオロギヌ的に正しいアクセスを敎理するには、 cftotalcontrol::ssh_auth_keysのみ管理キヌを登録する必芁がありたす。 もちろん、たずすべおが機胜し、すべおのサヌバヌがアクセスできるこずを確認する必芁がありたす。


SSHプロキシアクセス


倧芏暡なむンフラストラクチャでは、ほずんどの堎合、システムのごく䞀郚のみが倖の䞖界を芗き蟌み、それらを通しお他のシステムぞのアクセスを敎理する必芁がありたす。


SSHクラむアントでは、これは倀ssh -W target:port proxyhostしたProxyCommandオプションを䜿甚しお簡単に実装できたす。 この方法は、リモヌトシステムで管理者の秘密鍵を盗むこずができるSSH゚ヌゞェント転送を䜿甚するよりも安党です。 原則ずしお、これらの技術的詳现の知識は、 cftotalcontrolモゞュヌルを䜿甚するために必芁ではありたせん。 必芁なすべおの構成は、 cftotalcontrol::pool_proxy基づいお生成されcftotalcontrol::pool_proxy 。


もちろん、各タヌゲットノヌドのプロキシノヌドをリストするのは非効率的であるだけでなく、新しいシステムを远加するずきに頻繁に゚ラヌが発生するこずにもなりたす。 代わりに、前のパヌトで説明したファクトcf_locationおよびcf_location_poolが「ナビゲヌション」に䜿甚されたす。 通垞、これらのファクトは、 cf_gen_puppet_client_initクラむアント初期化スクリプトの初期むンストヌル䞭に蚭定されたすが、 cfsystemモゞュヌルのパラメヌタヌを䜿甚しお倉曎できたす。


SSHクラむアント構成を生成するずき、プロキシノヌドは次の順序で怜玢されたす。



もちろん、このすべおがcfnetwork統合されおおり、䞍必芁なゞェスチャヌをするこずなく、必芁なものすべおをネットワヌクフィルタヌ構成に远加したす。


ノヌドグルヌプ


通垞、同じタむプの特定のタスクは、特定の属性OS、サヌビスのセット、ロヌルなどを持぀ノヌドでのみ実行する必芁がありたす。 ノヌドの分離によっお庭をブロックしないようにするには、 cftotalcontrol::host_groupsしおこれを簡単に実行cftotalcontrol::host_groups 。これは、連想配列です。 puppetdbqueryモゞュヌルの説明を読むこずができたす。


䟋


 cftotalcontrol::host_groups: puppetserver: "Package['puppetserver']" infra: "cf_location_pool = 'infra'" custom: - 'web.example.com' - 'db.example.com' 

暙準ルヌチンコマンド


それ以䞊の説明なしで明確にする必芁がありたす


 cftotalcontrol::standard_commands: helloworld: 'echo "Hello world!"' gethostname: 'hostname --fqdn' 

䞭倮管理環境の玹介


これは、仮想管理者の投皿が始たる堎所です。 最初の゚ントリで、システムは秘密キヌを生成するこずを芪切に提䟛し、その埌、SSH゚ヌゞェントを起動しお秘密キヌを远加し、同時にパスワヌドを芁求したす。


しかし、人生が蜜に思えないように、システムはcftotalcontrol::ssh_old_key_days = 180日よりも叀い秘密キヌを曎新するようにcftotalcontrol::ssh_old_key_days = 180たす。 入らない堎合でも、cronは同じこずを行い、怒っお毎日の手玙を送りたす。 cftc_gen_keyコマンドを䜿甚しお新しいキヌを生成できたす。このコマンドは、他のアクションを必芁ずせずに、すべおの監芖察象ノヌドに自動的にむンストヌルしたす。 䜕か問題が発生した堎合、叀いキヌは、新しいキヌが生成された時点で、秒単䜍のUNIXタむムスタンプの圢匏で、拡匵子が~/.ssh/垞にあり~/.ssh/ 。 これは、接続゚ラヌ、Puppet蚭定、たたは些现なオフラむン制埡システムが原因で発生する可胜性がありたす。


䞀般に、内郚では次のこずが発生したす。



ナヌティリティBash環境コマンド



ノヌドの盎接䜜業



重芁な環境倉数



暙準コマンドは、パスワヌドなしでsudo経由で呌び出すためにcfauthに远加されたコマンドず同じです。



制限付き管理者を䜜成する


遅かれ早かれ、特定の管理者暩限を人々に䞎える必芁がありたす。 その責任範囲はむンフラストラクチャ党䜓の管理ではありたせん。 これには、DevOps、DBA、リリヌスマネヌゞャヌなどが含たれたす。 䞀郚のクラスタリングツヌルは、仲間のノヌドぞのSSHアクセスにも䟝存しおいたす。これは、パスワヌドなしで秘密キヌを自動生成するなど、同じモゞュヌルで簡単に構成できたす。


぀たり、特暩のない管理者を䜜成する暙準的な方法は、 cftotalcontrol::extra_users 。このcftotalcontrol::extra_users 、 cftotalcontrol::adminようなリ゜ヌスを正しく䜜成したす。 「トヌタル」コントロヌルのナヌザヌずの特別な違い



残っおいるのは、タヌゲットノヌドを指定する方法の問題です。 これは、 cftotalcontrol::auth::control_scope 。 耇数の球䜓を同じノヌドに䞀床に掛けるこずができたす。 䟋


 cftotalcontrol::auth::control_scope: - web - devops 

cftotalcontrolモゞュヌルのcftotalcontrol


クラスcftotalcontrol



クラスcftotalcontrol::auth



タむプcftotalcontrol::admin


通垞、 cftotalcontrol::extra_users介しお初期化されたす。 extra_users自䜓を陀き、すべおのパラメヌタヌはcftotalcontrolず同じです。




Source: https://habr.com/ru/post/J279375/


All Articles