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`)。