web-dev-qa-db-ja.com

Hashicorp Vaultには、シークレット(パスワード、APIキー)を環境変数に保存する場合と比べて、どのようなセキュリティ上の利点がありますか?

Hashicorp Vaultインスタンス(または類似のキー管理ソフトウェア)にシークレットを保存し、環境変数を介してシークレットを渡さないようにする一般的な推奨事項があるようです。 Vaultを使用する特定のシナリオでは、環境変数を使用するよりもセキュリティの観点から優れています。

14
user148622

Vaultの約束は「サービスとしての秘密」です。シークレットの静的ストレージ(暗号化されたRedis/Memcachedと考える)、パススルー暗号化(Vaultプレーンテキストを与える、Vaultはデータベースに保存する暗号文を返す)、および動的シークレット取得をサポートします。

物事の静的な秘密の側面では、データは転送中および保存時に暗号化されます。データは、メモリ、ファイルシステム、またはEtcdやConsulなどのサードパーティツールに保存できます。これは、アプリケーションレベルのシークレットに最適です。 Vaultは、基盤となる暗号化キーのオンラインローテーションをサポートしています。 FIPS/HIPPA/PCIコンプライアンス要件がある場合、Vaultを使用すると、デフォルトの構成でこれらのほとんどのボックスを簡単にチェックできます。

パススルー暗号化(または内部で呼び出される「通過」)を使用すると、Vaultは暗号化サービスとして機能し、プレーンテキストデータを受け入れ、それを暗号化して、暗号文を返します。このプロセスについて私はHashiCorpブログで 詳細 について書いていますが、プロセスは簡単です。その後、この暗号文はアプリケーションによって管理されます。アプリケーションがプレーンテキストを戻す必要がある場合、アプリケーションはVaultに対して認証および承認され、Vaultに暗号文を提供し、Vaultはプレーンテキストを返します(これも、承認されている場合)。ここには多くの利点がありますが、最大のものは次のとおりです。1.アプリケーションに対称暗号化サービスを構築する必要はありません。 API呼び出しを行うだけで、2。暗号化キーは完全に別の分離されたサービスに保存されます。攻撃者が複数のシステムを侵害する必要がある場合。さらに、Vaultの中継バックエンドは、「派生キー」と呼ばれるこの概念をサポートしています。これにより、データベースに格納されているデータの行ごとの暗号化キーなどが可能になります。これにより、攻撃者がデータベースダンプを取得し、最初の暗号化キーをブルートフォースしたとしても、そのキーはデータベース内の他の行を復号化しません。静的シークレットバックエンドと同様に、transitバックエンドはキーローテーションをサポートしています。

私の意見では、動的なシークレットバックエンドは、Vaultが他のソリューションや自社開発のソリューションから本当に分離する場所です。 Vaultは、データベースに接続し、データベース、クラウド認証情報、CA証明書などの認証情報を動的に生成したり、SSHアクセスを管理したりできます。従来の資格情報とは異なり、これらの資格情報にはリースが関連付けられており、DNSやDHCPのようなものです。アプリケーションに資格が与えられると、その資格の「リース」または存続期間も与えられます。時間が経つにつれて、アプリケーション(またはサービス)はVaultと通信して、資格情報をまだ使用している必要があります。そうしないと、Vaultによって失効します。これにより、秘密の無秩序な増加を排除しつつ、資格情報にアクセスするためのプログラム的な方法を提供できます。これはプログラマティックであるため、アプリケーションの各インスタンス(または、例ではpythonスクリプト))は異なるシークレットを受け取ります。システム全体に影響を与えることなく、単一のアプリケーションの資格情報を簡単に取り消すことができます。

内部での賛同を得るために役立ついくつかのユースケースを以下に示します。

  1. Vaultの GitHub authentication を使用して、開発者とオペレーターを認証します。 GitHubチームメンバーシップはVaultのポリシーにマッピングされます。 opsチームの誰もが製品へのSSHアクセスを取得し、devチームの誰もがテスト用のステージング環境で動的AWSアカウントの認証情報を生成する機能を取得します。

  2. Vaultの AppRole authentication を使用して、アプリケーションをVaultに対して認証し、トークンを取得します。そこから、アプリケーションのポリシーにより、アプリケーションはデータベース資格情報などの起動データを取得できます。アプリがクラッシュした場合、リースの有効期限が切れると、データベースの資格情報が自動的に取り消されます。

  3. データリークを検出しました。影響を受けるすべての資格情報をすぐに取り消すことができます。これは「ガラスを割る」手順と呼ばれます。

追加の注記として、 Consul Template のようなツールを使用して、Vaultからアプリケーションに使用できるテンプレートに値をプルできます。アプリケーションは「Vault対応」である必要はありません。

そして最後に、おそらく投稿を考慮した問題とは関係ありませんが、Vaultはほとんどの組織が直面する「誰もシステムに完全にアクセスできない」という課題も解決することを指摘する価値があります。 Shamirの秘密共有アルゴリズム を使用することで、Vaultサーバーをオンラインにするプロセスは、従来の銀行のVaultのロック解除と非常に似ています。ロックを解除するには、複数の人が同時にキーを入力する必要があります。 Vaultのセキュリティモデル の詳細もご覧ください。

デモなどがあるビデオについては、以下をチェックしてください。

10
sethvargo