AppArmorとは?
AppArmor(Application Armor)は、Linuxカーネルのセキュリティモジュール(LSM: Linux Security Modules)の一つで、システム上のプログラム(アプリケーション)ごとにアクセス権限を制限する「強制アクセス制御(MAC: Mandatory Access Control)」機能を提供します。
従来のLinuxのファイル権限(DAC: 任意アクセス制御)では、ユーザーが許可されていれば、そのユーザーが実行するすべてのプログラムが同じ権限を持ちます。しかし、AppArmorを使用すると、「Webサーバーはこのディレクトリしか読み込めない」「PDFリーダーはネットワークに接続できない」といった、アプリケーション単位での細かい制限が可能になります。
AppArmorの仕組みと特徴
AppArmorは「プロファイル」と呼ばれる設定ファイルを使用して、各アプリケーションの振る舞いを定義します。プロファイルはテキスト形式で記述され、`/etc/apparmor.d/` ディレクトリに保存されます。
- パスベースの制御: ファイルのパス(場所)に基づいてアクセスを許可・拒否します。これはi-nodeベースのSELinuxと比較して、直感的で管理しやすいという特徴があります。
- 学習モード(Complain Mode): 実際のブロックを行わずに、違反ログのみを記録するモード。このログを元にプロファイルを自動生成することができます。
- 強制モード(Enforce Mode): プロファイルに基づいて実際にアクセスをブロックし、違反をログに記録します。
SELinuxとの違い
LinuxのMAC機能として双璧をなすのがSELinuxです。
| 機能 | AppArmor | SELinux |
|---|---|---|
| 採用ディストリビューション | Ubuntu, Debian, SUSE | RHEL, CentOS, Fedora |
| 制御方式 | パスベース(ファイル名) | ラベルベース(i-node) |
| 難易度 | 比較的容易・直感的 | 複雑・学習コストが高い |
最新動向とAI・コンテナセキュリティ
近年のクラウドネイティブ環境において、AppArmorの重要性はさらに増しています。
コンテナセキュリティの要
DockerやKubernetes環境では、コンテナの分離を強化するためにAppArmorがデフォルトで利用されています。例えば、Dockerはデフォルトで「docker-default」というAppArmorプロファイルをコンテナに適用し、危険な操作を制限しています。Kubernetesでも、PodごとにセキュリティコンテキストとしてAppArmorプロファイルを指定することが推奨されています(Kubernetes v1.30でAppArmorサポートがGAとなりました)。
AIエージェント開発での体験談
私がAIエージェントの開発環境を構築していた際、エージェントが生成したコードをサンドボックス内で実行させる機能の実装でAppArmorを活用しました。エージェントが意図せずシステムファイルを読み書きしようとした際、AppArmorプロファイルが即座にそれをブロックし、システム全体の安全性を担保してくれました。AIが自律的に動く時代だからこそ、最後の砦としてのカーネルレベルのセキュリティは必須です。
よくあるトラブルと対処法
「正常なアプリが動かない」という場合、まずAppArmorを疑う必要があります。
- 現象: 特定のファイルに書き込めない、ネットワークにつながらない、サービスが起動しない。
- 確認方法: `dmesg` コマンドや `/var/log/syslog`(または `/var/log/audit/audit.log`)を確認し、"apparmor="DENIED"" というログが出ていないかチェックします。
- 対処: プロファイルを修正するか、一時的に学習モード(Complain Mode)に切り替えて動作を確認します(`aa-complain /path/to/binary`)。