diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 47f10e7..db50312 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -1,74 +1,75 @@ --- -- name: Install Docker prerequisites - ansible.builtin.apt: - name: - - ca-certificates - - curl - - python3-debian ## needed for the deb822 module - state: present - update_cache: true +- name: Install Docker become: true + block: + - name: Install Docker prerequisites + ansible.builtin.apt: + name: + - ca-certificates + - curl + - python3-debian ## needed for the deb822 module + state: present + update_cache: true -- name: Add Docker official APT repository (DEB822 format) - ansible.builtin.deb822_repository: - name: docker - types: deb - uris: "https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}" - suites: "{{ ansible_facts['distribution_release'] }}" - components: stable - signed_by: "https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg" - state: present - become: true + - name: Add Docker official APT repository (DEB822 format) + ansible.builtin.deb822_repository: + name: docker + types: deb + uris: "https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}" + suites: "{{ ansible_facts['distribution_release'] }}" + components: stable + signed_by: "https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg" + state: present -- name: Install Docker CE packages - ansible.builtin.apt: - name: - - docker-ce - - docker-ce-cli - - containerd.io - - docker-buildx-plugin - - docker-compose-plugin - state: present - update_cache: true - become: true + - name: Install Docker CE packages + ansible.builtin.apt: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: present + update_cache: true -- name: Ensure Docker service is running and enabled - ansible.builtin.service: - name: docker - state: started - enabled: true - become: true + - name: Ensure Docker service is running and enabled + ansible.builtin.service: + name: docker + state: started + enabled: true -- name: Add deployment user to docker group - ansible.builtin.user: - name: deployment - groups: docker - append: true +- name: Configure deployment user for Docker become: true + block: + - name: Add user to docker group + ansible.builtin.user: + name: deployment + groups: docker + append: true -- name: Create target for docker compose files - ansible.builtin.file: - path: /opt/docker - state: directory - owner: deployment - group: deployment - mode: "0755" - become: true - -- name: Create appuser group - ansible.builtin.group: - name: appuser - state: present - gid: 9999 - become: true + - name: Create target for docker compose + ansible.builtin.file: + path: /opt/docker + state: directory + owner: deployment + group: deployment + mode: "0755" - name: Create app user for secure container execution - ansible.builtin.user: - name: appuser - state: present - uid: 9999 - group: appuser - system: true - shell: /usr/sbin/nologin - create_home: false become: true + block: + - name: Create appuser group + ansible.builtin.group: + name: appuser + state: present + gid: 9999 + + - name: Create user + ansible.builtin.user: + name: appuser + state: present + uid: 9999 + group: appuser + system: true + shell: /usr/sbin/nologin + create_home: false diff --git a/roles/security/tasks/main.yml b/roles/security/tasks/main.yml index 9b9a0fe..5d4c252 100644 --- a/roles/security/tasks/main.yml +++ b/roles/security/tasks/main.yml @@ -1,32 +1,35 @@ --- -- name: Create SSH drop-in directory - ansible.builtin.file: - path: /etc/ssh/sshd_config.d - state: directory - owner: root - group: root - mode: "0755" +- name: Harden SSH configuration become: true + block: + - name: Create SSH drop-in directory + ansible.builtin.file: + path: /etc/ssh/sshd_config.d + state: directory + owner: root + group: root + mode: "0755" -- name: Harden SSH configuration with drop-in template - ansible.builtin.template: - src: sshd.conf.j2 - dest: /etc/ssh/sshd_config.d/sshd.conf - owner: root - group: root - mode: "0644" - notify: Restart sshd + - name: Harden SSH configuration with drop-in template + ansible.builtin.template: + src: sshd.conf.j2 + dest: /etc/ssh/sshd_config.d/sshd.conf + owner: root + group: root + mode: "0644" + notify: Restart sshd + +- name: Enable fail2ban become: true + block: + - name: Install fail2ban + ansible.builtin.apt: + name: + - fail2ban + state: present -- name: Install fail2ban - ansible.builtin.apt: - name: - - fail2ban - state: present - become: true - -- name: Start fail2ban - ansible.builtin.service: - name: fail2ban - state: started - enabled: yes + - name: Start fail2ban + ansible.builtin.service: + name: fail2ban + state: started + enabled: yes diff --git a/roles/users/tasks/main.yml b/roles/users/tasks/main.yml index 1cc19d7..2d58ad4 100644 --- a/roles/users/tasks/main.yml +++ b/roles/users/tasks/main.yml @@ -1,40 +1,42 @@ --- -- name: Create primary sysadmin user - ansible.builtin.user: - name: "{{ sysadmin_user }}" - groups: sudo - append: yes - shell: /bin/bash - create_home: yes - become: true - -- name: Add SSH public key for sysadmin - ansible.posix.authorized_key: - user: "{{ sysadmin_user }}" - state: present - key: "{{ sysadmin_public_ssh_key }}" - become: true - -- name: Allow passwordless sudo for sudo group - ansible.builtin.copy: - dest: /etc/sudoers.d/sudo-nopasswd - content: "%sudo ALL=(ALL) NOPASSWD: ALL" - mode: "0440" - validate: /usr/sbin/visudo -cf %s - become: true - -- name: Create deployment user for CI/CD - ansible.builtin.user: - name: deployment - shell: /bin/bash - create_home: yes - become: true +- name: Set up primary sysadmin user when: deployment_public_ssh_key is defined - -- name: Add SSH public key for deployment user - ansible.posix.authorized_key: - user: deployment - state: present - key: "{{ deployment_public_ssh_key }}" become: true + block: + - name: Create user + ansible.builtin.user: + name: "{{ sysadmin_user }}" + groups: sudo + append: yes + shell: /bin/bash + create_home: yes + + - name: Add SSH public key + ansible.posix.authorized_key: + user: "{{ sysadmin_user }}" + state: present + key: "{{ sysadmin_public_ssh_key }}" + + - name: Allow passwordless sudo + ansible.builtin.copy: + dest: /etc/sudoers.d/sudo-nopasswd + content: "%sudo ALL=(ALL) NOPASSWD: ALL" + mode: "0440" + validate: /usr/sbin/visudo -cf %s + + +- name: Set up deployment user for CI/CD when: deployment_public_ssh_key is defined + become: true + block: + - name: Create user + ansible.builtin.user: + name: deployment + shell: /bin/bash + create_home: yes + + - name: Add SSH public key + ansible.posix.authorized_key: + user: deployment + state: present + key: "{{ deployment_public_ssh_key }}"