SaltStack:サービスで使用するための事前生成パスワード

についての記事は何ですか?


SaltStackを使用して自動的にインストールされるさまざまなサービスに必要なパスワードを生成する方法に関する短い記事。





パスワードの生成が困難。



多くの場合、一部の部分にアクセスするために(たとえば、WebインターフェースやAPIを管理するために)パスワードを必要とするサービスまたはアプリケーションを自動的にインストールする必要があります。 それほど頻繁にデータベースユーザーを構成する必要はなく、これらのデータベースを使用するサービスなどで使用されます。



典型的な問題は、このようなすべての場合のパスワード生成です。 この問題にはいくつかの解決策があります。



1.柱ファイルにパスワードを手動で処方する




柱/ passwords.sls

service1: web-access-password: '9KTE2aN11GYOJmZGOoqV' db-access-password: '2pGbSlSFkHPY22TwqUus'
      
      





それでは、他の柱またはストーリーで、指定されたパスワードを使用してアクセスを生成します。

すべてが正常で理解できるように見えますが、1つだけあります。指定されたピラーを使用して状態を配布すると、パスワードは同じ変更されていない形式で保存されます。 それだけでなく、この状態が適用される同じタイプのすべてのサーバーでも同じパスワードが設定されます。 当然、情報セキュリティの観点からこれが何を脅かすかを説明する意味はありません。



2. SaltStackを使用してパスワードを生成します。




グレインのget_or_set_hashモジュールには、SaltStackの興味深い機能が1つあります。これは、後で特定のグレインを使用するためのパスワードを生成できます。 パスワードは非常に複雑で(呼び出されたときにオーバーライドできるデフォルトの文字セットのため)、状態で簡単に使用できます(ミニオンから対応するグレインを読み取るだけです)。 覚えておくべき唯一のことは、この関数の最初の呼び出しでのみパスワード生成が発生することであり(そしてパスワード自体は/ etc / salt / grainsファイルに配置されます)、後続のものはすべて、 salt [ 'grains.get']( 'stored-password-grain-name')

この方法の最も大きな欠点の1つは、このようにして生成されたパスワードをピラーファイルで読み取ることができないことです。これは、さまざまな式( SaltStack Formulas )を使用する場合に役立ちます。



3.前 柱ファイルでのパスワード生成。


私が頻繁に使用するもう1つの方法は、Jinja2でパスワードを事前生成することです。

一般的な場合、前の Generationは、Salt Masterと同じマシンにインストールされたミニオンを使用します。 そのようなミニオンをマスター自体に接続したくない場合は、マスターレス構成を使用できますが、マスターに接続されたミニオンを使用することをお勧めします。グレインを示します:roles:local-minion and master entry

master / top.sls

 base: 'roles:local-minion': - match: grain - local-minion-state
      
      







以前のメソッドの本質。 パスワードの生成は、次のようなパスワードでjinjaテンプレートピラーファイルを作成することです。

master / files / some-srv-password.sls.jinja2

 some-srv: password: '{{salt['random.get_str'](30)}}'
      
      







ここでは、 ランダムモジュールのget_str関数が使用されます。



次のステップは、ローカルミニオンの状態を記述することです。これにより、パスワード付きのピラーファイルが生成されます。

master / local-minion-state.sls

 passwords-file: file.managed: - name: /srv/salt/pillar/some-srv-password.sls #   ,  pillar      - source: salt://files/some-srv-password.sls.jinja2 - template: jinja
      
      







その後、preの存在に応じて状態を適用する前に。 生成されたパスワード、説明された状態を実行します:

 ~# salt-call --local state.sls local-minion-state # masterless or ~# salt -C 'G@roles:local-minion' state.sls local-minion-state
      
      







状態を実行した後、生成されたパスワードを含むピラーファイルを取得します。 それを使用するには、別の柱ファイルでincludeを実行します。

柱/ some-srv.sls

 include: - some-srv-password some-srv: username: Fred . . .
      
      







その結果、 salt 'min-with-some-srv-pillar-connected'pillar.itemsをクエリすると、次のような結果が得られます。

 pillar: . . . some-srv: . . . username: Fred password: AoEK8u4Uvo_r9MKtooSUxZV1Y_DLoy
      
      







それから、単にsalt ['pillar.get']( 'some-srv:password')を呼び出すことでパスワードデータにアクセスできます。



おわりに



SaltStackシステムの柔軟性は十分に大きいため、この問題の解決策は、記事に記載されている3つの方法だけに限定されない可能性が高くなります。

いずれにせよ、この記事で説明されている情報が、SaltStackユーザーだけでなく初心者にも役立つことを願っています。 頑張って



All Articles