コンテナのセキュリティ原則

最小限の特権

最小限の特権の原則は、個人または組織が必要とする最小限のアクセスに制限することを指します。

電子商取引アプリケーションで商品検索を行うマイクロサービスがあるとします。最小特権の原則から、マイクロサービスは商品データベースへの読み取り専用のアクセスを与える認証情報のみを持つべきだと考えられます。マイクロサービスは、ユーザー情報や支払い情報などにアクセスする必要はなく、商品情報を書き込む必要もありません。

コンテナは、コンテナごとに異なる権限を与えることができ、それぞれが機能を果たすために必要な最小の権限セットに最小化されます。

深層防御

深層防御の原則では、保護の層を適用する必要があります。攻撃者が 1 つの防御を突破しても、別の層が攻撃者による配備の損傷やデータの流出を防ぐことができます。 コンテナを利用することでLinuxの多層防御に新しいセキュリティ境界を付加することが可能です。

攻撃対象の最小化

一般的なルールとして、システムが複雑であればあるほど、攻撃方法が存在する可能性が高くなると言われています。複雑さを解消することで、システムが攻撃されにくくなります。これには以下が含まれます。

  • 可能な限りインターフェイスを小さくシンプルにしてアクセスポイントを減らす。
  • サービスにアクセスできるユーザとコンポーネントを制限するコード量を最小限に抑える。

モノリシックサービスをマイクロサービスに分割することで、それらの間にクリーンなインターフェイスが形成されるため、慎重に設計することで複雑さが軽減され、アタックサーフェスが制限される可能性があります。一方で、コンテナを調整するために複雑なオーケストレーション層を追加すると、別の攻撃対象が発生するという反論もあります。(オーケストレータのAPIサーバなど)

影響範囲の制限

セキュリティ・コントロールをより小さなサブコンポーネントまたは「セル」に分割するというコンセプトは、最悪の事態が発生しても影響が限定されることを意味します。コンテナは、この原則に適しています。アーキテクチャをマイクロサービスの多数のインスタンスに分割することで、コンテナ自体がセキュリティ境界として機能するからです。 コンテナ化されたアプリケーションが脅威にさらされた場合、攻撃をコンテナ内に限定し、システムの他の部分に影響を与えないようにすることができます。

権限の分離

最小特権と爆発範囲の制限の両方に関連するのが、任務の分離という考え方です。これにより、可能な限り、異なるコンポーネントや人に、システム全体の中で必要な最小のサブセットに対する権限を与えることができます。このアプローチでは、特定の操作が複数のユーザーの権限を必要とするようにすることで、一人の特権ユーザーが与えるダメージを制限します。

認証情報などのシークレットは、それを必要とするコンテナにのみ渡すことができるため、ある秘密のセットが侵害されても、必ずしもすべての秘密が失われるわけではありません。 ただし、実際には、システム構成の不備や、コンテナイメージの構成ミス、不用意な操作によって、これらの利点が簡単に打ち消される可能性もあります。