アプリケーション セキュリティの文脈では、シークレットとは、認証および承認のプロセス中に所有者が誰であり、何であるかを証明する情報です。  悪意のある人物が秘密情報にアクセスすると、意図せずシステムにアクセスでき、企業秘密や顧客情報を盗んだり、データを人質にして身代金を要求するなど、さまざまな目的に利用される可能性があります。

典型的な例としては、アプリケーションがデータベースにアクセスできるようにするユーザー名とパスワードがありますが、シークレットには、API キー、資格情報、証明書、秘密キーなど、他の種類の情報も含まれます。 シークレットは組織の資産へのアクセスを制御するために使用されるため、シークレットを安全に保存して保護することは、組織が侵害されるリスクを軽減するために不可欠です。

シークレット管理とは何ですか?

シークレット管理とは、組織が次の目的で使用するプロセスです。

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

組織がモノリシック アーキテクチャからマイクロサービス アーキテクチャに移行すると、それぞれ独自の認証情報を持つ独立したアプリケーション コンポーネントとインフラストラクチャ コンポーネントの数が増加し、管理する秘密がさらに増えることになります。

秘密を保存する方法

秘密を安全に保存するための 2 つのオプションを詳しく見てみましょう。

金庫

ボールトアプローチでは、サードパーティの秘密管理ツールをインストールする必要があります。 ボールト ソリューションは、各シークレットを暗号化して、権限のないユーザーによるアクセスを防ぎます。 ボールトは、確立されたポリシーに基づいてユーザーにシークレットへのアクセスを提供する API を公開します。 API のユーザーが認証すると、承認されたシークレットにのみアクセスできるようになります。

短所:

  • ソリューションと資格情報は自分で管理する必要があります
  • インフラストラクチャを構築する必要があるか、チームが独立して作業することが困難です。

長所:

  • 業界に精通している(ほとんどの開発者はそのようなツールの使い方を知っています)
  • 金庫ベンダーが提供する他のツールと簡単に統合できます
  • 一部の金庫は無料でご利用いただけます

開発者が暗号化された秘密を保存および管理するために使用できるツールは市場に数多くあります。 集中的に自動化されたシークレット管理ツールの使用方法の例については、ブログ「 HashiCorp Vault を使用して NGINX で SSL 秘密キーを保護する」をお読みください。

クラウドプロバイダー

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

欠点:

  • 通常は無料ではない

長所:

  • アクセスとUIはクラウドプロバイダーによって設定および管理されます
  • 他のクラウドプロバイダーサービスとうまく統合
  • Infrastructure-as-codeツールで管理可能
秘密を保存してはいけない場所

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