Web アプリケーションが機能するためには、多くの場合、API キー、パスワード、プライベート証明書などのシークレットが必要ですが、これらのリソースを保存してアクセスすると、開発者がセキュリティ リスクに対して脆弱になる可能性があります。
この記事では、シークレット管理の課題と、Web アプリケーションでシークレットを管理、保存、および読み取るためのベスト プラクティスのいくつかについて学習します。
シークレットは、認証と承認に使用されるデジタル資格情報です。それらは、人間からアプリケーションへのレベルとアプリケーションからアプリケーションへのレベルの両方でアクセス権を管理します。
一般的なシークレットの種類は次のとおりです。
シークレットは、機密データ、システム、およびサービスへのアクセスをユーザーとアプリケーションに提供します。これが、送信中および保管中の秘密を安全に保つことが重要である理由です。
シークレットを格納する最も一般的な方法は、環境変数として知られる.env
ファイルを使用することです。ただし、これらのファイルは権限のないユーザーにデータを公開する可能性があり、ファイルを手動で管理するとエラーが発生する可能性があります。
.env
ファイルがもたらすリスクの詳細については、こちらをお読みください。
シークレット管理は、より安全な代替手段を提供します。
シークレット管理を理解するには、まずシークレットのライフサイクルを知る必要があります。
正常なシークレットは、次のプロセスに従う必要があります。
生成/作成:シークレットは、ユーザーが手動で生成するか、必要に応じて自動的に生成します。通常、パスワードは、パスワードの作成と使用を管理するポリシーに従います。
ローテーション:シークレットが使用されると、自動的に作成されるか、手動作成のプロンプトによって定期的に変更する必要があります。シークレットが古いか有効期限が切れている場合、シークレットが変更されるまでアクセスはブロックされます。
失効:シークレットが不要になったり不要になったりすると (たとえば、従業員が会社を辞めたり、疑わしいアクティビティが見つかったりした場合)、シークレットはユーザーまたはプログラムから削除され、リソースへのアクセスが効果的にブロックされます。不要な、期限切れの、侵害された、または脆弱な秘密を取り除くことは、優れた秘密の衛生状態を維持するための重要なステップです。
シークレット管理は、シークレットのライフサイクル全体で、資格情報の作成、ローテーション、失効、および保存を安全かつ効率的に管理するプロセスです。パスワード管理の改良版と考えてください。管理資格情報の範囲は拡大していますが、重要な資産を不要なアクセスから保護するという目的は変わりません。
シークレット管理は、潜在的な障害点を制限するために、シークレットの管理へのユーザーの参加を削減または排除します。
一般に、次の 3 つのレベルでセキュリティに貢献します。
インフラストラクチャ セキュリティは、ユーザー アカウント、アプリケーション アカウント、デバイス、およびその他のネットワーク要素への不正アクセスを防ぎます。
クラウド サービス セキュリティは、クラウド アカウントと重要なクラウドベース サービスへのアクセスを制限および管理します。
データ セキュリティは、重要なシステム、ストレージ、データベース、およびその他のリソースのデータ侵害を防ぎます。
ただし、秘密管理を実装するということは、組織のインフラストラクチャの最も脆弱なレベル (クラウド、コード、データ、およびデバイス) にセキュリティ対策を統合することを意味し、これは困難な場合があります。
秘密管理の一般的なリスクには次のようなものがあります。
不完全な可視性と認識:これは、管理者、開発者、および他のチーム メンバーが個別に秘密を保持する分散型モデルの特定の欠陥です。ここでの見落としは、セキュリティのギャップと監査の課題が確実に存在することを意味します。
ハードコーディングされた/埋め込まれた資格情報:アプリケーションと IoT デバイスには、ハードコードされた既定の資格情報が提供されて展開されます。この資格情報は、スキャン ツールや単純な推測、または辞書スタイルの攻撃を使用して簡単にクラックできます。
特権認証情報とクラウド: クラウドと仮想化の管理コンソール (AWS や Office 365 によって提供されるものなど) は、ユーザーに広範なスーパーユーザー権限を付与し、仮想マシンとアプリケーションを大規模に即座にスピンアップおよびスピンダウンできるようにします。これらの各仮想マシンには、制御する必要がある独自の特権と秘密のセットがあります。
DevOps ツール: DevOps チームは通常、オーケストレーション、構成管理、およびその他の目的 (Chef、Puppet、Ansible、Salt、および Docker コンテナーなど) に複数のツールとテクノロジーを使用します。これらは、機能するためにシークレットを必要とする自動化およびその他のスクリプトに依存しています。
サード パーティ ベンダー アカウント/リモート アクセス ソリューション:リモート アクセスまたはサード パーティを介して提供される認証が適切に使用されていることを確認することは困難です。
手動の秘密管理プロセス:手動の秘密管理手法が増えるほど、セキュリティの欠陥やミスのリスクが高くなります。
ただし、これらの問題に対処し、機密データを安全に保つためのソリューションとベスト プラクティスがあります。
ユーザーとアプリがシステムにアクセスするために必要なものを取得するための安全で安全な方法を提供するために使用できる方法がいくつかあります。
組織内で効率的な秘密管理システムを構築するために必要なことは次のとおりです。
まず、シークレットを一元化する必要があります。多くのプロジェクトでは、シークレットを GitHub、Bitbucket、GitLab などのバージョン管理システムに保存しています。
データを一元化することで、誰がいつシークレットにアクセスできるかを簡単に制御できます。
シークレットを一元管理するには、シークレットをデータベースに保存するか、Secrets Manager を使用します。
Secret Manager の詳細については、こちらをご覧ください。
統一されたシークレット管理ポリシーは、シークレットの構造 (最小の長さ、複雑さ、特殊文字の使用、禁止されているパスワード、再利用、および期間) に関する厳格なガイドラインを提供する必要がありますが、デフォルトまたはハードコードされたシークレットの使用を禁止する必要があります。
このポリシーには、いくつかの基本的な機能を含める必要があります。
アクションが自動化されていないと、人為的ミスによって損害が発生するリスクがあります。秘密の開発、管理、配布、維持、およびハードコーディングされた秘密や埋め込まれた秘密の削除は、人間ではなくテクノロジーに頼るようにしてください。
ダイナミック シークレットとも呼ばれる詳細なレベルで一意の個人またはエンティティに一時的な資格情報を提供します。これにより、違反が発生した場合に、開発インフラストラクチャ全体に影響を与えることなく、影響を受ける資格情報を取り消すことができます。
少なくとも、異なる本番システムまたはチームに対して、理想的には環境ごとに、異なる認証情報のセットを作成する必要があります。
ネットワーク内で最大限のセキュリティを確保するために、シークレットは転送中および保管中に暗号化する必要があります。
暗号化キーはシークレット管理ソリューションに統合して、それらのキーにアクセスできるユーザーを適切に制御できるようにする必要があります。
監視と説明責任を改善するには、特権セッション監視を使用して、アカウント、ユーザー、スクリプト、および自動化ツールのすべての特権セッションを記録、監査、および監視します。
キーストロークと画面のキャプチャもオプションであり、ライブ ビューと再生が可能です。
一部のビジネス特権セッション管理ソリューションでは、IT チームが疑わしい進行中のセッションの動作を検出し、アクティビティが完全に調査されるまでセッションを停止、ロック、または終了することもできます。
今日のネットワークの分散型の性質を活用してください。機密データと機密データを同じ場所に集中させるのではなく、別々に保管してください。これにより、開発インフラストラクチャ内でのシークレットの使用と更新が容易になります。
機密管理は、組織のサイバーセキュリティを維持するために重要です。組織は、シークレットを安全かつ効果的に管理するために、シークレットのライフサイクルのすべてのフェーズに対して統一されたルールとプロセスを定義するコア シークレット管理戦略を開発する必要があります。