コンテンツにスキップ

Kubernetes の 4C モデルで整理する ECS Fargate のサプライチェーン攻撃対策

チェック

  • [ ] 本文を確認した
  • [ ] 概要を確認した
  • [ ] タグを確認した
  • [ ] inbox/ 直下へ移行した

概要

Kubernetesの4Cセキュリティモデルを借りて、ECS Fargate環境のサプライチェーン攻撃対策を整理した記事。 Cloud、Cluster、Container、Codeの各レイヤーに対して、予防、検知、封じ込め、調査の観点でチェックシート化している。 GitHub ActionsのSHA pinning、ベースイメージdigest pinning、ECR immutability、Egress制限、read-only root filesystem、CloudTrailなど、ECS運用でそのまま確認できる項目が多い。

本文

2つの整理軸

記事は、サプライチェーン攻撃対策をいきなり全部洗い出すのではなく、Kubernetesの4Cモデルで整理している。

  • Cloud: クラウド基盤
  • Cluster: オーケストレーター
  • Container: コンテナランタイム
  • Code: アプリケーション

さらに目的を、予防、検知、封じ込め、調査に分ける。

予防

Cloud: VPC Endpoint

AWSサービスへの通信をインターネット経由ではなくVPC内で完結させる。

防げること:

  • 侵害されたタスクから外部AWSアカウントへのデータ持ち出し
  • マルウェア感染後のC2通信や情報送信
  • 漏洩したIAM認証情報による外部からの不正アクセス

設定のポイント:

  • S3 Gateway Endpointは必須
  • ECR、SSM、Secrets Manager、CloudWatch LogsのInterface Endpointを検討
  • Endpoint Policyで aws:PrincipalAccount を制限
  • リソース側ポリシーで aws:SourceVpce を指定

Cluster: CI/CDパイプラインのハードニング

GitHub Actionsのサードパーティアクションは、タグやブランチではなくcommit SHAで固定する。 タグは後から書き換え可能で、tj-actions/changed-files事件のように人気アクションのタグが悪意あるコミットへ向け直されることがある。

# Before
- uses: actions/checkout@v4

# After
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11

あわせて、Dependabot / RenovateでSHA更新を自動化し、permissions: でGITHUB_TOKEN権限を最小化し、AWS認証はOIDCへ寄せる。

Container: digest pinningとECR immutability

Dockerfileのベースイメージはタグだけではなくdigestで固定する。

# Before
FROM ruby:3.3.0-bookworm

# After
FROM ruby:3.3.0-bookworm@sha256:2e1e76e5b2...

digest pinningにより、タグが上書きされても意図しないイメージを引かない。 ECRではタグを上書き不可にするimmutabilityも有効化する。

検知

Security Hub、Inspector、GuardDuty、CIスキャン、ECR Enhanced Scanningなどを組み合わせる。

コンテナイメージスキャンは、OSパッケージレイヤーの攻撃や既知脆弱性を検出する要になる。 CIでのビルド時スキャンと、レジストリ側の継続スキャンを組み合わせる。

代表的な方法:

  • Trivy / GrypeなどのOSSスキャナ
  • Amazon Inspector SBOM Generator + Inspector Scan API
  • ECR Enhanced Scanning

SCAはBundlerやnpmなどアプリ依存パッケージ領域を見て、OSパッケージはイメージスキャンで見る。 ua-parser-jsのようなnpm乗っ取りはSCA、xz-utilsのようなOSパッケージバックドアはイメージスキャン、という切り分け。

封じ込め

侵入された前提で、被害範囲を小さくする。

Egress制限

コンテナからのアウトバウンド通信を必要最小限にする。

  • AWS Network FirewallでFQDNベースの許可リスト
  • Route 53 DNS Firewallで悪性ドメインをブロック
  • Security Groupで不要なポート・宛先を塞ぐ

IAMロール分離

ECSの実行ロールとタスクロールを分離する。

  • 実行ロール: ECR pull、CloudWatch Logs、SSMパラメータ取得
  • タスクロール: アプリケーションが必要とする権限のみ

侵害時の横移動を防ぐため、タスクロールにECR pushなど不要な書き込み権限がないか確認する。

readonlyRootFilesystem / capabilities / 非root

本番タスクでは readonlyRootFilesystem: true とECS Exec無効化を検討する。 ただし、read-only root filesystemはECS Execと両立しないため、調査用サービスとは分ける。

Linux capabilitiesは drop: ["ALL"] を設定し、コンテナプロセスは非rootで実行する。

調査

インシデント後に何が起きたかを追える状態にする。

  • CloudTrailでAWS API操作を追跡する
  • S3 Object Lockで監査ログの改ざん・削除を防ぐ
  • ECR push、IAM変更、ECSタスク定義変更を追えるようにする
  • SBOMを保存し、影響範囲調査に使えるようにする

要点

  • ECS FargateでもKubernetesの4Cモデルは、防御範囲を整理する道具として使える。
  • サプライチェーン攻撃対策は、予防だけでなく検知、封じ込め、調査まで含めて設計する。
  • SHA pinning、digest pinning、ECR immutability、OIDC、最小権限、Egress制限は実務チェックリストに入れる。
  • read-only root filesystemとECS Execのように、セキュリティ設定同士のトレードオフも確認する。

タグ

security #supply-chain #ecs #fargate #container-security #ci-cd #aws