Docker Remote APIを安全に利用する

Oculus Go で目がヤバ。 概要 Docker には REST API があって、クライアントはそれを通してDockerを自在に操作できる。 「開発環境だから…」という気持ちで dockerd -H tcp://0.0.0.0:2376 みたいに動作させると、悪意あるサイトを閲覧するだけでコンテナの Shell が取られるみたいなことが発生するので、開発環境でも証明書を使った認証を行うなどしたほうが良い。 https://docs.docker.com/engine/security/https/ 悪用例 docker remote api tcp とかで検索すると以下のようなエントリがヒットする。 How do I enable the remote API for dockerd /usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 この設定はあまりよくなくて、例えば、悪意のあるサイトに以下のような JavaScript が設置されているとする。 var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://127.0.0.1:2376/containers/json', true); xhr.send(null); 上記の設定で Dockerd が動作している環境で、このような JavaScript が動作しているページへアクセスすると、当然ながらリクエストを処理してしまう。 なので、どのようなコンテナが動作しているかなど、 GET で取れる(というよりSOPで守られない)情報は取得される可能性がある。 Get a shell Docker Remote API は JSON を POST するAPIがある。例えばコンテナの作成などだ。