web-dev-qa-db-ja.com

hashicorpボールトからファイルを保存および取得する

Hashicorpボールトにファイルを保存する方法がわかりません。 PoCの使用例は、SSL証明書を特定のパスに保存し、HTTP APIを介してダウンロードすることです。

最も適切と思われるkvシークレットエンジンを使用してみました。

5
Ruben Vazquez

データが含まれているファイルを指定して、HashiCorpボールトのキーの値として保存できるようです。

使用できます

vault write <path> -value=@fileは、パスで指定されたキーにfileの内容を書き込みます。

したがって、crtの内容を保存したい場合は、次のようにします。

vault write secret/ssl-certs/prod-1 [email protected]

覚えておくべきことの1つは、ファイルを保存するのではなく、ファイルの内容を保存することです。

1
Ruben Vazquez

事実:base64エンコーディングを利用して、生のバイナリファイルを任意のKVストアに保存できます。
この方法を使用して、Hashicorp Vaultに保存することもできます。

そのため、base64エンコーディングは、任意のバイナリファイルを取得して1行の文字列に変換し、生成された1行の文字列を取得して任意のバイナリファイルに変換することができる可逆関数です。また、1行の文字列を任意のKVストアに格納できるため、任意のバイナリファイルを任意のKVストアに格納できます。 :)(*)

これがあなたが求めていることをするためのいくつかのコードです:

CMD:\> vault server -dev
WindowsSubsystemForLinuxBash:/mnt/c# curl -L https://releases.hashicorp.com/vault/1.0.2/vault_1.0.2_linux_AMD64.Zip > vault.Zip
Bash# apt-get update
Bash# apt-get install unzip
Bash# unzip vault.Zip -d /bin
Bash# chmod +x /bin/vault
Bash# export VAULT_ADDR=http://127.0.0.1:8200
Bash# vault login s.aO8ustaAV4Ot1OxzBe94vi3J
Bash# cat excelfile.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -
Bash# cat excelfile.xlsx | base64 | base64 --decode > x.xlsx
Bash# cat x.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -
Bash:/mnt/c# cat excelfile.xlsx | base64 | vault kv put secret/excelfile.xlsx base64dfile=-
(=- means assign value from standard in, which in this case is the piped output of the cat file command)
Chrome: localhost:8200
(login with dev root token, and you'll see the value is characters in a 1 line string)
Bash# rm excelfile.xlsx
Bash# vault kv get -field=base64dfile secret/excelfile.xlsx | tr -d '\n' | base64 --decode > excelfile.xlsx
(or)
Bash# vault kv get -field=base64dfile secret/excelfile.xlsx | sed 's/\r//' | base64 --decode > excelfile.xlsx
Bash# cat excelfile.xlsx | md5sum
fb6b4eaa2be1c8c410645a5f0819539e  -


(*注意:Vaultおよび他のKVストアにはファイルサイズの制限があります。Consulバックエンドを備えたVaultには、約64 KBの秘密のファイルサイズ制限があります。これは、base64エンコーディングではファイルサイズが4/3に膨らみ、サイズが500kbおよびConsulには、0.5 mb ishのキー値ペア制限があります。)
(証明書ファイルは最大8KBになる可能性があるため、十分なスペースを確保するために注意してください。375KBを超える場合は、おそらく秘密ではありません。)

大きな秘密を保存する必要がある道を進んで言いましょう:
(Kubernetes etcdスナップショットなど)
Vaultが1.0になったため、ストレージバックエンドを移行する機能が組み込まれているため、「Consul Storageバックエンド」から「Consulを使用するAWS S3ストレージのハイブリッドストレージバックエンド」に切り替えることができます(HA整合性ロックには引き続きConsulが必要です)複数のサーバー設定で)」と入力すると、制限が大きくなります。別のストレージバックエンドを選択すると、KVサイズの制限が大きくなります。注:Vaultでは、おそらく10MBなどの賢明な制限が課されます。Vaultバックエンドが1TBのキー値をサポートしていたとしてもサイズが大きい場合は、大きなファイルをボールトに格納することを2度考えてみてください。base64プロセスでは、計算のオーバーヘッドが追加されるだけでなく、ファイルが4/3ほど膨らむため、base64を実行すると、300 MBのファイルは400 MBのスペースを占有します。一貫性のために、一貫性は自動化と保守性、およびコンピューティング/ストレージリソースに適しているためです。

大きなシークレットをサポートする必要がある場合にVaultを使用する方法は次のとおりです:
Vaultからシークレットを取得およびフェッチするラッパーpythonスクリプトを記述します。3つのシナリオ、2つの予約済みキーワード、および次の命名規則/ロジックがあります。

  1. 375kbを超えるシークレットの場合
    secret/filename bigfile:jsonには、対称暗号化キーと、大きなファイルを格納するために設計されたスポットに格納された暗号化ファイルの場所が含まれます。

    ラッパースクリプトは「bigfile」を予約済みキーワードとして認識し、jsonを解析し、ファイルストア(Torrent/TFPサーバー/ CephFSパス/ Azure Blob/AWS S3/GCP Cloud Storage)から暗号化されたファイルをダウンロードするロジックを実行します。ファイルaを現在のコンテキストに復号化します。
  2. 秘密のバイナリファイル<375kb
    secret/filename base64dfile:1バイナリファイルのbase64エンコードバージョンを表す文字の行文字列

    ラッパースクリプトは「base64dfile」を予約済みキーワードとして認識し、ロジックを実行してそれをunbase64し、フェッチ時にファイルに変換します。
  3. テキストファイルの場合(秘密の.json、秘密の.yamls、.pem証明書など)<375
    複数行の文字列が許可されているため、シークレット/ファイル名ファイル名:ファイルコンテンツ
0
neokyle