ビジネスにおいて、システムやアプリケーションが担う役割は年々重要性を増しています。テクノロジーが目まぐるしく進化する中で、システムやアプリケーションをより早く効率的にリリースすることがビジネスの成功に直結すると言っても過言ではありません。実際、CI/CD(Continuous Integration/Continuous Delivery:継続的インテグレーション/継続的デリバリー)に取り組む方が増えているのではないでしょうか。
CI/CDは、システム・アプリケーションの改修・リリースを継続的に行うための開発手法です。実現するには、開発やリリースに関わるアクティビティを自動化する必要があります。その際に必ずと言っていいほど利用するのが「シークレット」です。シークレットの利用により、サーバやサービスへのアクセスを自動化ツールに集約できます。
ただし、シークレットの管理を怠るとセキュリティ事故につながりかねないため、厳格な管理が必要です。そこで本稿では、CI/CDに求められるシークレット管理とおすすめの手法について解説いたします。CI/CDを活用してビジネスを加速させるためにも、是非ご参照ください。
CI/CDに求められるシークレット管理
そもそも、CI/CDで扱う「シークレット」とは何を指すのでしょうか。
シークレットとは、システムやアプリケーションへのアクセス制御に使用される、デジタル認証情報のことを広く指します。例えばパスワード、APIキー、証明書、秘密鍵などです。このシークレットをCI/CDで利用する自動化ツールが取り扱い、システムへの自動的なアクセスや処理を可能にしています。
では、シークレットが漏えいすると何が起こるでしょうか。
シークレットはアクセスを制御するための情報であることから、ID・パスワードが漏えいするのと同様の事態が発生すると考えられます。具体的には、第三者がシークレットを悪用して不正アクセスを行うことが可能となり、機密情報の漏えいなど大きなリスクに繋がる恐れがあります。
ここで考えなければならないのは、シークレットがどのようにして漏えいするのかということです。
2022年に発覚した国内大手製造業の事例では、リポジトリ管理サービスであるGithub上に、誤ってソースコードを公開設定で配置していました。ソースコード上には機密情報にアクセス可能なシークレットが記載されており、このシークレットを悪用することで数十万件の顧客情報にアクセスできる状態になっていたのです。
非公開にすべきソースコードを公開設定にしていた問題はあります。ただし、ソースコード上にシークレットが記載されており、誰でもシークレットを扱うことが出来るようになっていたことが原因の一端であると言えるでしょう。
この事例以外にも、シークレット情報をソースコードにハードコードしており、そのソースコードが漏えいすることで結果的にシークレットも漏えいする事例は数多く存在します。
本来シークレットは認証情報であり、ヒトが扱うID・パスワードと同様に厳重な管理を行うべきです。しかし、あまり意識せずにソースコードに配置し、ハードコードを行っているのが実体ではないでしょうか。組織をリスクにさらすことになるシークレットの漏えいを防ぐためにも、シークレット管理について組織で検討することが大切です。
最近では、シークレット管理がガイドラインなどでも触れられるようになりました。ガイドライン準拠の観点でもその重要度は増しています。
例えば、クレジットカード業界の国際的なセキュリティ基準「PCI DSS」では、2022年にリリースされたv4.0よりシークレット管理に関する要件が新たに追加されました。具体的には、システムアカウントのパスワードやパスフレーズについて、要件8.6.2で次のように定めています。
“対話型ログインに使用できるアプリケーションおよびシステムアカウント用のパスワード/パスフレーズは、スクリプト、構成ファイル/プロパティファイル、カスタムソースコードにハードコードされてはならない。“
組織をリスクから守る上でも、ガイドラインに準拠する上でも、シークレット管理が必要になっているのです。
シークレット管理におけるポイントと課題
以上を踏まえて、どんな対策を行えば良いでしょうか。
シークレット管理では、シークレットのライフサイクルに着目して、プロセスを組み立てる必要があります。作成から廃棄まで安全に取り扱えるようにしましょう。
ライフサイクルは次のように整理することが可能です。
- ①シークレットの作成
- ②シークレットの保管
- ③シークレットの付与とアクセスコントロール
- ④ローテーションと廃棄
- ⑤モニタリング
各サイクルのポイントは次のとおりです。
①シークレットの作成
システムやアプリケーションで使用するシークレットは、作成時に漏えいしないよう、安全な方法で作る必要があります。さらに、作成したシークレットは一元管理する必要があります。一元管理ができていないと、管理対象のシークレットが把握できず、必要なセキュリティ対策が実施できません。
②シークレットの保管
作成したシークレットは安全に保管する必要があります。目的外の利用者はアクセスできず、たとえアクセスされても利用が困難な状態で保管しておきましょう。保管場所にアクセス制限をかける、強度の高い鍵を利用して暗号化するなどの対策が考えられます。
③シークレットの付与とアクセスコントロール
利用者、あるいはシステムやアプリケーションに対してシークレットを安全に配布する必要があります。シークレットを取り扱う通信経路の暗号化や、付与先の権限を確認した上で認可を行うなどのコントロールが求められます。
④ローテーションと廃棄
シークレットを定期的にローテーションし、不要になったシークレットは確実に廃棄します。そうすることで、万が一シークレットが漏えいした場合も影響を限定的にすることが可能です。不要なシークレットを長期間保持し続けると、適切な管理が行われず、機密情報が漏えいするリスクにつながります。
⑤モニタリング
シークレットの作成から廃棄までのプロセス全体をモニタリングし、不正な生成や利用、廃棄の漏れがないことを確認します。
以上のように、シークレットを取り扱う際は、これらのライフサイクルを意識した管理を行うことが求められます。ただし、これらの管理を手運用で実現しようとすると相当な負荷がかかります。
例えば、鍵のローテーションについては、対象の鍵が1000個あれば、ローテーション期間ごとに1000個分の作業が必要になります。人手で行うと件数に比例してミスが発生しやすくなる傾向があり、ミスを抑止するために別の担当者によるダブルチェックを行えば更に工数がかさんでしまいます。せっかくCI/CDで生産性を高めているのに、これでは逆効果です。
そこで、ツールを使い、シークレット管理も自動化するのがおすすめです。
シークレット管理ツールを使った自動化
本章では、シークレット管理ツール「HashiCorp Vault」を例に、自動化の方法について解説します。
HashiCorp Vaultは、マルチクラウド環境向けのインフラ自動化ソフトウェアを提供するHashiCorp社が開発したツールです。システムやアプリケーションの認証情報など、あらゆるシークレットを安全に管理できます。管理に必要となる、シークレットの作成、シークレットの保管、アクセスコントロール、ローテーション、廃棄、モニタリングといった機能をすべて備えています。
HashiCorp Vaultでは次の3つが実行可能です。
- ①さまざまなサービスのシークレットを一元管理/暗号化
- ②シークレットを必要に応じて配布・廃棄
- ③監査ログの出力
①さまざまなサービスのシークレットを一元管理/暗号化
HashiCorp Vaultでは、ヒトが管理するID・パスワードだけでなく、自動化プロセスなどモノが利用するシークレットも含めた一元管理が可能です。HashiCorp Vault上に集約することで、組織で扱うシークレットを漏れなく管理できます。
図:シークレットの一元管理の例
HashiCorpに格納されたシークレットは暗号鍵を用いて暗号化されます。必要な時だけ復号化を行うことで、安全に保管することが可能です。さらに、暗号化アルゴリズムは複数から選択できます。万一暗号化アルゴリズムが危殆化した場合でも、他の暗号化アルゴリズムを使って再暗号化することも可能です。
②シークレットを必要に応じて配布・廃棄
HashiCorp Vaultでは、シークレットを格納するだけでなく、必要な時にシークレットを作成し、使用後は自動で廃棄することが可能です。不要なシークレットが存在していない状態を作ることができるため、より安全なシークレット管理が実現できます。
また、格納しているシークレットに対して定期的なローテーションや強制変更を行うことが可能です。そのため、万一シークレットが漏えいしてしまった場合にも、悪用や被害拡大のリスクを低減できます。
図:シークレットの動的管理のイメージ
③監査ログの出力
HashiCorp Vaultでは、操作内容を監査ログとして出力することが可能です。大半の操作内容を出力できるため、不審な操作や不正が疑われるアクセスなどの検出が容易に行えます。ログはJSON(JavaScript Object Notation)形式で出力されるため、ログ基盤に取り込みやすくなっています。
では、CI/CDの推進にあたり、HashiCorp Vaultをどのように活用すれば良いでしょうか。具体的な活用例を見てみましょう。
CI/CDでは、パイプラインという考え方に基づき、ビルドからデプロイまで一連の処理を自動化し実行していきます。手順は次のとおりです。
- ①リポジトリにソースコードがコミットされたことをトリガーに、ビルドサーバへソースコードを取り込む
- ②取り込んだソースコードをビルドする
- ③ビルドしたモジュールをテスト環境にデプロイし、自動テストを実行する
- ④テスト結果に問題がなければ、本番環境にモジュールをデプロイする
これらの処理の中で、例えばリポジトリへのアクセス、ビルドサーバへのアクセス、テスト環境へのアクセス、本番環境へのアクセスに対して、認証の仕組みが組み込まれていることが考えられます。HashiCorp Vaultのようなツールを利用しない場合、そのような認証が必要な処理に対して、シークレットを安全に保持する仕組みを作る必要があります。
一方、HashiCorp Vaultを利用すると、認証が必要になるたびにHashiCorp Vaultを呼び出し、必要なシークレットを生成・取得することが可能です。
はじめに、認証が必要になる処理に対し、HashiCorp Vaultにシークレットの発行を依頼するコマンドを予め記載します。そうすることで、CI/CDパイプラインで処理を進める際、認証が必要になるたびにHashiCorp Vaultへシークレット発行のリクエストが行われます。さらに、暗号化された経路でシークレット情報が連携されることにより、安全にシークレットを利用した認証を行うことが可能です。
CI/CDパイプライン処理が終了した際にはローテーションを行い、再利用を防ぎます。このことで、目的外のサーバへのアクセスを予防できます。煩雑なシークレット管理に頭を悩ませることなく、CI/CDで実現する自動化の利点を維持したままセキュアな開発を行うことができます。
おわりに
CI/CDの推進が求められる一方で、CI/CDで扱うシークレットが適切に管理されていないとシークレットの漏えいリスクが高まります。シークレットがひとたび漏えいすれば、企業のビジネスに大きな影響を与えます。そのため、CI/CDに取り組む企業や組織はシークレット管理にも取り組み、安全な開発プロセスを作ることが大切です。
シークレットの管理は、特に対象規模が増えると管理が煩雑になるため、ツールを使うのが現実的です。中でも、HashiCorp Vaultは、クラウドインフラ管理に強みのあるHashiCorp社が開発を行っています。そのため、スムーズなシークレット管理を行うことが可能です。
NRIセキュアテクノロジーズは、HashiCorp Vault の販売を行うほか、特権ID管理ツール「SecureCube Access Check」の開発を長年行っています。その経験と情報セキュリティ専門会社としての知見に基づき、安全なシークレット管理をご提案することが可能です。CI/CDを進める中で、シークレット管理に課題を感じた際は、ぜひNRIセキュアテクノロジーズへご相談ください。
<関連サービス>
認証情報等を安全に管理するソリューション HashiCorp Vault