security_optの未設定

既定の保護機能と、サービスに必要な追加の実行時セキュリティ設定を確認してください。

説明

security_optでは、AppArmor、SELinux、no-new-privilegesなどの実行時のセキュリティオプションを指定できます。

security_optを省略しても、対応する環境で既定のseccompやAppArmorプロファイルなどのDockerの保護機能が自動的に無効になるわけではありません。サービスに追加で必要な制御を明示すると、保守や確認がしやすくなります。

想定される影響

  • 必要な追加の保護設定がないと、サービスのセキュリティ要件を満たせない可能性があります。
  • サービスごとの実行時の制御を一貫して適用しにくくなります。
  • ホストの既定値が異なると、同じサービスでも保護の内容が変わる場合があります。

対処方法

  • サービスに必要なsecurity_optを明示してください。
  • 環境に合わせてno-new-privileges、AppArmor、SELinuxなどの設定を選び、適用してください。
  • 開発環境と本番環境でセキュリティオプションが異なる場合は、構成ファイルを分けて管理してください。

例

sample/webapp:latestを実際のイメージに置き換え、ホストが対象のオプションに対応していることを確認してください。

変更前

yaml
services:
  webapp:
    image: sample/webapp:latest
    ports:
      - "8080:8080"

変更後

yaml
services:
  webapp:
    image: sample/webapp:latest
    ports:
      - "8080:8080"
    security_opt:
      - no-new-privileges:true

説明:

  • 変更前: 追加のセキュリティオプションを明示していません。既定の保護機能が適用されるか、実際のランタイム設定を確認してください。
  • 変更後: no-new-privilegesは、setuidやファイルケーパビリティなどによってプログラムの実行時に新たな権限を得ることを防ぎます。すでに持っているroot権限やケーパビリティは削除しません。

参考資料