はじめに
この実験では、シークレット (secrets) を使用して Docker 内で機密データを安全に管理する方法を学びます。まず、機密情報を保存するための Docker シークレットを作成します。
作成後、既存のシークレットを一覧表示することで、シークレットが Docker 環境に正常に追加されたことを確認します。最後に、シークレットを削除する操作を行い、再度シークレットを一覧表示することで削除を確認します。この実践的な演習では、Docker シークレットの作成、一覧表示、削除に必要な基本的なコマンドを学ぶことができます。
シークレットを作成する
このステップでは、Docker でシークレットを作成する方法を学びます。Docker シークレットは、コンテナが実行時に必要とするパスワード、SSH キー、その他の資格情報などの機密データを管理するために使用されます。シークレットを使用することは、機密情報をコンテナイメージに直接保存したり、環境変数として渡したりするよりも安全な方法です。
シークレットを作成する前に、必要な Docker 環境が設定されていることを確認しましょう。LabEx VM には Docker が事前にインストールされています。以下のコマンドを実行して Docker のバージョンを確認できます。
docker version
Docker がインストールされて実行されていることを示す、以下のような出力が表示されるはずです。
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.16.15
Git commit: baedd2a
Built: Tue Oct 25 17:58:10 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 363bd3a
Built: Tue Oct 25 17:56:32 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd335e8e55e68bf582ae4525b3a13ffa8a49392
Built: Tue Oct 25 17:54:39 2022
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
Built: Tue Oct 25 17:54:25 2022
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Built: Tue Oct 25 17:54:16 2022
シークレットを作成するには、docker secret create コマンドを使用できます。このコマンドは、標準入力またはファイルから機密データを読み取り、Docker 内にシークレットを作成します。
値 s3cr3t を含む my_password という名前のシンプルなシークレットを作成しましょう。シークレットの値を docker secret create コマンドにパイプで渡します。
echo "s3cr3t" | docker secret create my_password -
コマンドを実行すると、Docker はシークレットを作成し、その ID を出力します。出力は以下のようになります。
<secret_id>
<secret_id> は、あなたが作成したシークレットの一意の識別子です。将来的な操作で必要になる可能性があるので、このことを覚えておいてください。
作成を確認するためにシークレットを一覧表示する
このステップでは、前のステップで作成したシークレットが正常に追加されたことを確認するために、Docker 内の既存のシークレットを一覧表示する方法を学びます。
Docker が管理するすべてのシークレットを一覧表示するには、docker secret ls コマンドを使用できます。このコマンドは、シークレットの ID、名前、作成タイムスタンプを含むシークレットの一覧を提供します。
シークレットを確認するためにコマンドを実行しましょう。
docker secret ls
出力には、前のステップで作成した my_password シークレットとその ID、作成時間が表示されるはずです。出力は以下のようになります。
ID NAME CREATED UPDATED
<secret_id> my_password About a minute ago About a minute ago
my_password シークレットが一覧に表示されているのがわかり、正常に作成されたことが確認できます。<secret_id> は、シークレットを作成したときに出力された ID と一致します。
このコマンドは、シークレットを管理し、Docker 環境で正しく設定されていることを確認するのに役立ちます。
シークレットを削除する
このステップでは、Docker でシークレットを削除する方法を学びます。シークレットが不要になったときに削除することは、セキュリティ上重要であり、Docker 環境をクリーンアップするためにも必要です。
シークレットを削除するには、docker secret rm コマンドの後にシークレットの名前または ID を指定します。前のステップでは、my_password という名前のシークレットを作成しました。
my_password シークレットを削除しましょう。
docker secret rm my_password
コマンドを実行すると、Docker はシークレットを削除し、削除されたシークレットの名前または ID を出力します。出力は以下のようになります。
my_password
これにより、my_password シークレットが Docker 環境から正常に削除されたことが確認できます。
機密情報への不正アクセスのリスクを最小限に抑えるために、シークレットが使用されなくなったら削除するのが良い習慣です。
削除を確認するためにシークレットを一覧表示する
このステップでは、前のステップで削除した my_password シークレットがもう存在しないことを確認するために、再度 Docker のシークレットを一覧表示します。
すべてのシークレットを一覧表示するには、docker secret ls コマンドを使用します。
docker secret ls
今回の出力には、my_password シークレットが含まれていないはずです。環境に他のシークレットがない場合、出力は次のようになるかもしれません。
ID NAME CREATED UPDATED
他のシークレットがある場合、それらが一覧表示されますが、my_password は含まれないはずです。これにより、削除操作が成功したことが確認できます。
削除後にシークレットを一覧表示することは、機密データが Docker 環境にもう保存されていないことを確認する良い方法です。
まとめ
この実験では、シークレットを使用して Docker で機密データを安全に管理する方法を学びました。まず、Docker 環境を確認し、次に docker secret create コマンドを使用して標準入力からシークレットの値をパイプして、my_password という名前のシークレットを作成しました。
シークレットを作成した後、docker secret ls コマンドを使用して既存のシークレットを一覧表示し、my_password が正常に作成されたことを確認しました。最後に、docker secret rm コマンドを使用してシークレットを削除する練習を行い、再度シークレットを一覧表示することで削除を確認し、Docker シークレットの完全なライフサイクルを実証しました。



