Top Banner
1 Engineer / Technology Evangelist, SAKURA Internet, Inc. @ zembutsu 前佛 雅人 ZEMBUTSU Masahito 2017 9 22 ( ) Developers Summit 2017 KYUSYU Docker CE 最新動向 What’s new in Docker for Developers (2017 Fall version)
54

Docker最新動向2017秋+セキュリティの落とし穴

Jan 21, 2018

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Docker最新動向2017秋+セキュリティの落とし穴

1Engineer / Technology Evangelist, SAKURA Internet, Inc.@zembutsu 前佛 雅人 ZEMBUTSU Masahito

2017年9月22日(金) Developers Summit 2017 KYUSYU

Docker CEの最新動向等What’s new in Docker for Developers (2017 Fall version)

Page 2: Docker最新動向2017秋+セキュリティの落とし穴

2

Ingress Network(Ingress Load Balancer)

Routing Mesh

eth0 eth0 eth0

Bridge

Network

(Local)

Docker Engine “swarm mode”

Service Discovery

Page 3: Docker最新動向2017秋+セキュリティの落とし穴

とある事例

Docker Engine "swarm mode" (SwarmKit)≠ Docker Swarm・「簡単にアプリケーションを実行できる環境を提供」する目的・swarm mode はクラスタを簡単に組める、manager と worker の role・swarm モードではIngress Network と Routing mesh、サービスディスカバリ機能を持つ・swarm mode は docker stack / docker-compose に対応、その使い分けは用途に準じる・docker secret コマンドで、swarm mode でのシークレット管理・v3 format では、--linkやcompose fileの :links はレガシー(OWACON)→networks:の活用を・constraint: (条件)でデプロイ先サーバの制限

セキュリティは基本的だけれど、見落としている所がおおいかも・docker build 時の罠、見落としはありませんか?

今日の内容

Page 4: Docker最新動向2017秋+セキュリティの落とし穴

4

http://docs.docker.jp/

Page 5: Docker最新動向2017秋+セキュリティの落とし穴

5

Docker概要およびComposeについては、過去資料と重複のため、各URLをご確認願います

• Docker 17.06 Updates 最近何が変わったの?https://www.slideshare.net/zembutsu/whats-new-in-docker-2017-06-distribution-ver

• Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までhttps://www.slideshare.net/zembutsu/docker-compose-and-swarm-mode-orchestration

Page 6: Docker最新動向2017秋+セキュリティの落とし穴

6

事例:とあるクラウドのマニュアルサイトmanual.sakura.ad.jp

課題• 複数ページの同時更新が

できない(新機能リリース)• 変更履歴管理が雑• 階層構造が分かりづらい

Page 7: Docker最新動向2017秋+セキュリティの落とし穴

7

manual.sakura.ad.jp 更新の流れ(PR)

cloud マニュアル用リポジトリ

クラウドチーム

CSさんチーム

❷ドキュメント変更のPull Request作成

❶ git clone またはGitHub 上で編集

bot

お客さま

manual.sakura.ad.jp(GSLB)

manual-staging

/home/web/manual.sakura.ad.jp

#cloud-doument

❸push検出

❹Sphinx build

❺結果通知

❻確認

Jenkins

Page 8: Docker最新動向2017秋+セキュリティの落とし穴

8

manual.sakura.ad.jp 本番反映の流れ(Merge)

クラウドチーム

CSさんチーム

❶masterへのMerge

bot

お客さま

manual.sakura.ad.jp(GSLB)

manual-staging

/home/web/manual.sakura.ad.jp

#cloud-doument

nginx環境(社内環境のみ閲覧可)

Jenkins

❷push検出

❸Sphinx build

❺結果通知

❻確認

❹同期

Page 9: Docker最新動向2017秋+セキュリティの落とし穴

9

セキュリティの落とし穴

Page 10: Docker最新動向2017秋+セキュリティの落とし穴

10

コンテナはファイルシステムが分かれているのでパスワードなどを置いても問題ないですよね?

Page 11: Docker最新動向2017秋+セキュリティの落とし穴

11

コンテナはファイルシステムが分かれているのでパスワードなどを置いても問題ないですよね?

コンテナ間では互いのファイルを見えませんが、ホスト側からは見えます。

Page 12: Docker最新動向2017秋+セキュリティの落とし穴

12

$ docker run -it centosUnable to find image 'centos:latest' locallylatest: Pulling from library/centosDigest: sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8Status: Downloaded newer image for centos:latest[root@085d5f02743d /]# mkdir secret[root@085d5f02743d /]# echo 'himitsu' > secret/password.txt

[zem@docker ~]$ sudo find /var/lib/docker -name password.txt/var/lib/docker/overlay/d04efbadefe24a7a2238d943fc18e6036e01234fde1da9b7363c56f121f6de77/upper/secret/password.txt/var/lib/docker/overlay/d04efbadefe24a7a2238d943fc18e6036e01234fde1da9b7363c56f121f6de77/merged/secret/password.txt[zem@docker ~]$ sudo cat /var/lib/docker/overlay/d04efbadefe24a7a2238d943fc18e6036e01234fde1da9b7363c56f121f6de77/merged/secret/password.txthimitsu

Page 13: Docker最新動向2017秋+セキュリティの落とし穴

13

Docker Hub のリポジトリ上にあるイメージはどれを使っても安全ですよね?

Page 14: Docker最新動向2017秋+セキュリティの落とし穴

14

Docker Hub のリポジトリ上にあるイメージはどれを使っても安全ですよね?

残念ながら悪意を持ったイメージが存在しうる可能性があります。公式イメージ(official)以外を信用すべきではありません。

Page 15: Docker最新動向2017秋+セキュリティの落とし穴
Page 16: Docker最新動向2017秋+セキュリティの落とし穴

16

“automated build”されたイメージなので、安心して利用できます

Page 17: Docker最新動向2017秋+セキュリティの落とし穴

17

“automated build”されたイメージなので、安心して利用できます

残念ながら「automated build」に対応したリポジトリという意味でしかなく、自動ビルド後手動で push できてしまいます。

Page 18: Docker最新動向2017秋+セキュリティの落とし穴

18

NO ONE

TRUST

Page 19: Docker最新動向2017秋+セキュリティの落とし穴

19

ということは“automated build”イメージは、挙動を確認しようが無いということですか?

Page 20: Docker最新動向2017秋+セキュリティの落とし穴

20

ということは“automated build”イメージは、挙動を確認しようが無いということですか?

通常 Dockerfile が公開されています。自分で内容を確認の上、ビルドするのが幸せです。

Page 21: Docker最新動向2017秋+セキュリティの落とし穴

21

DockerHubとGitHubやBitBucket連携は面倒なので、使わなくてもいいですよね?

Page 22: Docker最新動向2017秋+セキュリティの落とし穴

22

DockerHubとGitHubやBitBucket連携は面倒なので、使わなくてもいいですよね?

一般的に”automated build”でないイメージは、Dockerfileが公開されておらず、信頼してはいけない(実行してはいけない)認識です。多くの人に使って頂きたいなら、連携すべきです。

Page 23: Docker最新動向2017秋+セキュリティの落とし穴

23

docker login後のdocker logout面倒です。残したままでもいいですよね?

Page 24: Docker最新動向2017秋+セキュリティの落とし穴

24

docker login後のdocker logout面倒です。残したままでもいいですよね?

他人と共用している、あるいはローカル以外では非常に危険です。~/.docker/config.json にログイン時に発行された認証トークンが残っています。全ての権限を他人に委ねる危険性があります。

Page 25: Docker最新動向2017秋+セキュリティの落とし穴

25

$ docker loginLogin with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.Username: <username>Password:Login Succeeded

$ cat ~/.docker/config.json{

"auths": {"https://index.docker.io/v1/": {

"auth": "emVtYnV1c3U6a2F0YW5hMjkyOSNS"}

}}

Page 26: Docker最新動向2017秋+セキュリティの落とし穴

26

Dockerfileの「ADD」はURLやZIPアーカイブも取得できるので、とても便利ですね!

Page 27: Docker最新動向2017秋+セキュリティの落とし穴

27

Dockerfileの「ADD」はURLやZIPアーカイブも取得できるので、とても便利ですね!

安全な環境以外では推奨されていません。通常は「COPY」で確実にローカルからコピーする方法が安全でしょう。

Page 28: Docker最新動向2017秋+セキュリティの落とし穴

28

ADD http://darkweb/akan.zip

COPY ./local/ /container/

Page 29: Docker最新動向2017秋+セキュリティの落とし穴

29

Dockerfileの「ENTRYPOINT」を指定しておけば、ログインさせず、かつ、指定コマンドしか実行させないコンテナを作れますね

Page 30: Docker最新動向2017秋+セキュリティの落とし穴

30

Dockerfileの「ENTRYPOINT」を指定しておけば、ログインさせず、かつ、指定コマンドしか実行させないコンテナを作れますね

いいえ、docker run 時に “--entrypoint” オプションで上書きできます。また、 “docker exec”コマンドでコンテナにプロセスをアタッチできます。

Page 31: Docker最新動向2017秋+セキュリティの落とし穴

31

イメージやコンテナの変更内容は追えないのですか?不便ですね。

Page 32: Docker最新動向2017秋+セキュリティの落とし穴

32

イメージやコンテナの変更内容は追えないのですか?不便ですね。

「docker history」や「docker diff」コマンドを活用しましょう。また、「docker inspect」で何のコマンドを実行するか、何番ポートを開こうとするのかも確認できます。

Page 33: Docker最新動向2017秋+セキュリティの落とし穴

33

$ docker history simplepot:latestIMAGE CREATED CREATED BY SIZE COMMENT0b9e5d88390d About an hour ago /bin/sh -c #(nop) CMD ["/usr/sbin/sshd" "... 0B 99d01bb57aa0 About an hour ago /bin/sh -c #(nop) EXPOSE 22/tcp 0B 8431c888c464 About an hour ago /bin/sh -c /usr/bin/ssh-keygen -q -t rsa -... 2.06kB d17fb17a5f1e About an hour ago /bin/sh -c echo "root:admin" | chpasswd 1kB fae9166d1392 About an hour ago /bin/sh -c yum -y install openssh-server 109MB 328edcd84f1b 13 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 13 days ago /bin/sh -c #(nop) LABEL name=CentOS Base ... 0B <missing> 13 days ago /bin/sh -c #(nop) ADD file:63492ba809361c5... 193MB

$ docker diff 9bC /runC /run/utmpC /varC /var/logC /var/log/lastlogC /var/log/wtmpD /root

Page 34: Docker最新動向2017秋+セキュリティの落とし穴

34

dockerグループのユーザであれば、誰でもdockerコマンドが操作できるので、便利ですね!

Page 35: Docker最新動向2017秋+セキュリティの落とし穴

35

dockerグループのユーザであれば、誰でもdockerコマンドが操作できるので、便利ですね!

事実上のrootです(一般ユーザもrootとしてコンテナのプロセスを実行可能なため)。便利ですが、利用時には細心の注意と理解が必要です。

Page 36: Docker最新動向2017秋+セキュリティの落とし穴

36

$ ls -al /var/run/docker.socksrw-rw---- 1 root docker 0 Aug 17 12:49 /var/run/docker.sock

Page 37: Docker最新動向2017秋+セキュリティの落とし穴

37

docker run 時にホスト側の機能を使いたいので/var/run/docker.sock をボリュームとしてマウントしても大丈夫ですよね?

Page 38: Docker最新動向2017秋+セキュリティの落とし穴

38

docker run 時にホスト側の機能を使いたいので/var/run/docker.sock をボリュームとしてマウントしても大丈夫ですよね?

コンテナ内でどのような処理を行うか確証が持てない限り、使うべきではありません。悪意が無くても、未知のバグが潜んでいる可能性があります。

Page 39: Docker最新動向2017秋+セキュリティの落とし穴

39

dockerコンテナは隔離して起動しているので、当然ネットワークも繋がっていませんよね。

Page 40: Docker最新動向2017秋+セキュリティの落とし穴

40

dockerコンテナは隔離して起動しているので、当然ネットワークも繋がっていませんよね。

デフォルトでは「docker0」ブリッジ・ネットワークに接続しています。ネットワークは動的な接続や接続解除が可能です。意図せずネットワークが繋がってしまい、名前解決上の問題が起こり得ます(負荷分散)

Page 41: Docker最新動向2017秋+セキュリティの落とし穴

41

firewalldやiptablesで制限をかけていれば、アクセス制御できるので安全ですよね。

Page 42: Docker最新動向2017秋+セキュリティの落とし穴

42

firewalldやiptablesで制限をかけていれば、アクセス制御できるので安全ですよね。

通常、特に制限なくホスト側とコンテナ側のポートがmappingされてしまいます。必要に応じて、ルールの追記が必要になる場合もあります。

Page 43: Docker最新動向2017秋+セキュリティの落とし穴

43

docker engine(dockerd)をリモートから制御するため、ポートをあけました。便利ですね。

Page 44: Docker最新動向2017秋+セキュリティの落とし穴

44

docker engine(dockerd)をリモートから制御するため、ポートをあけました。便利ですね。

特に何もしなければアクセス制御もかからなければ、暗号化もされず、認証もありません。確実に安全な環境である保証がなければ、サーバ/クライアント間でのTLS認証設定を有効化すべきです。

Page 45: Docker最新動向2017秋+セキュリティの落とし穴

45

NO ONE

TRUST

Page 46: Docker最新動向2017秋+セキュリティの落とし穴

46

コンテナな間で見えないファイルも、ホスト側からは見えるDocker Hub 上のリポジトリは安全ではない可能性がある残念ながら「automated build」も信頼すべきではないDockerfileを常に確認すべし共用環境ではdocker login、logoutをセットで忘れずにDockrfileで「ADD」は使うべきではないDockerfileの「ENTRYPOINT」は上書き可能docker history や docker diff 、docker inspectで詳細確認dockerグループに所属するユーザは、事実上のroot/var/run/docker.sockをマウントさせてはいけないdocker ネットワークは動的に接続・接続解除できるdocker はホスト側のfirewalld/iptablesの設定に関係なく、ポートをマッピングできるdockerd のリモート制御時は TLS 認証を有効にすべき

Page 47: Docker最新動向2017秋+セキュリティの落とし穴

47

振り返り

Page 48: Docker最新動向2017秋+セキュリティの落とし穴

技術と仕様Technology Specification

コンテナ Docker

isolateされたコンテナ状態のプロセスを起動するだから実行や移動が速い

Page 49: Docker最新動向2017秋+セキュリティの落とし穴

Docker CE (Community Edition) のバージョン変更・CentOS 系のパッケージはは「docker-engine」→「docker-ce」に変更(17.06移行)・Moby Project の誕生と、役割毎に各パーツが分散(○○Kit)

Docker Engine "swarm mode" (SwarmKit)≠ Docker Swarm・「簡単にアプリケーションを実行できる環境を提供」する目的・swarm mode はクラスタを簡単に組める、manager と worker の role・swarm モードではIngress Network と Routing mesh、サービスディスカバリ機能を持つ・swarm mode は docker stack / docker-compose に対応、その使い分けは用途に準じる・docker secret コマンドで、swarm mode でのシークレット管理・v3 format では、--linkやcompose fileの :links はレガシー(OWACON)→networks:の活用を・constraint: (条件)でデプロイ先サーバの制限

セキュリティは基本的だけれど、見落としている所がおおいかも・docker build 時の罠、見落としはありませんか?

Page 50: Docker最新動向2017秋+セキュリティの落とし穴

NO ONE

TRUST

Page 51: Docker最新動向2017秋+セキュリティの落とし穴

コンテナな間で見えないファイルも、ホスト側からは見えるDocker Hub 上のリポジトリは安全ではない可能性がある残念ながら「automated build」も信頼すべきではないDockerfileを常に確認すべし共用環境ではdocker login、logoutをセットで忘れずにDockrfileで「ADD」は使うべきではないDockerfileの「ENTRYPOINT」は上書き可能docker history や docker diff 、docker inspectで詳細確認dockerグループに所属するユーザは、事実上のroot/var/run/docker.sockをマウントさせてはいけないdocker ネットワークは動的に接続・接続解除できるdocker はホスト側のfirewalld/iptablesの設定に関係なく、ポートをマッピングできるdockerd のリモート制御時は TLS 認証を有効にすべき

Page 52: Docker最新動向2017秋+セキュリティの落とし穴

私からは以上です

ありがとうございました

Page 53: Docker最新動向2017秋+セキュリティの落とし穴

References

Announcing Docker 17.06 Community Edition (CE) - Docker Bloghttps://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/

Docker CE release notes | Docker Documentationhttps://docs.docker.com/release-notes/docker-ce/

Docker Success Center ( Knowledge Base, Reference Architecture )https://success.docker.com/

Page 54: Docker最新動向2017秋+セキュリティの落とし穴

何か気になる所がありますか?

ご参考:Docker 日本語ドキュメント

http://docs.docker.jp/

http://slideshare.net/zembutsutwitter: @zembutsu