アプリケーションセキュリティにおけるシークレットとは、認証および認可のプロセスで、その所有者が主張どおりの人物または主体であることを証明するあらゆる情報を指します。悪意のある攻撃者がシークレットにアクセスすると、システムへの不正なアクセス権を取得し、企業秘密や顧客情報の窃取、さらにはデータを人質に取って身代金を要求するなど、さまざまな目的に悪用する可能性があります。

典型的な例は、アプリケーションがデータベースにアクセスするためのユーザー名とパスワードですが、シークレットにはAPIキー、認証情報、証明書、秘密鍵など、さまざまな種類の情報も含まれます。シークレットは組織の資産へのアクセス制御に使用されるため、侵害されるリスクを低減するには、シークレットを安全に保管し、保護することが極めて重要です。

シークレット管理とは

シークレット管理とは、組織が以下を行うためのプロセスです。

  • 機密データを特定する
  • データを分類
  • データにラベルを付ける
  • データを安全に保存する
  • シークレットを配布
  • シークレットを定期的にローテーション(置換)する

組織がモノリシックアーキテクチャからマイクロサービスアーキテクチャへ移行すると、それぞれ固有の認証情報を持つ独立したアプリケーションコンポーネントやインフラストラクチャコンポーネントが増加するため、管理すべきシークレットも大幅に増えます。

シークレットの保存方法

シークレットを安全に保存するための2つの方法を詳しく見ていきましょう。

Vault

Vault方式では、サードパーティ製のシークレット管理ツールをインストールします。Vaultソリューションは各シークレットを暗号化し、権限のないユーザーによるアクセスを防止します。VaultはAPIを公開し、設定済みのポリシーに基づいてユーザーにシークレットへのアクセス権を付与します。APIのユーザーが認証されると、アクセスを許可されたシークレットにのみアクセスできます。

短所:

  • ソリューションと認証情報を自社で管理する必要があります
  • チームが独立して運用するには、周辺インフラの構築が必要です。

長所:

  • 業界で広く普及している(ほとんどの開発者がこの種のツールの使い方を知っている)
  • Vaultベンダーが提供する他のツールと容易に統合可能
  • 一部のボールトは無料で利用可能

暗号化されたシークレットの保存と管理に開発者が利用できるツールは、市場に数多くあります。一元的に自動化されたシークレット管理ツールの使用例については、F5のブログ「HashiCorp Vaultを使用したNGINXのSSL秘密鍵の保護」をご覧ください。

クラウドプロバイダー

もう1つの方法は、クラウドプロバイダーがサービスとして提供するシークレット管理を利用することです。利点の1つは、通常、シークレット管理ツールがマネージドデータベースなどの他のクラウドサービスと緊密に統合されていることです。クラウドプロバイダーのサービスでは自動ローテーションなどの機能も提供される場合がありますが、このオプションによってダウンタイムが発生するかどうかについては、今後の調査が必要です。

デメリット:

  • 通常は無料ではない

メリット:

  • アクセスとUIはクラウドプロバイダーが設定および管理します
  • 他のクラウドプロバイダーサービスとスムーズに連携
  • Infrastructure as Codeツールで管理可能

シークレットを保存すべきでない場所

シークレットのロック解除やアクセス時にアプリケーションが中断しないよう、慎重に管理する必要があります。ベストプラクティスは、シークレットをソース管理システムに決してチェックインしないことです。シークレットをそこに保存すると、チームや個人がコードまたはアプリケーションを更新する際に、誤ってアクセスされたり侵害されたりして、組織に深刻な被害が及ぶ可能性があります。そのため、たとえ短時間でもシークレットをソース管理にチェックインした場合は、侵害されたものとして扱う必要があります。機密データはリポジトリから削除し、ソース管理システムの履歴からも完全に消去する必要があります。