Ansible에서 사용자 비밀번호를 변경하여 SSM 파라미터 저장소에 비밀번호 저장
6822 단어 AnsibleSystemsManagerAWS
실현하고 싶은 것
Ansible을 사용하여 대상 서버의 사용자 비밀번호를 변경합니다.
변경된 비밀번호는 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에 지역을 설정해도 명시 적으로 지정하지 않으면 오류가 발생함)
main.yml
- 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 접속을 할 수 있었습니다.
하나의 참고 사항으로, 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 Management Console에서 결과 확인
매개 변수 저장소를 확인합니다.
계층이 설정되어 있습니다만, 수가 많아지면 보기 어려워질 것 같습니다.
test-user의 비밀번호를 확인합니다.
암호화했기 때문에, 값의 곳에 있는 「표시」를 클릭하면 평문으로 보이게 됩니다.
Reference
이 문제에 관하여(Ansible에서 사용자 비밀번호를 변경하여 SSM 파라미터 저장소에 비밀번호 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/latin1/items/c536d32d635a4aa093b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)