現在の設定は次のとおりです。
質問は:
ありがとう!
このモデルに欠点はありますか?
ボリュームをチェックせずにローリングベースでアプリケーションをデプロイする場合のオーバーヘッドとディスク領域の使用を除いて、直接的な欠点はありません。 「コンテナーが削除された後もDockerデータボリュームは存続します。」 Dockerのドキュメントを参照 。
ただし、長期的な欠点がいくつかある場合があります。たとえば、これを運用環境で実行している場合、セキュリティ更新をコンテナに適用する頻度はどれくらいですか。 Dockerイメージが上流から削除されたステップであることを考えると、セキュリティパッチは十分に速く展開されない可能性があります。どのくらいの頻度でコンテナの更新を確認し、それらを再デプロイしますか?
また、ifコンテナの1つが0wnedになった場合、送信接続をフィルタリングしますか?アプリの些細なエクスプロイトがボットネットの一部になった場合はどうなりますか?
どうすればより安全になりますか?
場合によります。ホストの/ procまたは/ sysを任意のコンテナーにマウントしますか?もしそうなら、 この種の攻撃 に注意してください(そして、楽しい読み取りのために「docker escape」を検索してください)
アプリケーションコンテナはどの程度攻撃にさらされていますか?
ネットワーク境界の外部からの攻撃については、アプリケーションがシステム上で通常のUNIXプロセスとして実行されているかのように公開されます。
奇妙なことに、他のコンテナーからの攻撃の場合、実際には攻撃面が増加します:一部のコンテナーが他のコンテナーを参照できると仮定します(たとえば、Webサーバーがdbサーバーを参照できる、またはログサーバーなど)、各コンテナが追加のサービスを実行しないことを確認する必要があります。最も重要なことは最新の状態に保つことです。
Dockerに関するセキュリティ上の考慮事項はありますか?
はい、しかし質問は広すぎます。コンテナ管理が不十分なため、Dockerエスケープがあります(例:マウント/proc
)。 Dockerの悪用の可能性があります。ローカルユーザーが攻撃することを許可する misconfiguration が時々あります。展開して忘れるような特効薬を探しているなら、あなたは失望するでしょう...
Web/appserverの前で軽量プロキシを実行するのは良い考えです。私はApache httpdの大ファンですが、プロキシとしてはあまり良い選択ではないと思います。それは軽量からはほど遠いので、あなたのアーキテクチャは大量のトラフィックに対処しません。私はnginxまたはATSまたはおそらくニスをお勧めします。しかし、ATSやvarnishのmodsecurityポートはなく、nginxバージョンはApacheモジュールほど安定していません。 3つすべてに代替WAFがあります。それらが適切かどうかは、WAFで何をしているのかによって異なります。
Lorenzogが言うように、Dockerイメージはパッチのリリースで遅れがちです。サーバーの構成、展開、およびパッチへの対応を提案する方法については言及していません。
すべてのデーモンは非特権ユーザーとして実行する必要があり、Linuxディストリビューションのすべての標準アプリケーションはrunを非ルートユーザーとして実行しますが、ほとんどのデーモンは、小さい番号のポートを取得するためにルートとして開始します。番号の大きいポートで非ルートとして起動し、iptablesを使用してポート変換を行うか、linuxの機能を使用して、番号の小さいポートをバインドするか、他の場所でポートマッピングを行う権限を委任できます。ただし、これには構成ファイルのいじりが含まれ、配布パッチとの競合につながる可能性があることに注意してください。
セットアップは異なる環境を十分に分離するので、1つのコンテナーの違反が別のコンテナーへのアクセスを与えないようにします。
チェックする必要があることの1つは、WebアプリケーションがDockerコンテナー内でrootとして実行されていないことです。 Webアプリケーションのコードは、通常のユーザーとして実行する必要があります。