Dockerシークレットを作成し、それを使ってサービスをデプロイする方法 - TechRepublic

Dockerシークレットを作成し、それを使ってサービスをデプロイする方法 - TechRepublic
極秘の切手と白紙が入った封筒。
画像: elnavegante/Adobe Stock

コンテナの世界では、シークレットとはSSHキー、SSL証明書、パスワードといった資産であり、クラウドアカウント、API、他のコンテナなどのサービスへの接続に使用されます。シークレットは、コンテナの実行時に必要となる機密データを管理するために使用できます。問題は、これらのシークレットをイメージ内やソースコード内に保存しないことです。深刻なセキュリティ問題につながる可能性があるためです。

悪意のあるユーザーがDocker Swarmに侵入し、パスワードや証明書を閲覧してアカウントにアクセスしようとするとどうなるか想像してみてください。そんなのは絶対に許されません。

このようなシナリオを回避するには、シークレットの使用を検討する必要があります。パスワードをコンテナやイメージ内に保存する代わりに、Dockerで暗号化されたシークレットを作成し、それをコンテナに渡すことで、平文で表示されることを防ぎます。このシステムにより、サイバー犯罪者がシークレットを悪用することがより困難になります。

Docker でシークレットを作成する方法と、それを使用して Docker サービスをデプロイする方法を説明します。

参照: 採用キット: バックエンド開発者 (TechRepublic Premium)

必要なもの

これを実行するには、Dockerのインスタンスが稼働している必要があります。Linux、macOS、Windowsで稼働している単一のインスタンスでも、完全なDocker Swarmクラスターでも構いません。必要なのはこれだけです。それでは、秘密を少しだけお教えしましょう。

秘密を作成する方法

まず最初に、シークレットを作成します。printfコマンドを使用し、その出力をdockerコマンドにパイプして、 というシークレットを作成しますmy_test_secret。これを行うには、Dockerコントローラーにログインし、以下のコマンドを実行します。

printf "This is my super secret secret" | docker secret create my_test_secret -

次のコマンドを使用して現在のすべてのシークレットを一覧表示することで、シークレットが正常に作成されたかどうかを確認できます。

docker secret ls

次のようなリストが表示されます。

ttx3h2zarswj4wxgum5heobfx   my_test_secret   4 seconds ago 4 seconds ago

秘密情報を利用するサービスの作成方法

これから、シークレットへのフルアクセスを持つRedisサービスを作成します。この方法の良い点は、コンテナ自体がシークレットを内部に保存せず、docker secretsメカニズムを介して使用できることです。

シークレットを使用してそのサービスをデプロイするにはmy_test_secret、コマンドは次のようになります。

docker service  create --name redis --secret my_test_secret redis:alpine

次のコマンドでサービスが実行されていることを確認します。

docker service ps redis

次のようなリストが表示されます。

0z6v0js2hu5q   redis.1   redis:alpine   dockernode1   Running     Running 34 seconds ago

次のコマンドを使用して、サービスがシークレットにアクセスできることを確認します。

docker container exec $(docker ps --filter name=redis -q) ls -l /run/secrets

出力には次のようなものが表示されます。

-r--r--r-- 1 root root        17 May 24 13:16 my_test_secret

最後に、次のコマンドでシークレットの内容を表示できます。

docker container exec $(docker ps --filter name=redis -q) cat /run/secrets/my_test_secret

出力は次のようになります。

This is my super secret secret

コンテナをコミットすると、シークレットは利用できなくなります。以下のコマンドでコミットしてください。

docker commit $(docker ps --filter name=redis -q) committed_redis

次のコマンドで、シークレットが利用できなくなったことを確認します。

docker run --rm -it committed_redis cat /run/secrets/my_test_secret

出力には次のようなものが表示されます。

cat: can't open '/run/secrets/my_test_secret': No such file or directory

failed to resize tty, using default size

次のコマンドを使用して、シークレットへのアクセスを削除できます。

docker service update --secret-rm my_test_secret redis

これが、Docker でシークレットを作成し、それをサービス内で使用する方法です。

Dockerについてさらに詳しく知るには

Docker についてさらに詳しく知りたい場合は、TechRepublic Academy の以下のリソースをお見逃しなく。

  • Dockerコンテナのハッキングとセキュリティ保護
  • Linux & Docker コーディングバンドル
  • Docker および Kubernetes 認定トレーニングバンドル

Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。

Tagged: