Rundeck 3 でユーザのパスワードを暗号化(ハッシュ化)する方法

結論

  • GUI で暗号化(ハッシュ化)の値を取得することができる
  • その値を設定するためには(現時点では)GUI ではできず、直接設定ファイル(realm.properties)を編集する必要がある

具体的な方法

1. 暗号化(ハッシュ化)したい値を入力する

暗号化(ハッシュ化)した値を取得するには画面右上の歯車のアイコンをクリックし、Password Utility を選んで UsernameValue To Encrypt を入力すればよいです。EncoderJetty 固定になっています*1

f:id:gregminster:20190211123446p:plain

2. 取得できた結果を確認する

上記の作業の結果、以下のように obfuscatemd5crypt の3つの値が取得できたはずです。

f:id:gregminster:20190211123624p:plain

この3つの値の違いは次のとおり……だと思います(自信がない)。

  • obfuscate (OBF)
    • 復号可能
    • ダイジェスト認証に用いる
  • md5
    • 復号不可(実質的にどうかは置いとくとして……)
    • 何度実行しても同じ結果なのでソルトやストレッチングの類は行われていない
      • 同じパスワードならばハッシュ値を使い回すことができるということ
  • crypt
    • 復号不可
    • ユーザ名とセットになっているので使い回すことはできない

公式ドキュメント には md5 の例が取り上げられていますが、どれも完全とは言えないと思います。この中から選ぶなら crypt がよさそうな気はしますが、それでも平文よりかはましな程度かと思います。

3. 取得できた値をユーザに適用する

こちらの記事 も参考にして、realm.properties に設定を書き込みます。

たとえば、yamada さんのパスワードを fuga にして、そのパスワードを md5 形式で記載し、さらに所属グループを foobar にする場合は以下のように書き加えます。

yamada: MD5:c32ec965db3295bad074d2afa907b1c3,foo,bar

4. Rundeck を再起動する

ユーザの設定を書き換えた場合は Rundeck の再起動が必要なようです。Ubuntu ならば次のようにして再起動しましょう。rundeck ではなく rundeckd です。 なお、再起動には結構な時間がかかります(私の環境では2分程度)。

$ sudo service rundeckd restart

5. 設定したパスワードでログインできるか確認する

以上の設定が正しくできていれば、設定したパスワードでログインできるはずです。

補足

Rundeck 3 については粒度を細かくして記事にしているので、他の記事 も参考にするとよいかもしれません。

あと、困ったら何はともあれ 公式ドキュメント です。

*1:プラグインで変更できる?

Rundeck 3 の SSH の鍵は OpenSSH形式 ではなく OpenSSL形式 にする必要がある

結論

OpenSSL の形式にする必要があります。

これは厳密には Rundeck が原因というわけではなく、Rundeck が用いている Jetty というライブラリが原因のようです*1

これ、小一時間ハマりました……。

判断方法

OpenSSH の形式ですと、鍵のヘッダに -----BEGIN OPENSSH PRIVATE KEY----- と書かれています(フッタも同様)。

OpenSSL の形式ですと、鍵のヘッダに -----BEGIN RSA PRIVATE KEY----- と書かれています(フッタも同様)。

参考

補足

Rundeck 3 については粒度を細かくして記事にしているので、他の記事 も参考にするとよいかもしれません。

あと、困ったら何はともあれ 公式ドキュメント です。

*1:間違っていたらすいません

Rundeck 3 でユーザのアクセス権限(ACL)を設定する方法

結論

  • CLI で作業する必要はありません

具体的な手順

1. 右上の歯車のメニューから Access Control を選びます

f:id:gregminster:20190211114510p:plain

2. + Create ACL Policy をクリックします

f:id:gregminster:20190211114725p:plain

3. Create System ACL Policy に遷移します

f:id:gregminster:20190211114828p:plain

4. Name を決めます

ここはユーザ名やグループ名などを含んだ分かりやすい名前にすべきでしょう(後から変更できます)。

f:id:gregminster:20190211114933p:plain

5. 設定内容を書く

設定内容を YAML で書いていきます。書式については 公式ドキュメント を参考にしましょう。最初から設定されている admin の内容がテンプレート的に参考になるので以下に貼り付けます。

description: Admin, all access.
context:
  project: '.*' # all projects
for:
  resource:
    - allow: '*' # allow read/create all kinds
  adhoc:
    - allow: '*' # allow read/running/killing adhoc jobs
  job:
    - allow: '*' # allow read/write/delete/run/kill of all jobs
  node:
    - allow: '*' # allow read/run for all nodes
by:
  group: admin

---

description: Admin, all access.
context:
  application: 'rundeck'
for:
  resource:
    - allow: '*' # allow create of projects
  project:
    - allow: '*' # allow view/admin of all projects
  project_acl:
    - allow: '*' # allow admin of all project-level ACL policies
  storage:
    - allow: '*' # allow read/create/update/delete for all /keys/* storage content
by:
  group: admin

by: の 部分の username または group を適用したいユーザ名またはグループ名に書き換えるととりあえずは動きます(権限は全開になりますが)。具体的な書き方については公式ドキュメントの内容例をそのまま貼り付けます。

    by:
      username: 'bob'

    by: #using a regular expression
      username: 'dev\d+'

    by:
      group: [test,qa,prod]

    by: #using a regular expression
      group: 'dev_team_(alpha|beta|gamma)'

    by:
      username:
        - simon
        - frank

注意するところとしては、context: のところで application: 'rundeck' と指定することが必須です。これさえ指定していればとりあえずはざっくりとした権限の設定はできます。例えば、以下のように書くと、grouphoge の人たちと usernamefuga の人に全権限が与えられます。

description: SAMPLE NO ACL DESU
context:
  application: 'rundeck'
for:
  resource:
    - allow: '*'
  project:
    - allow: '*'
  project_acl:
    - allow: '*'
  storage:
    - allow: '*'
by:
  group: hoge
  username: fuga

5. 設定内容を確認するために設定したユーザでログインしてみる

ここまでの内容が正しく設定できていれば正しく権限が設定されているはずです。ログインをして確かめてみてください。再起動は不要ですが、ログイン状態の場合は一度ログアウトして再度ログインします。

X. プロジェクトメニューの中の Access Control メニューについて

プロジェクトメニューの中にある Access Control メニューは現時点では無効とのことです。公式ドキュメントには以下のようにあります。

The YAML format has changed since version 1.2 to address several issues:

Access control on resources other than Jobs can now be declared
Project level access control is now supported
“Deny” rules can now be declared
Application level access control is also supported, replacing the Role mapping
The Rundeck server no longer uses role-mapping and instead defers to the aclpolicy for all authorizations.

したがって、YAML での権限設定は、トップメニューの YAML の中ですべて設定しましょう。

補足

Rundeck 3 については粒度を細かくして記事にしているので、他の記事 も参考にするとよいかもしれません。

あと、困ったら何はともあれ 公式ドキュメント です。

Rundeck 3 で SSH先 でジョブを実行する方法

結論

1. 「ノード」の設定(追加)を行う

まずは追加です。

2. ノードを追加する際に「新しいリソースモデルソースを追加」では「File」を選択する

以下の画像をご参照ください。

f:id:gregminster:20190211110517p:plain

3. まずは雛形ファイルを作ってしまう

  • 以下の画像をご参照ください
  • 後から手動で作ることも可能ですがいろいろ面倒なのでここで雛形を作ったほうが良いかと思います
  • ファイルのフォーマットは XML と JSON と YAML が選べますが、ここでは YAML を選んでいます

f:id:gregminster:20190211111019p:plain

  • この雛形ファイル内で最上位階層のキー名は 必ず変更する必要があります *1
    • 「5.」でも触れます

4. GUI の編集画面に遷移する

  • CLI から編集できますが、GUI からも編集できる(Edit Nodes File をクリック)のでその方が楽だと思います
  • 以下の画像をご参照ください

f:id:gregminster:20190211111247p:plain


f:id:gregminster:20190211111300p:plain

5. 設定ファイルに SSH先 と 鍵 を記載する(注意点あり

  • 最上位階層のキー名をデフォルトのものから任意の名称に必ず変更して下さい
    • 変更しないとノードのリストに現れません
    • 変更しない場合は強制的に localhost になるようです*2
  • hostname に SSH先 を設定します
    • ひな形の hostname を削除することを忘れないでください(下記の例ではコメントアウトしています)
  • ssh-key-storage-path に SSH鍵 を設定します*3
    • storage-path という文字列が含まれてあることから分かるように、この設定名を用いる場合は Rundeck の鍵管理システムを利用する場合です
    • 単純に任意の場所に置いた鍵を指定する方法や パスワードでログインする方法の場合は異なる設定をする必要があります
  • 具体的には以下のようになります
af1e1b85e098:
  nodename: af1e1b85e098
  # hostname: af1e1b85e098
  osVersion: 4.9.125-linuxkit
  osFamily: unix
  osArch: amd64
  description: Rundeck server node
  osName: Linux
  username: rundeck
  tags: ''
  hostname: 123.123.123.123
  ssh-key-storage-path: keys/FOOBAR_KEY

6. ジョブの設定において当該「ノード」を割り当てる

  • ジョブの設定項目に「ノード」というものがあります
  • その設定にて「ノードに割り当てる」を選択し、ノードの name: に、先ほど書いた設定ファイルの設定名(キーバリューの組み合わせのうち、ルートにあるキーの名前)を指定します
    • ノードをフィルタリングしたあとに指定したいノードをクリックします
      • フィルタリングの際の書式は純粋な正規表現です
    • ノードの詳細が表示されるので、詳細の最上部にある「→」のアイコンをクリックすると指定できます
  • 以下の画像をご参照ください、

f:id:gregminster:20190211112025p:plain


f:id:gregminster:20190211112006p:plain

7. ジョブを実行する

ここまでの設定が正しければ、SSH先 でジョブを実行することが可能になっているはずです。

備考

ノードの設定ファイルは一つのディレクトリに放り込んでおき、Add source の項目で Directory を選ぶと楽かと思います。

f:id:gregminster:20190219140504p:plain

補足

Rundeck 3 については粒度を細かくして記事にしているので、他の記事 も参考にするとよいかもしれません。

あと、困ったら何はともあれ 公式ドキュメント です。

*1:ここが最大のハマりポイントかも

*2:おそらく書いてあると思うんですが、ドキュメントが見つけられませんでした……

*3:プロジェクトのデフォルト鍵を用いる場合はこの記述は不要ですが、その場合でも明示的に書いておいたほうがよいと思います

Rundeck 3 でユーザを追加する方法

結論

  • GUI からは(現時点では)無理
    • User Summary というメニュー項目がありますが、これはユーザとグループを閲覧できるだけです
  • realm.properties というファイルを編集する必要がある
  • realm.properties の場所は、オンプレ*1とDockerで異なり、それぞれの場所は以下のとおり
    • オンプレ
      • /etc/rundeck/realm.properties
    • Docker
      • /home/rundeck/server/config/realm.properties
  • パスワードを暗号化(ハッシュ化)する場合は別途作業が必要
    • 暗号化(ハッシュ化)された値を取得することは GUI から可能(別記事参照)
  • ユーザの権限を設定することは GUI から可能(別記事参照)

具体例

たとえば、yamada さんのパスワードを fugafuga にして、所属グループを foobar にする場合は以下のように書き加えます。ただしこれはパスワードを平文で書く場合です。

yamada: fugafuga,foo,bar

Docker での realm.properties について(ユーザの追加や削除について)

Docker で Rundeck を起動した場合は(現時点では)ユーザの追加や削除をするためには /home/rundeck/server/config/realm.properties を直接編集するしかありません*2。しかしながらコンテナに入っても vimemacsnano もないためにすぐに編集することができません。

となると Volumes で共有するか、となるわけですが、パーミッションの関係上、「コンテナ作成のときに」共有をしようとしても当該ファイルが共有されません*3

なので、一度共有なしでコンテナを立ち上げて、共有するファイルを $ docker cp CONTAINER_ID:/CONTAINER/NO/FILE /HOST/NO/FILE のようにして手元にもってきて、そのファイルを次に新規にコンテナを立ち上げるときにホスト側から共有する、とすれば大丈夫です。

あるいはホスト側に realm.properties を用意しておいて、$ docker cp /HOST/NO/realm.properties CONTAINER_ID:/home/rundeck/server/config/realm.properties のようにしてコンテナ側にコピーしてもよいかと思います。もちろんその場合はコンテナ内のどの場所に realm.properties を置くかを予め把握しておく必要があります*4

これらはどう考えてもイケてないと思うんですが、Docker の構造上、こうするしかないと思ってます*5

また、realm.properties を編集したあとは再起動が必要になります。

ちなみに、Docker 運用において共有するディレクトリは、公式ドキュメントによると、-v /home/protip/.ssh:/home/rundeck/.ssh-v data:/home/rundeck/server/data rundeck/rundeck などがよくあるプラクティスのようです。

公式ドキュメント

realm.properties の書式については以下の公式ドキュメントの PropertyFileLoginModule の後を参考にしてください。

https://docs.rundeck.com/docs/administration/security/authenticating-users.html

補足

Rundeck 3 については粒度を細かくして記事にしているので、他の記事 も参考にするとよいかもしれません。

あと、困ったら何はともあれ 公式ドキュメント です。

*1:という表現は微妙ですが

*2:GUI から追加や削除ができない

*3:これは Rundeck のコンテナだけの話でなく、Docker 全般によくある話です

*4:今回は /home/rundeck/server/config/realm.properties でよいです

*5:もっといいやり方があれば教えて下さい……

Powered by はてなブログ