私のPuppetマスターにはいくつかの機密ファイルが含まれています。各パペットエージェントが、その特定のエージェントに関係するファイルにのみアクセスできるようにしたいです。言い換えると:
それが重要かどうかはわかりませんが、私は乗客を走らせています(そして私のエージェントとマスターはすべてスクイーズバックポートから2.7.6です)。
Puppet File Server のドキュメントは、あなたが求めていることのほとんどをカバーできるはずです。特に セキュリティセクション を参照してください。
最初のメモ。自動署名を有効にしている場合、提供されるセキュリティのほとんどは意味がありません。各証明書を確認する必要があります。構成するセキュリティ設定はホスト名/証明書名またはそれらに一致する正規表現に基づくため、自動署名を有効にすると、信頼できないシステムが、秘密ファイルにアクセスできるパターンに一致する名前の証明書を単純に要求できる可能性があります。
デフォルトでは、特別なプラグインとモジュールのファイルサーバーマウントにあるものはすべて、どのクライアントでも利用できます。ただし、これは構成によってある程度制御できます。
特定の場所を指すカスタムの「マウント」を設定することもできます。秘密SSHキーを配布するための [private] マウントを作成する方法に関する例がドキュメントに記載されています。ホスト名はマウントパスの一部として使用されるため、特定のホストはそれに属するファイルのみを表示できます。
これに関する確かなデータはありません。しかし、私があちこち読んだことから、そのファイルがPuppetファイルサーバーツリー内にあり、Puppetファイルサーバーの構成によってエージェントがツリーにアクセスできる場合、エージェントはマスターから任意のファイルを取得できると感じています。また、file()、template()、およびextlookup()関数は、エージェントに送信する前に、エージェントの構成をコンパイルするときにマスターで実行されると感じています。
したがって、機密ファイルをPuppetファイルサーバーツリーの外部に保存し、file()を使用してそれらにアクセスすることはかなり安全である必要があります。このように、それらはそれらが意図されているエージェントによってのみアクセス可能であるべきです。
そのファイルが1つの「ノード」でのみ定義されている限り、問題はありません。別の「ノード」は、そのファイルが存在しないため、そのファイルを要求できません。
ただし、通常、「保護された」ファイルをPuppetサーバーに保存することはお勧めできません。
お役に立てれば!
「重要なファイルをPuppetサーバーに保存したくない場合は、代わりに何を提案しますか?」
puppet librarian このインスタンスで役立つかもしれません..これにより、クライアントに固有のpuppetfileを作成し、オンデマンドでクライアントに適用します(おそらくpuppetマスターがなくても)。
したがって、典型的なシナリオは、ボックスにSSHで接続し、既知の安全なリモートまたはローカルの場所からpuppetfileを取得し、それを使用してすべての依存モジュール(または構成ファイル)をインストールしてから、手動のpuppet実行をトリガーすることです。 capistranoまたは同様のツールを使用して、その一連のタスクを簡単に自動化します。