Ansibleでユーザパスワードを変更してSSMパラメータストアにパスワードを保存する
実現したいこと
Ansibleを使用してTargetサーバのユーザのパスワードを変更します。
変更後のパスワードはAWS Systems Managerの一機能であるパラメータストアに保存したいと思います。
パラメータストアは無料でリージョンごとに10000個までのパラメータを管理することができます。
前回に引き続き、Docker + Ansibleの環境で以下を実現します。
①ランダムパスワードを生成する
②ユーザのパスワードを変更する
③SSMパラメータストアにパスワードを保存する
設定
DockerとAnsibleの細かい設定は前回の記事と同じであるため省略します。
変更するのはmain.ymlです。
まずは、15文字のランダムなパスワードを生成します。
次に、生成されたパスワードを表示します。
生成されたパスワードを対象のユーザに設定します。
最後にAWS CLIコマンドでパラメータストアにパスワードを保存します。
ssm put-parameterの補足説明です。
・パスワードと紐づける名前を--nameで指定。また、"/"を使用して階層を設定
・typeにSecureStringを指定して、デフォルトのAWS KMS Keyを使用してパラメータを暗号化
(デフォルトのAWSマネージドキーの場合はKey IDを指定しない)
・regionを指定する (.aws/configにリージョンを設定していても、明示的に指定しないとエラーになる)
- hosts: targets
become: yes
gather_facts: no
tasks:
##################################################
# Generate new password
##################################################
- name: Generate new password
shell: cat /dev/urandom | base64 | fold -w 15 | head -n1
register: random_password
##################################################
# Display the output
##################################################
- name: Output
debug:
msg: Password -> [ {{random_password.stdout_lines[0]}} ]
##################################################
# Change password of the user
##################################################
- name: Change password
user:
name: test-user
password: "{{ random_password.stdout_lines[0] | password_hash('sha512') }}"
##################################################
# Add the password to Parameter Store
##################################################
- name: Put password
delegate_to: localhost
shell: >
aws ssm put-parameter
--name "/Passwords/test-user"
--type "SecureString"
--value {{random_password.stdout_lines[0]}}
--region ap-northeast-1
IAMポリシー
EC2からSystems Managerへパラメータを設定できるようにするため、最低限以下のポリシーをEC2に設定したIAMロールに与える必要があります。
・ssm:PutParameter
実行結果
では、AnsibleのPlaybookを実行します。
ansible-playbook -i ./inventory ./main.yml
PLAY [targets]****************************************************************************************************
TASK [Generate new password] *************************************************************************************
changed: [10.0.1.100]
TASK [Output] ****************************************************************************************************
ok: [10.0.1.100] => {
"msg": "Password -> [ LAnjvZ5d/CdrFEE ]"
}
TASK [Change password] *******************************************************************************************
changed: [10.0.1.100]
TASK [Put password] **********************************************************************************************
changed: [10.0.1.100]
PLAY RECAP *******************************************************************************************************
10.0.1.100 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
変更後のパスワードでサーバにログイン
無事に変更後のパスワードでSSH接続ができました。
1つ注意点として、Ansibleコマンドでパスワードを変更する際に、password_hash('sha512')で
hash化しなければ、パスワードが変更されてもSSHでログインできません。
以下のように警告が表示されます。
[WARNING]: The input password appears not to have been hashed. The 'password'
argument must be encrypted for this module to work properly.
AWSマネジメントコンソールでの結果確認
パラメータストアを確認します。
階層が設定されていますが、数が多くなると見づらくなりそうです。
test-userのパスワードを確認します。
暗号化したので、値のところにある「表示」をクリックすると平文で見えるようになります。
Author And Source
この問題について(Ansibleでユーザパスワードを変更してSSMパラメータストアにパスワードを保存する), 我々は、より多くの情報をここで見つけました https://qiita.com/latin1/items/c536d32d635a4aa093b3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .