Published on

マネーフォワードのインターンでコンテナイメージ脆弱性検査

Authors

どうも、よしかわです。 9 月中旬に行われたマネーフォワードのインターンについて参加しましたので、忘れないうちにブログ記事にしていきます。

インフラチームで 2 週間ほど開発して得た知見が伝われば嬉しいです。

マネーフォワードについて

公式サイト(https://corp.moneyforward.com/)を見てもらうのが一番手っ取り早いです。

オフィス風景

三田オフィスの風景ですが、参考になれば光栄です。

気軽にくつろげる休憩場所があります。

workspace

ミートアップルームです(サウナ行きたい)

meetup room

インターンについて

期間は、9 月 15 日から 30 日までの 2 週間です。

職種は、インフラエンジニアとして採用されました。

就業型インターンなので、人事やエンジニアと面談をし、配属部署を決定しました。

配属部署

前述のように、サービス基盤本部のインフラ部に配属でした。 チームが 2 つあって、オンプレミス環境の保守・改善を手がけるチームとサーバのクラウド移行や改善を行うチームがあります。

今回は、僕がやりたいことを選んだので、クラウド移行や改善を行うチームのほうへ。

タスクについて

今回は、定期的にコンテナイメージ脆弱性検査を行う機構づくりをします。

マネーフォワードではアプリケーションをコンテナ化し、Amazon EKS(Elastic Kubernetes Service)を用いて動作しています。 CodeBuild, CodeDeploy を使った CI(Continuous Integration)/CD(Continuous Delivery)では、コードをアップロードした時に脆弱性スキャンが始まります。

しかしながら、コードを頻繁にアップロードしないサービスはどうでしょうか。 脆弱性スキャンが走らず、脆弱性のあるコンテナが 1 週間、1 ヶ月…とサービス運用に使われるケースもあるでしょう。

そのため、定期的にコンテナイメージ脆弱性検査を行う機構づくりをします

アーキテクチャと実装

最終構成

使用した技術は以下です。

  • AWS Fargate
  • AWS Lambda
  • Amazon SQS
  • Amazon DynamoDB
  • Amazon EventBridge

EKS 内の Kubernetes API にポッド情報を取得してきて、DynamoDB にポッドの情報を保存します。

次に、定期的にポッドの情報を取得し、キューに情報を送ります。

キューは、Lambda と紐づけていて、並列に脆弱性スキャンをかけるようにしました。

Fargate で Trivy コンテナを起動させ、脆弱性スキャンを行います。

脆弱性一覧は、DynamoDB に格納され、定期的に Slack に報告されます。(今回は、クリティカルとハイの脆弱性のみ報告)

タスク中に躓いたこと

タスクを遂行するために経験した失敗をまとめていきます。

AWS の知識がなかったので、最初のころは苦労をしました。 まず、IAM(Identity and Access Management)が独特だったこと。

一番躓いたことですが、脆弱性スキャンの Trivy でした。

Trivy ですが、最初は Lambda 上で動かそうとしていました。

しかしながら、Lambda だと実行ユーザが ROOT ユーザではないため、Trivy コマンドを実行出来ませんでした。

そこで、仕方なく Fargate 上に Trivy を動作させるアーキテクチャ構成になっています。

メンターと構成を考えました。

インフラ構成メモ

また、メンター以外にも、インフラチームに支えていただきました。本当に感謝しています。

これは、僕がインターン中にメモ書きしていたが、最終構成と違う仕様ですね…

メモ

ランチについて

ほぼ毎日、社員さんとご飯行ってました。

本当に美味しかったです。

ランチ画像1

msb Tamachi 田町ステーションタワー N のレストランはキレイでした。

ランチ画像2

参考文献

Trivy + AWS によるコンテナイメージ脆弱性検査パイプラインの構築 | クックパッド開発者ブログ

aquasecurity/trivy | GitHub.com

合わせて読みたい

楽天 インターンに参加しました

サイバーエージェント インターンに参加しました

Sansan のインターンで姓名分割

ZOZO テクノロジーズのインターンでリファクタリング支援ツール作成