【レポート】そこの Dockerfile 書いてるあなたちょっと待って、そのコンテナって安全ですか?DEV-01 #AWSSummit

2022.05.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!ヌヌです。

2022年5月25 - 26日の2日間で開催されているAWS Summit Online 2022のセッションレポートをしていきます。セッションのアーカイブも公開されますので、詳細はそちらをチェックしてください。

本記事は、「そこの Dockerfile 書いてるあなたちょっと待って、そのコンテナって安全ですか?(DEV-01)」のレポート記事となります。

※詳細についてはアーカイブセッションをご覧ください!

セッション概要

コンテナイメージ作成時の課題やより安全なコンテナイメージ作成のためのポイント、コンテナイメージ作成の補助ツールについてDemoしながらやってみましょう

スピーカー

  • AWS Cloud Application Architect 杉田 想土
  • AWS Cloud Application Architect 高橋 たま

セッションレベル

Level 200: 初級者向け

レポート

お客様の要望

  • Amazon ECS on Fargateを利用した Webサービスをリリースしたい
  • コンテナ開発の経験がないので、特にセキュリティやDockerファイルの作成について心配がある

持っている課題

  • コンテナセキュリティの全体像がよく分からない
  • 基盤チーム、開発チームなどDockerファイルの責任の所在が曖昧
  • Dockerファイルの改善

コンテナセキュリティの全体像

  • コンテナセキュリティの全体像に関しては、NIST SP800-190を参考すると理解できる

Dockerファイルの責任の所在が曖昧

  • Dockerファイル、ECSのタスク定義、ECSのサービス定義に関して、責任を範囲を明確化する必要がある

Dockerファイルの改善

  • より安全なコンテナイメージ
    • 必要最小限のコンポーネント
    • 必要最小限の権限
    • 脆弱性のあるコンポーネントの定期的にチェック
  • 「The Twelve俺たちのDockerfileベストプラクティス」参考

Dockerファイルの改善Demo

  • Cloud9でDemo進行
  • Docker imageビルド
  • preview機能で作ったimageを確認
  • 相対パス
    • WORKDIRで作業を行う場所を明示する
  •  最小のレイヤー
    • RUNをまとめる
    • yum clean all する
  •  COPYとADDコマンド
    • COPY: ただコピーするだけ
    • ADD: 他ファイルを展開、リモートからファイルを取ってくる
  • テスト環境と本番環境は同じimageを使っても大丈夫
    • アプリケーションの依存性を注意する必要はある
  • 権限は最小限でする
    • USERでルートじゃないユーザーを指定

ベースイメージOSの選択

  • 要件に応じて選ぶ
  • 言語ランタイム導入
    •  a. 自分で導入
      •  イメージを完全にコントロール可能
    •  b. 言語ランタイム導入済みのイメージ選択
      • 専門家によって適化されたイメージを使用可能

イメージの変更Demo

  • イメージタグを指定
  • ECR First
    • 公式イメージがECRからダウンロードできればそちらを優先する

コンテナイメージ作成の補助ツール

  • hadolint
    • Dockerfileの静的解析
  •  Dockle
    • コンテナイメージの静的解析

コンテナイメージの脆弱性スキャンツール

  • Trivy
    • OSパッケージと言語固有の依存関係に対するスキャン
    • Dockerfile含むIaCの静的解析
  •  Amazon ECR - イメージスキャン機能
    • イメージをpushしたタイミングや手動でOSSのCoreOS Clair projectを使用したスキャン(Basic scanning)
    • Amazon Inspectorによるプログラミング言語のパッケージを含めたスキャン(Enhanced scanning)

Dockerfileを使わないイメージ作成方法

  • Cloud native Buildpacks(CNB)
    • アプリケーションのソースコードをOCI準拠のコンテナイメージに変換可能
  •  Jib
    • Maven または Gradle プラグイン
  •  AWS App2Container
    • Dockerfile を含む一連のアーティファクトを出力
  •  AWS App Runner
    • コンテナ化されたWebアプリやAPIを簡単・迅速にデプロイ

最後に

私もコンテナについて知識がなかったので、非常に参考になりました。

特に、Demoも一緒に行ったので説明しやすかったし、関連ツールも紹介されており開発の時、役に立ちそうです。

コンテナ初心者の方は是非セッション資料も併せて、本セッションをご覧下さい。