[Bastion server]Google Authenticatorによる2段階認証とSSH鍵認証を踏み台サーバで実装する
前回ブログしました踏み台サーバについてですが、Ansibleでユーザー管理を実現しました。ユーザー管理はどこでも課題となりますが、今話題であるペパボのP山さん作「STNS」を試してみたり、
考慮しまくった結果!!今回Ansibleで十分に管理ができたのでブログします。STNSは100人以上の開発メンバーがいる場合が好ましい!!→カオスになる前に
■RVIRUS0817/ansible_bastion-server
https://github.com/RVIRUS0817/ansible_bastion-server
■仕様/目的
- ansibleは踏み台サーバのローカルホストで実行すること
- sudoできるユーザーは特定のgroupにしか所属しないこと(例:adachinグループ)
- 仮パスワードを適用し、各ユーザーはログイン時に変更させること
- 秘密鍵を指定しない場合はログインパスワードとGoogle Authのパスワードが求められる
■ユーザー追加
・roles/common/tasks/user.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
- name: create sudo user user: name: "{{ item.name }}" password: "{{ item.pass }}" update_password: "{{ item.updatepass }}" groups: "{{ item.groups }}" createhome: yes shell: "{{ item.shell }}" state: "{{ item.state }}" remove: "{{ item.remove }}" loop: - { name: 'adachin01', pass: "{{ PASS }}", updatepass: 'on_create', groups: 'adachin', shell: '/bin/bash', state: 'present', remove: 'no' } - { name: 'adachin02', pass: "{{ PASS }}", updatepass: 'on_create', groups: 'adachin', shell: '/bin/bash', state: 'present', remove: 'no' } - name: create dev user user: name: "{{ item.name }}" password: "{{ item.pass }}" update_password: "{{ item.updatepass }}" createhome: yes shell: "{{ item.shell }}" state: "{{ item.state }}" remove: "{{ item.remove }}" loop: - { name: 'adachindayo', pass: "{{ PASS }}", updatepass: 'on_create', shell: '/bin/bash', state: 'present', remove: 'no' } - name: authorized_key dev user ignore_errors: yes authorized_key: user: "{{ item.user }}" key: "{{ item.key }}" loop: - { user: 'adachin01', key: 'ssh-rsa xxxx' } - { user: 'adachin02', key: 'ssh-rsa xxxx' } |
上記のようにsudoできるユーザー、sudoできないユーザーを分けました。基本踏み台は管理者のみsudoできればいいので、他のユーザーが設定等変更しないようにgroup無所属にしました。on_createを使用することで、ユーザー作成をしたのみに仮パスワードが反映されます。なので、ansibleのコード上、新しいユーザーが増え、各ユーザーがパスワード変更しても仮パスワードで上書きすることはありません。
■ユーザー削除
1 |
- { name: 'name', pass: "{{ PASS }}", groups: 'adachin', shell: '/bin/bash', state: 'absent', remove: 'yes' } |
ユーザー削除の場合は上記のようにstate: ‘absent’,remove: ‘yes’に変更し、適用すれば削除されます。あとはコードから削除するだけです。
■まとめ
ユーザー追加や削除をプルリクでレビューできるのはチームも認識できるし、入社、退職者も誰がどうなっているのか把握しやすいですな。
0件のコメント