orangeitems’s diary

40代ITエンジニアが毎日何か書くブログ

コンテナ時代のセキュリティーをどう確保していくかを考えなければいけない時期が来ている

f:id:orangeitems:20181102002958j:plain

 

ファミコンっぽいコンテナの世界

最近コンテナ、Docker、Kubernetesと流行に触れたことにより肌で感じたことがあります。

・イメージ=ファミコンのカセット

・コンテナ=ゲーム

・docker=ファミコン

・永続ストレージ=ディスクシステム+ディスク

例えがアレで申し訳ないのですが、イメージをダウンロードしてコンテナとしてdockerの上で動かすというのは、まさにゲームショップからファミコンのカセットを買ってきて、ファミコンに刺して電源を上げるとゲームがすぐ始まるのとそっくりなわけです。

で、Kubernetesを使うといわゆるデータセンターやクラウドのような本番環境で動かすことができるようになります。

この「ファミコンのカセット」とはよく言ったもので、ファミコンの電源を止めるとゲームのレコードは全部消えてしまいます。コンテナも止めるとプログラムが保管していたデータは消えます。ですから、ファミコンにディスクシステム(永続ストレージ)を付けて保管してやらない限りゲームは初期化されます。

一方で、VMware、Hyper-V、XenやKVMなどに代表される仮想マシンは、パソコン自体を抽象化したもので、BIOSを起動して、次にOSを起動して・・と言うことをやらねばならず、「Now Loading・・」が長いと言えます。

 

電源付けたらすぐ立ち上がる

仮想ファミコンのカセット vs 仮想パソコン。そりゃあ前者の方が軽いよねということで、実際に軽いです。Docker Hubというファミコンカセットの置き場には、公式から非公式までたくさんのカセットが置いてあります。選んで、ダウンロードして、ファミコンの突っ込んで起動すればすぐにゲームが始まります。

ファミコンのカセットより秀逸なのは、ゲームを起動していろいろ変更したら、その状態で新しいファミコンのカセットを作れてしまうのですね。そうやってどんどんカセットは増殖しています。

Docker Hubで、「CENTOS7」で今検索したら、6546種類ありました。Centos7に何かプログラムを載せてイメージ化するからこんなにたくさんあるようです。

プログラムが動くOSごとまとめて固めて、VMのイメージにするよりはるかに楽にイメージ化できるので、特に開発者中心に開発環境構築目的でDockerは結構な現場で使われるようになっているのでは?と思います。

 

さて、カセットの中には何が入っているんだろうという視点

あまりにも簡単にカセットを手に入れられる時代。有名なイメージを落としてコンテナとして動かしアプリケーションを構築しカスタムイメージを作成。

このカスタムイメージは、パブリックレジストリや会社専用のプライベートレジストリに保管しておき、他の開発メンバーもそれをダウンロードして開発する。そんなことが日常茶飯事となった今、このイメージにマルウェアが混入していないかというのは非常に大事なはずです。しかし、OSにウイルス対策ソフトを入れるような「常識レベルの対策」がまだ用意されていないのが今のコンテナ周りのウィークポイントだと思います。いわゆる、「ウイルス付きイメージ」が流通している可能性があります。また、「仮想通貨をマイニングするツールを隠して開発環境イメージとしてアップロードしておく」とか、「コンテナ内の秘密鍵的なものを第三者のサーバーにアップロードする」とか、ふるまいレベルで監視しないとコンテナというものは危険に晒されている可能性があります。

 

・・・ということを、この記事を見ながら思いました。

cloud.watch.impress.co.jp

 

私の例えを読んだ後に、上記の記事を読むとわかりやすいと思います。今は牧歌的なコンテナの世界だし、まだまだローカルのdockerで開発環境ベースでしか使われていないので大きな問題は起きていませんが、もっと一般化し始めると、本当に信頼すべきイメージか、何かおかしいことをしていないか、うっかり秘密情報を入れ込んだままイメージを作ってしまったのではないか、などたくさんの観点を必要とするようになると思います。

コンテナは便利なものですが、パソコンにしろスマホにしろ、最終的にはセキュリティー対策が必要となりました。コンテナの世界もdockerやKubernetesが標準でサポートするのかそれとも上記のようなサービスが担うのかわかりませんが、必要ですね。

コンテナはとても便利だからこそ、セキュリティー確保の話題には注目していきたいと思います。

 

Docker/Kubernetes 実践コンテナ開発入門