‫さて､
‫それでは1.の新機能は？ 13. 1は秘密のフルサポートでした｡
‫これは何かというと､ 基本的には「Swarmに秘密を保存するための最も簡単で安全なソリューション」というキャッチフレーズを作る必要があります｡
‫Swarmに組み込まれていて､
‫すぐに使えるし､ 使うために必要なことは何もないので､ 一番簡単だと言っているんです｡
‫スウォームを初期化し､
‫バージョン1である限り｡ 13以降なら秘密がある｡
‫私が安全だと言うのは､
‫ディスク上で暗号化され､ 転送中も暗号化され､ 必要な場所にしか使えないように､ 一から設計されているからです｡
‫そして､ それが本当に必要なことなのです｡
‫では､ 秘密とは何でしょうか？ 秘密というのは､ この場合､ 新聞の一面に載せたくないものを分類することです｡
‫一面に掲載され､
‫それを変更しに行かなければならないのであれば､ それは秘密です｡
‫ユーザー名やパスワード､
‫TLS証明書やそのキー､ SSHキー､
‫TwitterのAPIキー､
‫Amazonのキーなど､ モノ同士の接続に必要なものはすべて秘密で､ それを保護する必要があります｡
‫これまでSwarmには､ あまりいい選択肢がなかったんです｡
‫Vaultなど､ 秘密を保管するための素晴らしいツールはたくさんありますが､ それらは内蔵されておらず､
‫使い始めるだけでも別のインフラのセットアップが必要でした｡
‫つまり､ ここに文字列やバイナリから.NETまでのあらゆるものを格納することができるのだ｡ 5MBのサイズ｡
‫そして､ 最もクールな点は､ これを使うために実際にアプリを書き換える必要がないことです｡
‫これらの情報を得るために､ 自分のアプリがどこかのウェブサービスと話をする必要はないのです｡
‫では､ その様子をご覧ください｡
‫1時点｡ 13. 0 Swarm Raftのデータベースは､ デフォルトではディスク上で暗号化されています｡ Dockerをインストールして､ 以前やったようなswarm
‫initをすれば､ それは暗号化されたデータベースになります｡
‫そして､ サービスを停止するときは､ キーを安全に保存して暗号化されます｡
‫マネージャーノードのディスクにのみ保存され､ それを解除したり復号したりする鍵を持っているのは､
‫マネージャーノードだけなのです｡
‫これはSwarmにすでに存在するものですが､ 基本的に鍵がコンテナに降りてくる方法は､ コントロールプレーン､
‫つまりマネージャとワーカーの間の暗号化されたTLSネットワーク通信を経由しています｡
‫この接続はすでに安全で､
‫TLSと相互のPKI認証を使用していましたから､ この既存のチャネルを使って､ コンテナに機密を持ち込むことができたのです｡
‫Docker secretsのコマンドを使って､ まずSwarmのデータベースに格納するんです｡
‫そして､ サービスコマンドを使うか､ スタックファイルを使うかして､ Swarmにこのシークレットを使うことを許可する人を指定します｡
‫ここで重要なのは､
‫ホストやノード上にコンテナがあり､ そのサービスにキーを割り当てたからといって､ 他のコンテナがそれにアクセスできるわけではない､ ということです｡
‫これはDocker Engineに組み込まれているため､ Docker Workerはそのキーをメモリ内にのみ安全に保持し､
‫そのノード上の必要なコンテナにのみ降りてくる｡
‫コンテナ内のアプリケーションからは､ ハードディスク上のファイルのように見えます｡
‫でも､ 実はそうではないんです｡ 実際にディスク上で動いているわけではないのです｡ ramfs ファイルシステムを使用してメモリ内にのみ存在し､
‫/run/secrets ディレクトリの下に移動します｡
‫そして､ そのファイルにアクセスすると､ その中にある1つの秘密が表示されます｡
‫これをキーバリューストアのように考えると､
‫キーはファイル名で､ 値はその中にあるものです｡
‫また､ エイリアスを設定することで､ 同じキーに複数の名前を付けることができます｡ この方法については､
‫後で説明します｡
‫ローカルでの開発では､ シークレットアサインメントが含まれるスタックファイルを使用していれば､ 実際にローカルマシンのDocker
‫Composeで動作します｡
‫ここでもう一度､ docker-compose､ コマンドラインは､ 本番サーバーで決して使用しないでください｡
‫特に今回のケースでは､ 実はセキュリティを偽装しているのです｡
‫つまり､ Dockerの開発者やDockerのユーザーが､ 自分のマシンでスタックファイルをできる限り使えるようにしたいのです｡
‫そのため､ ローカルマシンで実行するコンテナは､ Swarmと同じように実際に秘密を見ることができます｡
‫しかし､ そこで初期化しない限り､ ローカルマシンにSwarmがあるわけではないのですが､ ほとんどの人はそんなことをするつもりはないでしょう｡
‫そして､ その秘密を保存する方法が､ Swarmのデータベースなのです｡
‫だから､ 当たり前といえば当たり前なんですが､ 秘密はSwarmにあるんです｡ Swarmだけのものです｡ スウォームがなければ､ シークレットを使うことはできません｡
‫しかし､ docker-composeコマンドは､ 実際にクリアテキストファイルで秘密をローカルコンテナにマウントするという回避策をとっているのです｡
‫これは安全ではありませんが､ 私たちのマシン上でローカルに秘密を使用することができます｡
‫ただ､ 本番で使いたいとは思わないので､ Swarmのセキュアストアを用意しているわけです｡