16. Security Checklist Project
This chapter provides a practical exercise: create a security checklist for your local AI deployment. The checklist serves as both an implementation guide and an audit tool.
Build your checklist:
Step 1: Inventory assets
List every component in your AI stack: models, APIs, data stores, network connections, and dependencies. For each asset, note: sensitivity level, owner, and last review date.
Step 2: Map controls
For each asset, document which security controls apply. Use categories:
- Access control (authentication, authorization)
- Data protection (encryption, masking, retention)
- Network security (firewalls, segmentation)
- Monitoring (logging, alerting)
- Resilience (backups, redundancy)
Step 3: Define checks
Convert controls into verifiable checks. "API should require authentication" becomes "Verify unauthenticated requests return 401".
Example checklist structure:
# ai-security-checklist.yaml
meta:
created: "2024-05-29"
owner: [email protected]
review_frequency: monthly
categories:
- name: Access Control
checks:
- id: AC-001
description: All AI API endpoints require authentication
test: "curl -s http://localhost:11434/api/tags | grep -q '401'"
frequency: weekly
last_run: null
status: pending
- id: AC-002
description: API keys rotate at least every 90 days
test: "Check key creation dates in secrets store"
frequency: monthly
last_run: null
status: pending
- id: AC-003
description: Principle of least privilege for service accounts
test: "Audit service account permissions quarterly"
frequency: quarterly
last_run: null
status: pending
- name: Data Protection
checks:
- id: DP-001
description: Sensitive data encrypted at rest
test: "Verify LUKS/cryptsetup status for data volumes"
frequency: weekly
last_run: null
status: pending
- id: DP-002
description: Data retention policies enforced
test: "Check automated cleanup jobs execute successfully"
frequency: daily
last_run: null
status: pending
- id: DP-003
description: GDPR/CCPA consumer request capability
test: "Test deletion request flow in staging"
frequency: quarterly
last_run: null
status: pending
- name: Network Security
checks:
- id: NS-001
description: Default deny firewall policy active
test: "sudo iptables -L | grep -E 'Chain (INPUT|FORWARD).*policy DROP'"
frequency: weekly
last_run: null
status: pending
- id: NS-002
description: No AI services exposed to public internet
test: "nmap -Pn -p 11434,8080 YOUR_EXTERNAL_IP 2>/dev/null | grep -q '0 hosts up'"
frequency: weekly
last_run: null
status: pending
- id: NS-003
description: TLS configured for all external API access
test: "openssl s_client -connect localhost:11434 </dev/null 2>&1 | grep -q 'Protocol.*TLS'"
frequency: monthly
last_run: null
status: pending
- name: Monitoring
checks:
- id: MN-001
description: Audit logs capture authentication events
test: "grep 'authentication' /var/log/ai-audit.log | tail -1"
frequency: daily
last_run: null
status: pending
- id: MN-002
description: Alerts configured for anomalous API usage
test: "Check alert configuration against runbook"
frequency: monthly
last_run: null
status: pending
- name: Model Security
checks:
- id: MS-001
description: Model integrity verified before loading
test: "sha256sum $(ollama list --format '{{.Name}}:{{.Size}}') | compare to inventory"
frequency: weekly
last_run: null
status: pending
- id: MS-002
description: No unauthorized models loaded
test: "Compare ollama list to approved model inventory"
frequency: weekly
last_run: null
status: pending
- id: MS-003
description: Prompt injection detection active
test: "Send test injection payload, verify rejection or redaction"
frequency: monthly
last_run: null
status: pending
Automate checklist execution:
#!/bin/bash
# run-security-checklist.sh
CHECKLIST="./ai-security-checklist.yaml"
REPORT="/var/log/security-checklist-$(date +%Y%m%d).log"
echo "Running AI Security Checklist - $(date)" > "$REPORT"
while IFS= read -r check; do
id=$(echo "$check" | yq '.id')
desc=$(echo "$check" | yq '.description')
test_cmd=$(echo "$check" | yq '.test')
echo -n "Checking $id: $desc ... " >> "$REPORT"
if eval "$test_cmd" >/dev/null 2>&1; then
echo "PASS" >> "$REPORT"
else
echo "FAIL" >> "$REPORT"
fi
done < <(yq '.categories[].checks[]' "$CHECKLIST")
echo "Checklist complete. See $REPORT"
Conclusion
Securing local AI deployments requires deliberate architecture and ongoing maintenance. The controls in this course—authentication, network hardening, data isolation, compliance mapping, and incident response—form a foundation. Implement incrementally: start with authentication and network controls, then add monitoring, then address compliance requirements.
Security is never "done." Threat actors adapt, vulnerabilities emerge, and your deployment evolves. Build review cycles into your operations: monthly checklist execution, quarterly threat model updates, annual compliance reviews. Document everything so that when incidents occur—or when auditors arrive—you can demonstrate due diligence.
The advantage of local AI security is control. You own the infrastructure, the data, and the update cycles. Use that control to implement defense-in-depth: multiple layers that protect each other. A single control failure should not compromise your entire deployment.
Begin with the checklist project in Chapter 16. Know your current state. Identify gaps. Prioritize fixes. Repeat.
Create your own security checklist based on the categories above (or additional ones relevant to your setup). Populate it with 3-5 checks per category. Execute at least 10 checks this week and document results. Review your checklist quarterly and update as your deployment evolves.
Conclusion
Securing local AI deployments requires deliberate architecture and ongoing maintenance. The controls in this course—authentication, network hardening, data isolation, compliance mapping, and incident response—form a foundation. Implement incrementally: start with authentication and network controls, then add monitoring, then address compliance requirements.
Security is never "done." Threat actors adapt, vulnerabilities emerge, and your deployment evolves. Build review cycles into your operations: monthly checklist execution, quarterly threat model updates, annual compliance reviews. Document everything so that when incidents occur—or when auditors arrive—you can demonstrate due diligence.
The advantage of local AI security is control. You own the infrastructure, the data, and the update cycles. Use that control to implement defense-in-depth: multiple layers that protect each other. A single control failure should not compromise your entire deployment.
Begin with the checklist project in Chapter 16. Know your current state. Identify gaps. Prioritize fixes. Repeat. ```