【Security Hub修復手順】[ECS.5] ECS コンテナは、ルートファイルシステムへのアクセスを読み取り専用に制限する必要があります

AWS SecurityHub 基礎セキュリティのベストプラクティスコントロール修復手順をご紹介します。
2023.06.08

こんにちは、AWS事業本部の平井です。

皆さん、お使いのAWS環境のセキュリティチェックはしていますか?

当エントリでは、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介します。

本記事の対象コントロール

[ECS.5] ECS コンテナは、ルートファイルシステムへの読み取り専用アクセスに制限する必要があります

[ECS.5] ECS containers should be limited to read-only access to root filesystems

前提条件

本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容です。 AWS Security Hubの詳細についてはこちらのブログをご覧ください。

コントロールの説明

このコントロールは、Amazon ECS コンテナのルートファイルシステムが読み取り専用かどうかをチェックします。

Amazon ECS のタスク定義のReadonlyRootFilesystem パラメータが false の場合、このコントロールは失敗します。

このコントロールは、Amazon ECS タスク定義の最新のアクティブなリビジョンのみを評価します。

ReadonlyRootFilesystem を有効化すると、セキュリティ上、以下の利点があります。

  • コンテナ内のプロセスが意図せずにルートファイルシステムの変更を防止できます。
  • 不正なコンテナの攻撃やマルウェアの拡散を制限できます。

ただし、ReadonlyRootFilesystem を有効するに、以下の条件を満たす必要があります。

  • アプリケーション側でルートファイルシステムへの書き込みをしていないこと
  • 各種ミドルウェアや利用しているソフトウェアエージェントがルートファイルシステムへの書き込みをしていないこと
  • ECS Execを利用しないこと

ReadonlyRootFilesystem を有効にしたコンテナでは、ECS Exec を利用することはできません。

アプリケーションの動作に影響するため、有効化の際はStorageWriteBytesなどのメトリクスも確認しながら慎重に対応する必要があります。

ルートファイルシステムへの書き込みが必要な場合は、例えば以下の方法を使用して特定のパスのみ書き込みを許可できます。

  • Dockerfile に Volume を記述してマウントする
  • タスク定義の Bind mount を使用してマウントする
  • EFS を利用してマウントする

可能な限り対応することが望ましいですが、アプリケーションやエージェントの仕様によっては、ファイルシステムへの書き込みが避けられず、対応しない場合も考慮する必要があります。

修正手順

1 対象のリソースの確認方法

  1. AWSマネージメントコンソールにログインし、AWS 基礎セキュリティのベストプラクティス v1.0.0にて、「ECS.5」を検索します。タイトルを選択します。
  2. リソースの欄から失敗しているリソースを確認できます。

2 ステークホルダーに確認

ステークホルダー(リソースの作成者や管理している部署などの関係者)に以下の条件を満たせているか確認します。

  • アプリケーション側でルートファイルシステムへの書き込みをしていないこと
  • 各種ミドルウェアや利用しているソフトウェアエージェントがルートファイルシステムへの書き込みをしていないこと
  • ECS Execを利用しないこと

ReadonlyRootFilesystemを有効化する必要がないと判断がされた場合、コントロールは抑制済みにします

3 ReadonlyRootFilesystem 有効化

  1. 対象のタスク定義から、[JSON を使用した新しいリビジョンの作成]をクリックします
  2. containerDefinitions配下に、"readonlyRootFilesystem": trueを加えます
    修正前

    {
        "family": "nginx",
        "containerDefinitions": [
            {
                "name": "nginx",
                省略

    修正後

    {
        "family": "nginx",
        "containerDefinitions": [
            {
                "readonlyRootFilesystem": true,
                "name": "nginx",
                省略

  3. 作成したタスク定義のリビジョンを指定し、タスクを起動します。
    タスクが問題なく実行できていれば、成功です。

最後に

今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。

コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!

最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。

以上、平井でした!