vault - シークレット管理、サービスとしての暗号化、および特権アクセス管理のためのツール

(A tool for secrets management, encryption as a service, and privileged access management)

Created at: 2015-02-25 08:15:59
Language: Go
License: MPL-2.0

ボールトCircleCI ボールトエンタープライズ


注意:私たちはVaultのセキュリティとユーザーの信頼を非常に真剣に受け止めています。Vaultでセキュリティの問題を発見したと思われる場合は、security@hashicorp.comまで連絡ください。


Vaultのロゴ

Vaultは、シークレットに安全にアクセスするためのツールです。シークレットとは、APIキー、パスワード、証明書など、アクセスを厳密に制御したいものです。Vaultは、厳密なアクセス制御を提供し、詳細な監査ログを記録しながら、あらゆるシークレットへの統一されたインターフェイスを提供します。

最新のシステムでは、データベースのクレデンシャル、外部サービスのAPIキー、サービス指向アーキテクチャ通信のクレデンシャルなど、多数のシークレットにアクセスする必要があります。誰がどのシークレットにアクセスしているかを理解することは、すでに非常に難しく、プラットフォーム固有です。キーローリング、安全なストレージ、および詳細な監査ログを追加することは、カスタムソリューションなしではほとんど不可能です。これは、Vaultが介入する場所です。

Vaultの主な機能は次のとおりです。

  • 安全なシークレットストレージ:任意のキー/値シークレットをVaultに保存できます。Vaultは、これらのシークレットを永続ストレージに書き込む前に暗号化するため、rawストレージにアクセスするだけではシークレットにアクセスできません。Vaultは、ディスク、領事などに書き込むことができます。

  • 動的シークレット:Vaultは、AWSやSQLデータベースなどの一部のシステムのシークレットをオンデマンドで生成できます。たとえば、アプリケーションがS3バケットにアクセスする必要がある場合、アプリケーションはVaultに認証情報を要求し、Vaultはオンデマンドで有効なアクセス許可を持つAWSキーペアを生成します。これらの動的シークレットを作成した後、Vaultは、リース期間が終了した後、それらを自動的に取り消します。

  • データの暗号化:Vaultは、データを保存せずに暗号化および復号化できます。これにより、セキュリティチームは暗号化パラメータを定義し、開発者は独自の暗号化方法を設計することなく、暗号化されたデータをSQLデータベースなどの場所に保存できます。

  • リースと更新:Vaultのすべてのシークレットにはリースが関連付けられています。リースの終了時に、Vaultはそのシークレットを自動的に取り消します。クライアントは、組み込みの更新APIを介してリースを更新できます。

  • 失効:Vaultには、秘密の失効のサポートが組み込まれています。Vaultは、単一のシークレットだけでなく、シークレットのツリー(たとえば、特定のユーザーが読み取ったすべてのシークレット、または特定のタイプのすべてのシークレット)を取り消すことができます。失効は、侵入の場合にシステムをロックダウンするだけでなく、キーのローリングを支援します。

ドキュメント、入門、および認定試験

ドキュメントはVaultのWebサイトで入手できます。

Vaultを初めて使用し、セキュリティの自動化を開始したい場合は 、HashiCorpの学習プラットフォームのスタートガイドをご覧ください。 学習を継続するための追加のガイドもあります。

さまざまなプログラミング言語でアプリケーション内からVaultを操作する方法の例については、vault-examplesリポジトリを参照してください。すぐに使用できるサンプルアプリケーションも利用できます。

認定試験に合格して、Vaultの知識をアピールしましょう。 試験に関する情報については認定ページにアクセスし、HashiCorpの学習プラットフォームで学習資料を見つけ ください

Vaultの開発

Vault自体またはその組み込みシステムのいずれかで作業する場合は、最初にGoをマシンにインストールする必要があります。Goバージョン1.17.12+が必要です

ローカル開発者の場合、最初に、 GOPATHの設定を含め、Goが正しくインストールされていることを確認して ください。

$GOPATH/bin
一部のディストリビューションには古いバージョンのビルドツールがバンドルされているため、それがパスに含まれていることを確認してください。次に、このリポジトリのクローンを作成します。VaultはGoモジュールを使用するため、GOPATHの外部でリポジトリのクローンを作成することをお勧めします。次に、環境をブートストラップすることにより、必要なビルドツールをダウンロードできます。

$ make bootstrap
...

Vaultの開発バージョンをコンパイルするには、

make
またはを実行し
make dev
ます。これにより、Vaultバイナリがフォルダに配置さ
bin
れます。
$GOPATH/bin

$ make dev
...
$ bin/vault
...

UIを使用してVaultの開発バージョンをコンパイルするには、を実行します

make static-dist dev-ui
。これにより、Vaultバイナリがフォルダに配置さ
bin
れます。
$GOPATH/bin

$ make static-dist dev-ui
...
$ bin/vault
...

テストを実行するには、と入力し

make test
ます。注:これには、Dockerがインストールされている必要があります。これが終了ステータス0で終了する場合、すべてが機能しています。

$ make test
...

TEST
特定のパッケージを開発している場合は、変数を指定することで、そのパッケージのみのテストを実行できます。以下の例では、
vault
パッケージテストのみが実行されます。

$ make test TEST=./vault
...

受け入れテスト

Vaultには、secretメソッドとauthメソッドのほとんどの機能をカバーする包括的な受け入れテストがあります。

シークレットメソッドまたはauthメソッドの機能に取り組んでいて、それが機能していることを確認したい場合(また、他に何も壊れていない場合)、受け入れテストを実行することをお勧めします。

警告:受け入れテストでは、実際のリソースが作成/破棄/変更されます。これにより、場合によっては実際のコストが発生する可能性があります。バグが存在する場合、技術的には、壊れたバックエンドがぶら下がっているデータを残す可能性があります。したがって、自己責任で合格試験を実施してください。少なくとも、テストするバックエンドについては、独自のプライベートアカウントで実行することをお勧めします。

受け入れテストを実行するには、次を呼び出し

make testacc
ます。

$ make testacc TEST=./builtin/logical/consul
...

TEST
変数は必須であり、バックエンドがあるフォルダーを指定する必要があります。一度にすべての
TESTARGS
リソースをテストすると非常に長い時間がかかる場合があるため、変数を特定のリソースにフィルターしてテストすることをお勧めします。

受け入れテストでは通常、アクセスキーなどの他の環境変数を設定する必要があります。テスト自体は早期にエラーが発生し、何を設定するかを指示するはずなので、ここでは説明しません。

Vault Enterpriseの機能の詳細については、VaultEnterpriseサイトにアクセスしてください。