AnsibleVaultで秘密を守る



このAnsibleVaultブログでは、機密データ(パスワード/秘密鍵/証明書ファイル)が暗号化されたファイルに保存され、AnsiblePlaybookに埋め込まれる方法について説明しています。

テクノロジーの使用率が高いほど、セキュリティに対する脅威の可能性が高くなります。典型的なAnsibleのセットアップでは、「シークレット」をフィードインする必要があります。これらのシークレットは、文字通り何でも、パスワード、APIトークン、SSH公開鍵または秘密鍵、SSL証明書などです。これらのシークレットを安全に保つにはどうすればよいですか? Ansibleは、AnsibleVaultと呼ばれる機能を提供します。

このブログでは、Ansible Vaultの使用方法を示し、データを安全に保つためのいくつかのベストプラクティスを探ります。





このブログで取り上げられているトピック:

DevOpsをマスターしたい場合は、 ' コースはあなたの頼りになるオプションです。



Ansible Vaultとは何ですか?

インフラストラクチャをコードとして使用すると、機密データが世界に公開される恐れがあり、望ましくないセキュリティの問題が発生する可能性があります。 Ansible Vaultは、すべての秘密を安全に保つことができる機能です。ファイル全体、YAMLプレイブック全体、またはいくつかの変数を暗号化できます。機密データを暗号化するだけでなく、それらをプレイブックに統合できる機能を提供します。

Vaultは、ファイルが完全に暗号化されているか、完全に暗号化されていないファイルレベルの粒度で実装されます。 ファイルの暗号化と復号化に同じパスワードを使用するため、AnsibleVaultの使用が非常にユーザーフレンドリーになります。

なぜAnsibleVaultを使用するのですか?

Ansibleは自動化に使用されているため、プレイブックに特定の資格情報、SSL証明書、またはその他の機密データが含まれている可能性が高くなります。プレーンテキストなどの機密データを保存することは悪い考えです。 GitHubまたはラップトップの盗難に対する1つの誤ったコミットは、組織に大きな損失をもたらす可能性があります。ここで、Ansibleボールトが登場します。これは、セキュリティを損なうことなく、インフラストラクチャをコードとして持つための優れた方法です。



AWSでEC2インスタンスをプロビジョニングするプレイブックがあるとします。プレイブックでAWSアクセスキーIDとAWSシークレットキーを提供する必要があります。明らかな理由で、これらのキーを他の人と共有しないでください。どうやってそれらを露出させないようにしますか? 2つの方法があります–これらの2つの変数を暗号化してプレイブックに埋め込むか、プレイブック全体を暗号化します。

これは、ansibleボールトを使用できるシナリオの1つにすぎません。ファイル全体を暗号化することも、機密データを保持する可能性のあるいくつかの変数を暗号化することもできます。その後、Ansibleは実行時にそれらを自動的に復号化します。これで、これらの値をGitHubに安全にコミットできます。

暗号化されたファイルの作成

暗号化されたファイルを作成するには、 ansible-vault create コマンドを実行し、ファイル名を渡します。

$ ansible-vault create filename.yaml

パスワードを作成し、再入力して確認するように求められます。

ansible vault create-Ansible Vault-Edureka

パスワードが確認されると、新しいファイルが作成され、編集ウィンドウが開きます。デフォルトでは、AnsibleVaultのエディターはviです。データを追加し、保存して終了することができます。

そしてあなたのファイルは暗号化されています

暗号化されたファイルの編集

暗号化されたファイルを編集する場合は、を使用して編集できます ansible-vault編集 コマンド。

$ ansible-vault edit secrets.txt

secrets.txtは、すでに作成され、暗号化されたファイルです。

Javaサンプルプログラムでのnullポインタ例外

ボールトパスワードを挿入するように求められます。ファイル(復号化されたバージョン)がviエディターで開き、必要な変更を加えることができます。

出力を確認すると、保存して閉じるときにテキストが自動的に暗号化されることがわかります。

暗号化されたファイルの表示

暗号化されたファイルだけを表示したい場合は、 ansible-vaultビュー コマンド。

$ ansible-vault view filename.yml

ここでも、パスワードの入力を求められます。

同様の出力が表示されます。

Vaultパスワードの再入力

もちろん、ボールトのパスワードを変更したい場合もあります。あなたは使用することができます ansible-vaultキーの再生成 コマンド。

$ ansible-vault rekey secrets.txt

ボールトの現在のパスワード、次に新しいパスワードの入力を求められ、最後に新しいパスワードを確認することで完了します。

暗号化されていないファイルの暗号化

暗号化したいファイルがあるとすると、 ansible-vault暗号化 コマンド。

$ ansible-vault encode filename.txt

パスワードを挿入して確認するように求められ、ファイルは暗号化されます。

ファイルの内容を見ると、すべて暗号化されています。

暗号化されたファイルの復号化

暗号化されたファイルを復号化する場合は、 ansible-vault復号化 コマンド。

$ ansible-vault復号化filename.txt

いつものように、ボールトのパスワードを挿入して確認するように求められます。

特定の変数の暗号化

Ansible Vaultを使用する際のベストプラクティスは、機密データのみを暗号化することです。上で説明した例では、開発チームはパスワードを本番チームおよびステージングチームと共有することを望んでいませんが、独自のタスクを実行するために特定のデータにアクセスする必要がある場合があります。このような場合、他の人と共有したくないデータのみを暗号化し、残りはそのままにしておく必要があります。

Ansible Vaultでは、特定の変数のみを暗号化できます。あなたは使用することができます ansible-ボールトencrypt_string このためのコマンド。

$ ansible-vault crypto_string

ボールトのパスワードを挿入して確認するように求められます。次に、暗号化する文字列値の挿入を開始できます。 ctrl-dを押して入力を終了します。これで、この暗号化されたものを割り当てることができますプレイブックの文字列に。

同じことを1行で実現することもできます。

$ ansible-vault encode_string'string '--name'variable_name'

実行時に暗号化されたファイルを復号化する

実行時にファイルを復号化する場合は、次を使用できます。 –ask-vault-pass 国旗。

$ ansible-playbook launch.yml --ask-vault-pass

これにより、このlaunch.ymlプレイブックの実行に使用されるすべての暗号化ファイルが復号化されます。また、これは、すべてのファイルが同じパスワードで暗号化されている場合にのみ可能です。

パスワードプロンプトは煩わしいものになる可能性があります。自動化の目的は無意味になります。どうすればこれを改善できますか? Ansibleには、パスワードを含むファイルを参照する「パスワードファイル」と呼ばれる機能があります。その後、実行時にこのパスワードファイルを渡すだけで、自動化できます。

$ ansible-playbook launch.yml --vault-password-file〜 / .vault_pass.txt

パスワードを指定する別のスクリプトを持つことも可能です。煩わしいエラーなしで機能するには、スクリプトファイルが実行可能であり、パスワードが標準出力に出力されていることを確認する必要があります。

$ ansible-playbook launch.yml --vault-password-file〜 / .vault_pass.py

VaultIDの使用

Vault Idは、特定のVaultパスワードに識別子を提供する方法です。 Vault IDは、プレイブック内で参照されるさまざまなパスワードを使用してさまざまなファイルを暗号化するのに役立ちます。 Ansibleのこの機能は、Ansible2.4のリリースで登場しました。このリリース以前は、各AnsiblePlaybookの実行で使用できるボールトパスワードは1つだけでした。

したがって、異なるパスワードで暗号化された複数のファイルを使用するAnsibleプレイブックを実行する場合は、VaultIDを使用できます。

$ ansible-playbook --vault-id vault-pass1 --vault-id vault-pass2 filename.yml

これで、このAnsibleVaultブログは終わりです。テクノロジーに追いつき、それらを最大限に活用することは驚くべきことですが、セキュリティを妥協することによってではありません。これは、インフラストラクチャをコード(IaC)として使用するための最良の方法の1つです。

この記事が役に立った場合は、 ' Edurekaによって提供されます。 IT業界をよりスマートにしたすべてのツールを網羅しています。

質問がありますか?投稿してください 折り返しご連絡いたします。