<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Tamir Suliman on Medium]]></title>
        <description><![CDATA[Stories by Tamir Suliman on Medium]]></description>
        <link>https://medium.com/@tamirsuliman?source=rss-8924b8f07383------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*3avEkXYQR2_aTUjX.</url>
            <title>Stories by Tamir Suliman on Medium</title>
            <link>https://medium.com/@tamirsuliman?source=rss-8924b8f07383------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 11 Jun 2026 08:06:36 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@tamirsuliman/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Building a Portable Ansible Controller with Docker]]></title>
            <link>https://tamirsuliman.medium.com/building-a-portable-ansible-controller-with-docker-3c079b74933b?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/3c079b74933b</guid>
            <category><![CDATA[devops-automation-tools]]></category>
            <category><![CDATA[ansible-playbook]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ansible-with-docker]]></category>
            <category><![CDATA[ansible]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Tue, 09 Jun 2026 01:07:06 GMT</pubDate>
            <atom:updated>2026-06-09T03:35:43.375Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4ncedwbqm-GSMrEf-NnOFw.png" /><figcaption>Docker-based Ansible controller architecture: project files remain on the host, the controller runs in a portable container, and remote infrastructure is managed securely over SSH.</figcaption></figure><p>Managing infrastructure with Ansible is simple in theory: install Ansible, define an inventory, write playbooks, and connect to remote systems over SSH. In practice, the control node itself often becomes a source of inconsistency. Different laptops, CI runners, jump boxes, and lab servers may have different Ansible versions, Python packages, SSH configurations, and directory layouts.</p><p>To solve this problem, I created a containerized Ansible controller image:</p><p>docker.io/allamiro1/ansible-controller</p><p>The goal is simple: provide a reusable Ansible control node that can run anywhere Docker runs, while keeping configuration, inventory, SSH access, and logs outside the container.</p><h3>Why Containerize the Ansible Control Node?</h3><p>Ansible is agentless, but it still depends heavily on the control environment. The machine running Ansible needs the correct Ansible version, Python dependencies, SSH client configuration, inventory files, roles, collections, and logging paths.</p><p>In a home lab, enterprise lab, or CI/CD environment, this can quickly become messy. One engineer may run Ansible from a laptop. Another may run it from a shared Linux server. A CI job may run it from a temporary runner. Over time, the control node becomes difficult to reproduce.</p><p>A Docker-based Ansible controller helps standardize this layer.</p><p>Instead of rebuilding the control environment manually, the controller image provides:</p><ul><li>Ansible CLI preinstalled</li><li>OpenSSH server for remote access into the controller</li><li>A non-root ansible user</li><li>Passwordless sudo inside the container</li><li>Host-mounted configuration under /configs</li><li>Host-mounted logs under /var/log/ansible</li><li>Support for both linux/amd64 and linux/arm64</li></ul><p>This makes the image useful for labs, training environments, CI/CD testing, and portable infrastructure automation.</p><h3>Why Use a Containerized Ansible Controller?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NoRlJQdilVvSWNPi.png" /></figure><p>Normally, Ansible is installed directly on a Linux system:</p><pre>sudo apt install ansible</pre><p>That works, but it ties the automation environment to the host. Over time, the host may change. Packages get upgraded. Python dependencies change. SSH configuration changes. Logs are written locally. Different users may have different environments.</p><p>With a containerized controller, the execution environment becomes predictable.</p><ul><li>The host provides the files.</li><li>The container provides the tools.</li><li>The remote systems receive the automation.</li></ul><p>This separation is the main benefit.</p><h3>Recommended Directory Layout</h3><p>A simple project layout can look like this:</p><pre>ansible-controller-project/<br>├── configs/<br>│   ├── ansible.cfg<br>│   ├── inventory/<br>│   │   └── hosts.ini<br>│   ├── playbooks/<br>│   │   └── site.yml<br>│   ├── roles/<br>│   └── group_vars/<br>├── logs/<br>│   └── ansible.log<br>└── ssh/<br>    └── authorized_keys</pre><p>The configs directory contains the Ansible configuration, inventory, playbooks, roles, and variables.</p><p>The logs directory stores Ansible logs from inside the container.</p><p>The ssh directory contains the public key used to SSH into the controller as the ansible user.</p><p>This layout keeps the container disposable. You can remove and recreate the container without losing your actual automation files.</p><h3>Creating the Host Directories</h3><p>Start by creating the required directories:</p><pre>mkdir -p configs/inventory<br>mkdir -p configs/playbooks<br>mkdir -p configs/roles<br>mkdir -p configs/group_vars<br>mkdir -p logs<br>mkdir -p ssh</pre><p>If you want to SSH into the container, copy your public key:</p><pre>cp ~/.ssh/id_rsa.pub ssh/authorized_keys</pre><p>If your public key has a different name, adjust the command:</p><pre>cp ~/.ssh/id_ed25519.pub ssh/authorized_keys</pre><h3>Example ansible.cfg</h3><p>Create the Ansible configuration file:</p><pre>cat &gt; configs/ansible.cfg &lt;&lt;&#39;EOF&#39;<br>[defaults]<br>inventory = /configs/inventory/hosts.ini<br>retry_files_enabled = False<br>host_key_checking = False<br>log_path = /var/log/ansible/ansible.log</pre><pre>[privilege_escalation]<br>become = True<br>become_method = sudo<br>become_user = root</pre><pre>[ssh_connection]<br>pipelining = True<br>EOF</pre><p>This tells Ansible to read the inventory from:</p><pre>/configs/inventory/hosts.ini</pre><p>and write logs to:</p><pre>/var/log/ansible/ansible.log</pre><p>For lab environments, disabling host key checking may be convenient. For production, host key checking should be enabled and managed properly.</p><h3>Example Inventory</h3><p>Create a simple inventory file:</p><pre>cat &gt; configs/inventory/hosts.ini &lt;&lt;&#39;EOF&#39;<br>[all]<br>server1 ansible_host=192.0.2.10 ansible_user=admin<br>EOF</pre><p>For a more realistic environment, you can organize hosts by role:</p><pre>[web]<br>web1 ansible_host=10.10.10.11 ansible_user=admin<br>web2 ansible_host=10.10.10.12 ansible_user=admin</pre><pre>[database]<br>db1 ansible_host=10.10.20.11 ansible_user=admin</pre><pre>[linux:children]<br>web<br>database</pre><h3>Example Playbook</h3><p>Create a basic test playbook:</p><pre>cat &gt; configs/playbooks/site.yml &lt;&lt;&#39;EOF&#39;<br>---<br>- name: Test Ansible controller<br>  hosts: all<br>  become: true</pre><pre>  tasks:<br>    - name: Check connectivity<br>      ansible.builtin.ping:</pre><pre>    - name: Print hostname<br>      ansible.builtin.command: hostname<br>      register: hostname_output<br>      changed_when: false</pre><pre>    - name: Show hostname<br>      ansible.builtin.debug:<br>        var: hostname_output.stdout<br>EOF</pre><p>This playbook tests connectivity and prints the hostname of each managed node.</p><h3>Running the Container</h3><p>Run the Ansible controller container:</p><pre>docker run -d --name ansible-ctrl \<br>  -p 2222:22 \<br>  -v &quot;$PWD/configs&quot;:/configs:rw \<br>  -v &quot;$PWD/logs&quot;:/var/log/ansible:rw \<br>  -v &quot;$PWD/ssh/authorized_keys&quot;:/home/ansible/.ssh/authorized_keys:ro \<br>  allamiro1/ansible-controller:latest</pre><p>The mount points are important:</p><pre>Host path                  Container path<br>------------------------------------------------<br>./configs                  /configs<br>./logs                     /var/log/ansible<br>./ssh/authorized_keys      /home/ansible/.ssh/authorized_keys</pre><p>The container exposes SSH on port 2222 on the host.</p><h3>Accessing the Controller</h3><p>You can SSH into the container:</p><pre>ssh -p 2222 ansible@localhost</pre><p>Once inside, test Ansible:</p><pre>ansible all -m ping</pre><p>Run a playbook:</p><pre>ansible-playbook /configs/playbooks/site.yml</pre><p>Because the configuration is mounted from the host, Ansible automatically uses:</p><pre>/configs/ansible.cfg<br>/configs/inventory/hosts.ini</pre><h3>Running Ansible Without SSHing Into the Container</h3><p>You can also execute Ansible commands directly using docker exec:</p><pre>docker exec -it ansible-ctrl ansible all -m ping</pre><p>Run a playbook:</p><pre>docker exec -it ansible-ctrl ansible-playbook /configs/playbooks/site.yml</pre><p>This is useful for scripts and CI/CD pipelines because you do not need an interactive SSH session.</p><h3>Checking Logs</h3><p>Ansible logs are written inside the container to:</p><pre>/var/log/ansible/ansible.log</pre><p>Because this path is mounted to the host, you can view logs directly:</p><pre>cat logs/ansible.log</pre><p>Or follow them live:</p><pre>tail -f logs/ansible.log</pre><p>This is useful when testing playbooks or troubleshooting failed automation runs.</p><h3>Example Docker Compose File</h3><p>For repeated use, Docker Compose is cleaner than a long docker run command.</p><p>Create docker-compose.yml:</p><pre>services:<br>  ansible-controller:<br>    image: allamiro1/ansible-controller:latest<br>    container_name: ansible-ctrl<br>    ports:<br>      - &quot;2222:22&quot;<br>    volumes:<br>      - ./configs:/configs:rw<br>      - ./logs:/var/log/ansible:rw<br>      - ./ssh/authorized_keys:/home/ansible/.ssh/authorized_keys:ro<br>    restart: unless-stopped</pre><p>Start it:</p><pre>docker compose up -d</pre><p>Enter the container:</p><pre>docker exec -it ansible-ctrl bash</pre><p>Run Ansible:</p><pre>ansible all -m ping</pre><p>Stop it:</p><pre>docker compose down</pre><h3>How This Helps in Real Environments</h3><p>This pattern is useful when you want the Ansible control node to be consistent across different systems.</p><p>For example, you can use it in:</p><pre>Home labs<br>Training labs<br>CI/CD runners<br>Temporary automation environments<br>Jump-server-style automation hosts<br>Testing environments before production rollout</pre><p>The same container image can be used by multiple engineers, while each environment mounts its own inventory, variables, playbooks, and SSH keys.</p><p>This keeps automation portable without forcing every host to install Ansible directly.</p><h3>Important Security Notes</h3><p>This container should be treated as an automation control node. It may have access to SSH keys, inventories, privileged accounts, and playbooks that can change remote systems.</p><p>For safer use:</p><pre>Use read-only mounts where possible<br>Do not mount private keys unless required<br>Avoid storing secrets directly in inventory files<br>Use Ansible Vault for sensitive values<br>Enable host key checking in production<br>Restrict access to the SSH port<br>Keep the image updated<br>Review vulnerability scan results</pre><p>The Docker Hub vulnerability scan currently shows a high number of vulnerabilities for some image tags. That should be addressed before using the image in sensitive or production environments.Possible hardening steps include reducing the base image size, removing unnecessary packages, rebuilding regularly, adding CI/CD image scanning, and publishing a hardened variant.</p><h3>Conclusion</h3><p>Containerizing the Ansible control node is a practical way to make automation workflows more portable and reproducible. By separating the image from the configuration, inventory, SSH keys, and logs, the controller remains disposable while the automation content remains persistent and version-controlled.</p><p>The allamiro1/ansible-controller image is a small step toward cleaner infrastructure automation workflows. It provides a simple pattern: package the toolchain, mount the configuration, run the automation, and keep the host environment clean.</p><h3>Project Links and References</h3><h3>Project Links</h3><ul><li><strong>GitHub Repository:</strong> <a href="https://github.com/allamiro/ansible-controller">https://github.com/allamiro/ansible-controller</a></li><li><strong>Docker Hub Image:</strong> <a href="https://hub.docker.com/r/allamiro1/ansible-controller">https://hub.docker.com/r/allamiro1/ansible-controller</a></li><li><strong>Docker Pull Command:</strong></li></ul><pre>docker pull allamiro1/ansible-controller:latest</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3c079b74933b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I Built a 2-Node TLS-Secured MinIO Cluster on Kubernetes Using My Own CA]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/how-i-built-a-2-node-tls-secured-minio-cluster-on-kubernetes-using-my-own-ca-fdb88e10f7c4?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/700/0*1FstMne5BcOD3Ony" width="700"></a></p><p class="medium-feed-snippet">MinIO is a high-performance, S3-compatible object storage system, widely used for self-hosted data infrastructure.In this article, I&#x2019;ll&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/how-i-built-a-2-node-tls-secured-minio-cluster-on-kubernetes-using-my-own-ca-fdb88e10f7c4?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/how-i-built-a-2-node-tls-secured-minio-cluster-on-kubernetes-using-my-own-ca-fdb88e10f7c4?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/fdb88e10f7c4</guid>
            <category><![CDATA[kubernetes-cluster]]></category>
            <category><![CDATA[aws-s3]]></category>
            <category><![CDATA[miniocluster]]></category>
            <category><![CDATA[k8sminio]]></category>
            <category><![CDATA[minio]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Fri, 20 Feb 2026 22:41:18 GMT</pubDate>
            <atom:updated>2026-02-20T22:41:18.446Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How PACS, RIS, and DICOM Work Together in Modern Medical Imaging]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/how-pacs-ris-and-dicom-work-together-in-modern-medical-imaging-06bffaeb86bb?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/1909/0*PpQH-h5C7LcpzmF0" width="1909"></a></p><p class="medium-feed-snippet">As imaging technology continues to evolve, seamless PACS integration&#x200A;&#x2014;&#x200A;built on effective data exchange between modalities (MRI, CT&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/how-pacs-ris-and-dicom-work-together-in-modern-medical-imaging-06bffaeb86bb?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/how-pacs-ris-and-dicom-work-together-in-modern-medical-imaging-06bffaeb86bb?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/06bffaeb86bb</guid>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[dicom]]></category>
            <category><![CDATA[public-health-informatics]]></category>
            <category><![CDATA[health-information]]></category>
            <category><![CDATA[ris-pacs]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Tue, 04 Nov 2025 00:13:48 GMT</pubDate>
            <atom:updated>2025-11-04T00:13:48.141Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Step-by-Step Guide: Deploying a 3-Node Kubernetes Cluster with Minikube on Your Local Machine]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/step-by-step-guide-deploying-a-3-node-kubernetes-cluster-with-minikube-on-your-local-machine-d5759342c7b2?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/2600/0*ToT68LRdJahwWaDc" width="7680"></a></p><p class="medium-feed-snippet">This tutorial demonstrates how to create a 3-node Kubernetes cluster using Minikube&#x200A;&#x2014;&#x200A;all running on a single computer. We&#x2019;ll simulate one&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/step-by-step-guide-deploying-a-3-node-kubernetes-cluster-with-minikube-on-your-local-machine-d5759342c7b2?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/step-by-step-guide-deploying-a-3-node-kubernetes-cluster-with-minikube-on-your-local-machine-d5759342c7b2?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/d5759342c7b2</guid>
            <category><![CDATA[nginx]]></category>
            <category><![CDATA[containers]]></category>
            <category><![CDATA[kubernetes-cluster]]></category>
            <category><![CDATA[minikube]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Tue, 28 Oct 2025 20:02:04 GMT</pubDate>
            <atom:updated>2025-10-28T20:02:04.938Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Importing OVA Files into Proxmox VE 9.x]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/importing-ova-files-into-proxmox-ve-9-x-a07f43d9d45f?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/2600/0*JZ8DT3a7jAnOX1-r" width="7008"></a></p><p class="medium-feed-snippet">While I typically build VMs from ISO images, or use Linux Containers (LXC)&#xA0;, there are times when importing an OVA appliance is the&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/importing-ova-files-into-proxmox-ve-9-x-a07f43d9d45f?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/importing-ova-files-into-proxmox-ve-9-x-a07f43d9d45f?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/a07f43d9d45f</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[importova]]></category>
            <category><![CDATA[wazuh]]></category>
            <category><![CDATA[virtualization]]></category>
            <category><![CDATA[proxmox-ve]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Thu, 14 Aug 2025 20:48:44 GMT</pubDate>
            <atom:updated>2026-05-18T14:09:39.719Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Host Your Own Chat Server with Zulip and Docker — No More Slack Fees & Full Control]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/host-your-own-chat-server-with-zulip-and-docker-no-more-slack-fees-full-control-ca140a49a665?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/1438/1*v62VZKLqvo7DwAAj_JRqYA.png" width="1438"></a></p><p class="medium-feed-snippet">If you like me who wants to have full control of his infrastructure and may be you tired of paying for Slack or worrying about your team&#x2019;s&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/host-your-own-chat-server-with-zulip-and-docker-no-more-slack-fees-full-control-ca140a49a665?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/host-your-own-chat-server-with-zulip-and-docker-no-more-slack-fees-full-control-ca140a49a665?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/ca140a49a665</guid>
            <category><![CDATA[information-technology]]></category>
            <category><![CDATA[self-hosted-chat-server]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[zulip]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Sun, 10 Aug 2025 13:16:37 GMT</pubDate>
            <atom:updated>2025-08-10T13:22:32.097Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to Deploy AWX 24.x on Rocky Linux 8: A Free Ansible Automation Platform Alternative]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/install-awx-24-x-5eee016a8e5d?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/600/1*Fpx4KW2ffpTj_9CtT1DbDg.png" width="600"></a></p><p class="medium-feed-snippet">If you found this article interesting, your support by following steps will help me spread the knowledge to others:</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/install-awx-24-x-5eee016a8e5d?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/install-awx-24-x-5eee016a8e5d?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/5eee016a8e5d</guid>
            <category><![CDATA[automation-tools]]></category>
            <category><![CDATA[devops-tool]]></category>
            <category><![CDATA[automation-software]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ansible]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Thu, 07 Aug 2025 22:21:42 GMT</pubDate>
            <atom:updated>2026-04-16T19:05:20.790Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Build Apache and Confluent Kafka Streaming Cluster With TLS/SSL Using Ansible]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/build-apache-and-confluent-kafka-streaming-cluster-with-tls-ssl-using-ansible-7ba33abb1803?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/2600/0*17HkWnaBPTbTcB2Z" width="3956"></a></p><p class="medium-feed-snippet">If you found this article interesting, your support by following steps will help me spread the knowledge to others:</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/build-apache-and-confluent-kafka-streaming-cluster-with-tls-ssl-using-ansible-7ba33abb1803?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/build-apache-and-confluent-kafka-streaming-cluster-with-tls-ssl-using-ansible-7ba33abb1803?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/7ba33abb1803</guid>
            <category><![CDATA[tls-ssl-security]]></category>
            <category><![CDATA[apache-kafka]]></category>
            <category><![CDATA[kafka]]></category>
            <category><![CDATA[ansible-automation]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Mon, 31 Mar 2025 19:04:16 GMT</pubDate>
            <atom:updated>2025-08-10T13:25:05.331Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Configuring MinIO Authentication Using Keycloak with Docker Compose]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/configuring-minio-authentication-using-keycloak-with-docker-compose-6eaefd31eb2d?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/690/1*gHqGZEzOe3aCjfjf7U4ZWw.png" width="690"></a></p><p class="medium-feed-snippet">If you found this article interesting, your support by following steps will help me spread the knowledge to others:</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/configuring-minio-authentication-using-keycloak-with-docker-compose-6eaefd31eb2d?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/configuring-minio-authentication-using-keycloak-with-docker-compose-6eaefd31eb2d?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/6eaefd31eb2d</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[data-storage]]></category>
            <category><![CDATA[keycloak-integration]]></category>
            <category><![CDATA[minio]]></category>
            <category><![CDATA[docker]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Sun, 23 Mar 2025 23:17:54 GMT</pubDate>
            <atom:updated>2025-08-10T14:08:26.263Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Bridging Detection and Visibility: Using MITRE ATT&CK Navigator & DeTT&CT for Threat Hunting]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://tamirsuliman.medium.com/bridging-detection-and-visibility-using-mitre-att-ck-navigator-dett-ct-for-threat-hunting-816f9dfca762?source=rss-8924b8f07383------2"><img src="https://cdn-images-1.medium.com/max/2600/0*vMt-ONShpG8eQ6Ny" width="4897"></a></p><p class="medium-feed-snippet">In the evolving landscape of cybersecurity, MITRE ATT&amp;CK Navigator and MITRE DeTT&amp;CT are two powerful tools that help security teams map&#x2026;</p><p class="medium-feed-link"><a href="https://tamirsuliman.medium.com/bridging-detection-and-visibility-using-mitre-att-ck-navigator-dett-ct-for-threat-hunting-816f9dfca762?source=rss-8924b8f07383------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://tamirsuliman.medium.com/bridging-detection-and-visibility-using-mitre-att-ck-navigator-dett-ct-for-threat-hunting-816f9dfca762?source=rss-8924b8f07383------2</link>
            <guid isPermaLink="false">https://medium.com/p/816f9dfca762</guid>
            <category><![CDATA[security-operation-center]]></category>
            <category><![CDATA[threat-hunting]]></category>
            <category><![CDATA[mitre-attack]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[information-security]]></category>
            <dc:creator><![CDATA[Tamir Suliman]]></dc:creator>
            <pubDate>Thu, 13 Mar 2025 19:28:48 GMT</pubDate>
            <atom:updated>2025-08-16T11:29:37.540Z</atom:updated>
        </item>
    </channel>
</rss>