From 186becb71e8193dee9247ccdafcd5e1369a7bee8 Mon Sep 17 00:00:00 2001 From: medusa Date: Wed, 27 Mar 2024 05:11:51 +0000 Subject: [PATCH] Add docs/tech_docs/keycloak.md --- docs/tech_docs/keycloak.md | 122 +++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/tech_docs/keycloak.md diff --git a/docs/tech_docs/keycloak.md b/docs/tech_docs/keycloak.md new file mode 100644 index 0000000..a526512 --- /dev/null +++ b/docs/tech_docs/keycloak.md @@ -0,0 +1,122 @@ +Focusing on integrating Keycloak with Ansible for managing Identity and Access Management (IAM) simplifies the process and aligns with modern IAM practices. Keycloak is an open-source IAM solution providing single sign-on with Identity Brokering and Social Login, User Federation, Client Adapters, an Admin Console, and an Account Management Console. + +This guide assumes you have a basic understanding of IAM principles, Ansible, and Keycloak. We’ll cover setting up a Keycloak server using Ansible, configuring realms, clients, and users, and managing Keycloak configurations. + +### Environment Setup + +- **Control Machine:** A Linux-based system with Ansible installed. This machine executes Ansible playbooks against target servers. +- **Target Server:** A Linux server (e.g., Ubuntu 20.04) designated to host Keycloak. Ensure it has Java (OpenJDK 11) installed, as Keycloak runs on the Java platform. + +### Step 1: Installing Ansible + +1. **On your control machine**, ensure you have Ansible installed. You can install Ansible using your distribution's package manager. For example, on Ubuntu: + + ```bash + sudo apt update + sudo apt install ansible -y + ``` + +2. **Verify the installation** by running `ansible --version`. + +### Step 2: Preparing Ansible Inventory + +1. Create an inventory file named `hosts` in your working directory, and add the target server under a group `[keycloak_servers]`: + + ```ini + [keycloak_servers] + keycloak_server ansible_host= ansible_user= + ``` + +2. Replace `` and `` with the target server's IP address and the SSH user, respectively. + +### Step 3: Keycloak Installation Playbook + +1. **Create a playbook** named `install_keycloak.yml`. This playbook will handle the installation of Keycloak on the target server. + +2. **Playbook content**: + + ```yaml + --- + - name: Install and Configure Keycloak + hosts: keycloak_servers + become: yes + + tasks: + - name: Download Keycloak + get_url: + url: https://github.com/keycloak/keycloak/releases/download/15.0.2/keycloak-15.0.2.tar.gz + dest: /tmp/keycloak.tar.gz + + - name: Extract Keycloak Archive + unarchive: + src: /tmp/keycloak.tar.gz + dest: /opt/ + remote_src: yes + + - name: Rename Keycloak Directory + command: mv /opt/keycloak-15.0.2 /opt/keycloak + + - name: Update Permissions + file: + path: /opt/keycloak + owner: keycloak + group: keycloak + recurse: yes + + - name: Install Keycloak as a Service + template: + src: keycloak.service.j2 + dest: /etc/systemd/system/keycloak.service + notify: Restart Keycloak + + - name: Start Keycloak Service + systemd: + name: keycloak + state: started + enabled: yes + + handlers: + - name: Restart Keycloak + systemd: + name: keycloak + state: restarted + enabled: yes + ``` + +3. **Create a systemd service template** for Keycloak (`keycloak.service.j2`) in your Ansible working directory: + + ```ini + [Unit] + Description=Keycloak + After=network.target + + [Service] + User=keycloak + PIDFile=/opt/keycloak/keycloak.pid + ExecStart=/opt/keycloak/bin/standalone.sh -b 0.0.0.0 + SuccessExitStatus=143 + + [Install] + WantedBy=multi-user.target + ``` + +4. **Run the playbook** to install Keycloak on the target server: + + ```bash + ansible-playbook -i hosts install_keycloak.yml + ``` + +### Step 4: Configuring Keycloak with Ansible + +After installing Keycloak, you'll likely want to manage realms, clients, users, and roles. Ansible doesn’t have built-in modules for Keycloak administration as of my last update. However, you can use the `uri` module to interact with Keycloak’s REST API for management tasks. + +1. **Create roles, users, and clients** using Ansible tasks that make API calls to Keycloak. You’ll need to authenticate first to obtain an access token, then use that token for subsequent API requests. + +2. **API Authentication Example**: + + ```yaml + - name: Authenticate with Keycloak + uri: + url: "http://:8080/auth/realms/master/protocol/openid-connect/token" + method: POST + body: "client_id=admin-cli&username \ No newline at end of file