Introduction

As organizations deploy AI at scale in 2026, AI security has become its own platform category. Gartner lists AI security platforms as a top strategic trend. Ansible automates the security hardening of AI infrastructure: model access controls, GPU isolation, prompt injection defenses, data pipeline security, and compliance scanning.

AI Security Threat Surface

ThreatRiskAnsible Mitigation
Model theftStolen weights/IPFile permissions, network isolation
Prompt injectionUnauthorized actionsWAF rules, input validation
Data poisoningCorrupted training dataPipeline integrity checks
GPU side-channelCross-tenant data leakGPU isolation, MIG config
Model supply chainMalicious model filesHash verification, scanning
Inference API abuseDDoS, cost explosionRate limiting, authentication

Secure Model Storage

- name: Secure AI model storage
  hosts: model_servers
  become: true
  vars:
    model_dir: /opt/models
    model_user: ml-inference
    model_group: ml-team

  tasks:
    - name: Create dedicated model service account
      ansible.builtin.user:
        name: "{{ model_user }}"
        system: true
        shell: /usr/sbin/nologin
        groups: "{{ model_group }}"

    - name: Set strict model directory permissions
      ansible.builtin.file:
        path: "{{ model_dir }}"
        state: directory
        owner: "{{ model_user }}"
        group: "{{ model_group }}"
        mode: "0750"
        recurse: true

    - name: Configure immutable model files
      ansible.builtin.command: "chattr +i {{ item }}"
      loop: "{{ model_files }}"
      when: lock_models | default(false)

    - name: Set up model integrity monitoring
      ansible.builtin.template:
        src: aide-models.conf.j2
        dest: /etc/aide/aide.conf.d/models.conf
      notify: Reinitialize AIDE

    - name: Verify model checksums
      ansible.builtin.stat:
        path: "{{ item.path }}"
        checksum_algorithm: sha256
      loop: "{{ expected_models }}"
      register: model_checksums

    - name: Alert on model tampering
      ansible.builtin.fail:
        msg: "Model tampered: {{ item.item.path }} expected {{ item.item.sha256 }} got {{ item.stat.checksum }}"
      loop: "{{ model_checksums.results }}"
      when: item.stat.checksum != item.item.sha256

GPU Isolation (NVIDIA MIG)

- name: Configure GPU isolation for multi-tenant AI
  hosts: gpu_servers
  become: true
  tasks:
    - name: Enable MIG mode on A100/H100
      ansible.builtin.command: nvidia-smi -i {{ item }} -mig 1
      loop: "{{ range(gpu_count | int) | list }}"
      register: mig_result
      changed_when: "'Enabled' in mig_result.stdout"

    - name: Create GPU instances (isolate tenants)
      ansible.builtin.shell: |
        # Create 3 isolated GPU instances on GPU 0
        nvidia-smi mig -i 0 -cgi 19,19,19 -C
      args:
        creates: /proc/driver/nvidia/gpu-instances

    - name: Verify MIG configuration
      ansible.builtin.command: nvidia-smi mig -lgi
      register: mig_status
      changed_when: false

    - name: Display GPU instances
      ansible.builtin.debug:
        msg: "{{ mig_status.stdout_lines }}"

API Gateway Security

- name: Secure AI inference API
  hosts: api_gateway
  become: true
  tasks:
    - name: Deploy rate limiting for inference API
      ansible.builtin.template:
        src: nginx-ai-security.conf.j2
        dest: /etc/nginx/conf.d/ai-security.conf
      notify: Reload Nginx

    - name: Configure WAF rules for prompt injection
      ansible.builtin.copy:
        content: |
          # Block common prompt injection patterns
          SecRule ARGS "@rx (?i)(ignore previous|disregard|forget your|you are now|system prompt)" \
            "id:100001,phase:2,deny,status:403,msg:'Prompt injection attempt'"

          SecRule ARGS "@rx (?i)({{.*}}|<script|javascript:)" \
            "id:100002,phase:2,deny,status:403,msg:'Template injection attempt'"

          # Limit input length
          SecRule ARGS_COMBINED_SIZE "@gt 10000" \
            "id:100003,phase:2,deny,status:413,msg:'Input too large'"
        dest: /etc/modsecurity/rules/ai-protection.conf
      notify: Reload Nginx

    - name: Set up API authentication
      ansible.builtin.template:
        src: ai-api-auth.conf.j2
        dest: /etc/nginx/conf.d/ai-auth.conf
      no_log: true
      notify: Reload Nginx

Nginx template:

{# templates/nginx-ai-security.conf.j2 #}
# Rate limiting zones
limit_req_zone $binary_remote_addr zone=inference:10m rate=10r/s;
limit_req_zone $http_x_api_key zone=per_key:10m rate=100r/s;

# Connection limits
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    listen 443 ssl;
    server_name api.{{ domain }};

    # Rate limit inference endpoint
    location /v1/chat/completions {
        limit_req zone=inference burst=20 nodelay;
        limit_req zone=per_key burst=50 nodelay;
        limit_conn addr 10;

        # Request size limit (prevent large prompt attacks)
        client_max_body_size 1m;

        # Timeout for long-running inference
        proxy_read_timeout 120s;

        proxy_pass http://inference_backend;
    }
}

AI Data Pipeline Security

- name: Secure AI data pipelines
  hosts: data_servers
  become: true
  tasks:
    - name: Encrypt training data at rest
      community.crypto.luks_device:
        device: /dev/sdb
        state: present
        keyfile: /root/.keys/training-data.key
      no_log: true

    - name: Mount encrypted training data
      ansible.posix.mount:
        path: /data/training
        src: /dev/mapper/training-data
        fstype: ext4
        state: mounted

    - name: Set training data permissions
      ansible.builtin.file:
        path: /data/training
        owner: ml-pipeline
        group: ml-team
        mode: "0750"
        recurse: true

    - name: Configure data access audit logging
      ansible.builtin.template:
        src: auditd-ml-data.rules.j2
        dest: /etc/audit/rules.d/ml-data.rules
      notify: Restart auditd

    - name: Enable data lineage tracking
      ansible.builtin.cron:
        name: "ML data integrity check"
        hour: "2"
        minute: "0"
        job: "sha256sum /data/training/**/*.parquet > /var/log/ml-data-hashes.log 2>&1"

Model Supply Chain Security

- name: Secure model downloads
  hosts: model_servers
  become: true
  tasks:
    - name: Configure Hugging Face model scanning
      ansible.builtin.pip:
        name:
          - huggingface_hub
          - safety-checker
        virtualenv: /opt/ml-security/venv

    - name: Scan downloaded models for malicious code
      ansible.builtin.shell: |
        source /opt/ml-security/venv/bin/activate
        python -c "
        from huggingface_hub import scan_cache_dir
        import json
        cache = scan_cache_dir()
        for repo in cache.repos:
            print(json.dumps({'repo': repo.repo_id, 'size': repo.size_on_disk}))
        "
      register: model_scan
      changed_when: false

    - name: Block pickle-based models (security risk)
      ansible.builtin.copy:
        content: |
          # Reject unsafe serialization formats
          SAFETENSORS_ONLY=1
          TRANSFORMERS_NO_PICKLE=1
        dest: /etc/environment.d/ml-security.conf

Compliance Scanning

- name: AI compliance audit
  hosts: all
  become: true
  tasks:
    - name: Check for unencrypted model files
      ansible.builtin.find:
        paths: [/opt/models, /data/models]
        recurse: true
        size: "+100m"
      register: large_models

    - name: Verify model access controls
      ansible.builtin.stat:
        path: "{{ item.path }}"
      loop: "{{ large_models.files }}"
      register: model_perms

    - name: Flag overly permissive model files
      ansible.builtin.debug:
        msg: "⚠️ {{ item.item.path }} is world-readable ({{ item.stat.mode }})"
      loop: "{{ model_perms.results }}"
      when: item.stat.mode is match('.*[4567]$')

    - name: Generate AI security compliance report
      ansible.builtin.template:
        src: ai-compliance-report.j2
        dest: "/tmp/ai-security-{{ inventory_hostname }}-{{ ansible_date_time.date }}.json"
      delegate_to: localhost

Conclusion

AI security in 2026 requires automating six layers: model storage security (permissions, integrity), GPU isolation (MIG), API gateway protection (rate limiting, WAF for prompt injection), data pipeline encryption (LUKS, audit trails), model supply chain security (scanning, SafeTensors-only), and compliance validation. Ansible handles all of these as code — repeatable, auditable, and enforceable across your entire AI infrastructure. The organizations that treat AI security as automation (not checklists) will be the ones that scale safely.