【レポート】そこの Dockerfile 書いてるあなたちょっと待って、そのコンテナって安全ですか?DEV-01 #AWSSummit
こんにちは!ヌヌです。
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. 言語ランタイム導入済みのイメージ選択
- 専門家によって適化されたイメージを使用可能
- a. 自分で導入
イメージの変更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も一緒に行ったので説明しやすかったし、関連ツールも紹介されており開発の時、役に立ちそうです。
コンテナ初心者の方は是非セッション資料も併せて、本セッションをご覧下さい。