Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】100 Days of DevOps: Day 62.

2025年10月05日に「Dev.to」が公開したITニュース「100 Days of DevOps: Day 62.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Kubernetes環境で、ライセンスキーなどの機密情報を安全に扱う方法を構築した。ファイルからSecretを作成し、Pod(コンテナ群)に安全に渡し、内部でファイルとして使えるようにした。これにより、機密データを保護しつつアプリケーションが利用可能になった。

出典: 100 Days of DevOps: Day 62. | Dev.to公開日:

ITニュース解説

現代のソフトウェア開発において、セキュリティは最も重要な要素の一つだ。特に、ソフトウェアのライセンスキーやデータベースのパスワードといった機密情報は、厳重に管理する必要がある。もしこれらの情報が漏洩すれば、システム全体に甚大な被害をもたらす可能性があるからだ。近年、アプリケーションの実行環境として「Kubernetes(クーバネティス)」という技術が広く使われている。Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するための強力なプラットフォームであり、多くの企業で利用されている。このKubernetes環境で、いかに安全に機密情報を扱うかが大きな課題となる。

今回のニュース記事では、Kubernetesクラスタ内でライセンスキーのような機密情報を安全に扱う具体的な方法が紹介されている。開発者は、外部のシステムで使用するライセンスキーを、Kubernetesの提供する「Secrets(シークレッツ)」という機能を利用して保護し、必要なアプリケーションにのみ安全に提供することに成功した。Secretsは、パスワード、OAuthトークン、SSHキーなど、機密性の高い情報を格納するために特別に設計されたオブジェクトであり、これらの情報をPod(Kubernetesで動く最小のコンピューティング単位)に安全に提供する仕組みを提供する。これにより、機密情報をアプリケーションのコードやコンテナイメージに直接埋め込むという、セキュリティ上のリスクが高い方法を避けることができる。

KubernetesのSecretsは、機密情報をクラスタ内に安全に保存するためのオブジェクトだ。通常、アプリケーションが使用する設定値は「ConfigMap(コンフィグマップ)」という別のオブジェクトで管理されるが、ConfigMapは機密性の低い情報(例:データベースのアドレスなど)を扱うことを目的としている。一方、Secretsは機密性の高い情報(例:パスワード、APIキー、ライセンスキー)を安全に扱うために設計されている。Secretsに保存されたデータは、Kubernetesクラスタ内の特定の場所に保護された状態で保存され、必要なPodにのみ限定的にアクセスが許可される仕組みになっている。これにより、不正なアクセスから機密情報を保護し、万が一クラスタの一部が侵害されても、機密情報がすぐに漏洩するリスクを低減できる。

今回の実装は、まず既存のファイルに保存されていたライセンスキーをKubernetesのSecretとして登録することから始まった。具体的には、ジャンプホスト(管理用の踏み台サーバー)の/opt/news.txtというファイルにライセンスキーが記述されていた。このファイルの内容をSecretとして登録するために、kubectl create secret genericというコマンドが使用された。 kubectl create secret generic news --from-file=/opt/news.txt このコマンドは、「news」という名前のジェネリック(汎用的な)Secretを作成し、そのデータとして/opt/news.txtファイルの内容を読み込むよう指示している。kubectlはKubernetesクラスタを操作するためのコマンドラインツールであり、このコマンドを実行することで、/opt/news.txtに書かれたライセンスキーが、Kubernetesクラスタ内部の安全な場所にnewsという名前のSecretオブジェクトとして保存される。これにより、ライセンスキーはファイルシステム上に平文で存在し続けるのではなく、Kubernetesによって保護された状態になる。

次に、作成したSecretを実際に利用するアプリケーションをKubernetes上にデプロイする作業が行われた。このアプリケーションは「secret-nautilus」という名前のPodとして定義され、その中で「secret-container-nautilus」というコンテナが動作する。このコンテナはdebian:latestイメージをベースとし、sleepコマンドで一定時間稼働し続けるように設定されている。最も重要なのは、このPodが先ほど作成したnews Secretをどのように利用するように設定されているかという点だ。 Podの定義ファイル(YAML形式)では、volumeMountsvolumesというセクションを使って、news Secretをコンテナ内部の特定のパスにファイルとしてマウントするように指定している。 具体的には、volumesセクションでnews-volumeという名前のボリュームを定義し、そのソースとしてsecretName: newsを指定することで、news Secretのデータを参照するようにしている。そして、volumeMountsセクションでは、このnews-volumeをコンテナ内部の/opt/demoというパスにマウントするよう設定している。さらに、readOnly: trueと指定することで、コンテナ内部からSecretのデータを誤って変更することを防ぎ、セキュリティを強化している。この設定により、コンテナ内部からは、あたかも/opt/demo/news.txtというファイルが存在し、その中にライセンスキーが書かれているかのように扱うことができるようになる。アプリケーションは、このパスのファイルを読み込むだけで、必要なライセンスキーを取得できるというわけだ。

実装が正しく行われたことを確認するため、いくつかの検証作業が行われた。まず、kubectl get pods secret-nautilusコマンドを実行して、secret-nautilus Podが正常に「Running(稼働中)」状態であることを確認した。これは、Podが意図通りにデプロイされ、コンテナが起動していることを示している。 次に、kubectl exec -it secret-nautilus -c secret-container-nautilus -- ls -l /opt/demoコマンドを使って、稼働中のコンテナ内部で/opt/demoディレクトリの内容を一覧表示した。このコマンドの出力により、/opt/demoディレクトリ内にnews.txtというファイル(実際にはシンボリックリンク)が作成されていることが確認された。これは、Secretがファイルとしてコンテナ内部に正しくマウントされている証拠だ。 最後に、kubectl exec -it secret-nautilus -c secret-container-nautilus -- cat /opt/demo/news.txtコマンドを実行し、実際にnews.txtファイルの内容を読み取った。その結果、ファイルから「5ecur3」というライセンスキーの値が取得できた。この「5ecur3」は、元々/opt/news.txtファイルに書かれていたプレースホルダーのライセンスキーだ。 これらの検証により、ライセンスキーという機密情報がKubernetesのSecretとして安全に保存され、必要なPodのコンテナ内部にファイルとして正しく提供されていることが明確に証明された。

今回の取り組みは、Kubernetes環境においてライセンスキーのような機密情報を安全に管理するための信頼性の高いパターンを確立したと言える。Kubernetes Secretsを利用することで、機密情報はアプリケーションコードやコンテナイメージから分離され、独立した安全なオブジェクトとして扱われる。これにより、セキュリティが大幅に向上するだけでなく、機密情報の変更や管理も容易になる。システムエンジニアにとって、このような機密情報の安全な管理手法を理解し、実践することは、セキュアなシステム構築において不可欠なスキルとなるだろう。KubernetesのSecretsは、これからのクラウドネイティブな開発において、間違いなく重要な基盤技術の一つとなる。

関連コンテンツ

関連IT用語