もっと詳しく

あなたの秘密が悪者の手に渡らないようにすることが最優先事項です。 しかし、どの程度正確に秘密を守っていますか? ローカルテキストファイルに保存しますか? 暗号化がなければ、そのオプションはリスクが高すぎます。 Ansible Vaultを使用して変数とファイルを暗号化してみませんか?

このチュートリアルでは、パスワードやキーなどの機密コンテンツをAnsibleVaultで保護する方法を学習します。

読んで、あなたの秘密から目を離さないでください!

前提条件

このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、次のものがあることを確認してください。

  • Linuxマシン–このチュートリアルではUbuntu 20.04を使用していますが、どのLinuxディストリビューションでも機能します。
  • Ansibleがマシンにインストールされています。

デフォルトのAnsibleVaultエディターの設定

システム管理者は、さまざまなサーバーのユーザー名とパスワードを含むさまざまなAnsibleプレイブックで作業している可能性があります。 これらのファイルはセキュリティで保護されていないため、プレーンテキスト形式でバージョン管理システムにコミットすることはできません。 そのため、AnsibleVaultが便利です。

Ansible Vaultは、既存のワークフローに統合して、データを暗号化されたファイルに保存するように設計されています。 ただし、最初のAnsible Vaultを作成する前に、デフォルトのAnsibleVaultエディターを設定する必要があります。

1.ターミナルを開き、マシンにSSHで接続します。

2.次に、 〜/ .bashrc テキストエディタを使用してファイル。 The 〜/ .bashrc fileは、新しいターミナルセッションが開始されるたびに実行されるシェルスクリプトです。 このシェルスクリプトは、対話型シェルセッションを初期化し、環境変数を定義します。

3.最後に次の行を追加します 〜/ .bashrc ファイルを作成し、変更を保存して、エディターを終了します。

この行は、現在ログインしているユーザーのEDITOR変数を設定します。 EDITOR変数は、新しいターミナルセッションを開くたびに、好みのテキストエディタが使用されるようにします。

他の任意のテキストエディタを設定できますが、このチュートリアルではnanoテキストエディタを使用します。

4.最後に、次のコマンドを実行して変更を適用します(ソース)ログアウトして再度ログインせずに、システムの現在のデフォルトのテキストエディタを印刷(エコー)します。

# Loads the environment variable into your current shell session.
source ~/.bashrc
# Prints your system’s current default text editor.
echo $EDITOR

以下に示すように、EDITOR変数が好みのエディターに設定されていることを確認します。

変更の適用と検証
変更の適用と検証

最初のAnsibleVaultの作成と暗号化

デフォルトのボールトエディタを設定したので、最初のボールトを作成します。 ユーザー名、パスワード、秘密のアクセスキーなどの機密情報を含むファイルを作成して暗号化します。

を実行します ansible-vault コマンド、AnsibleVaultと対話するためのメインインターフェイス。

1.次のコマンドを実行して、 secret.yml ファイル。 Ansibleは、JSONなどの他のデータ形式と比較して人間が読める形式であるYAMLを使用します。

ansible-vault create secret.yml

ファイルのパスワードを入力して確認するように求められます。 このパスワードを使用して、ファイルを暗号化および復号化します secret.yml 後でファイルするので、覚えやすい強力なパスワードを選択してください。

パスワードを使用したsecret.ymlファイルの作成
の作成 secret.yml パスワード付きのファイル

2.ボールトのパスワードを設定した後、デフォルトのテキストエディタは空のファイルを開きます。 ファイルに保存したい機密情報を入力して保存し、エディターを閉じます。

このチュートリアルでは、aws_access_key変数とaws_secret_key変数を secret.yml ファイル。 この時点で、Ansibleは secret.yml ファイルであり、ボールトのパスワードを知らない限り、他の誰もボールトのコンテンツを読み取ることはできません。

機密情報の提供(秘密)
機密情報の提供(秘密)

3. catコマンドを実行して、 secret.yml パスワードなしのファイル。

以下に示すように、ランダムな数字が表示されている場合は、ファイルのコンテンツが暗号化されていることを確認できます。 ファイルの上部にある$ANSIBLE_VAULT;1.1; AES256ヘッダーは、ファイルがAnsibleVaultで暗号化されていることを示しています。 AES256 暗号。

Advanced Encryption Standard(AES)は、同じキーを使用してデータを暗号化および復号化する対称キーアルゴリズムです。

Vaultのパスワードなしでsecret.ymlファイルを表示する
を表示する secret.yml Vaultのパスワードなしのファイル

既存のファイルの暗号化

自動的に暗号化されるファイルを最初から作成しました。 しかし、既存のファイルを暗号化するのはどうですか? Ansibleは 暗号化 指定されたファイルを暗号化するサブコマンド。 既存のファイルを暗号化する方法を確認するには、Ansible変数を含む特定のファイルを暗号化します。

次のコマンドを実行してファイルを暗号化します(vars.yml)。

ansible-vault encrypt vars.yml

あなたが作成したときのように secret.yml 初めてファイルを作成すると、パスワードの入力を求められます vars.yml ファイル。

今回はデフォルトのエディタが開きません。 vars.yml ファイルが既に存在します。 代わりに、 暗号化に成功 以下に示すように、Ansibleがファイルを暗号化したことを示すメッセージ。

既存のファイルの暗号化(vars.yml)
既存のファイルの暗号化(vars.yml)。

次に、以下のcatコマンドを実行して、Ansibleが暗号化されていることを確認します。 vars.yml ファイル。

暗号化された既存のファイルの検証
暗号化された既存のファイルの検証

AnsibleVaultからのデータの復号化

ファイルを暗号化して安全にする方法を見てきました。 しかし、ファイルのコンテンツを表示する必要がある場合、ファイルをどのように復号化しますか? ファイルの復号化は、毎回パスワードを入力せずに暗号化されたファイルを編集したり、その内容を読み取ったりする場合に役立ちます。 そしてAnsibleの 復号化 サブコマンドが便利です。

1.次のコマンドを実行して、secret.ymlファイルを復号化します。

復号化サブコマンドは、暗号化されたファイルのパスを唯一の引数として使用します。

ansible-vault decrypt secret.yml

ファイルのパスワードを入力すると、ファイルの内容が復号化され、プレーンテキストでディスクに書き込まれます。

ファイルデータの復号化
ファイルデータの復号化

2.次に、catコマンドを実行して、復号化されたコンテンツを表示します。 secret.yml ファイル。

あなたは以下の内容を見ることができます secret.yml 暗号化せずに端末に印刷されたファイル。 この時点で、ファイル内の任意の行を心ゆくまで追加、編集、または削除できます。

心ゆくまでファイル
心ゆくまでファイル

3.最後に、以下のコマンドを実行して、 secret.yml ファイルを作成し、ファイルの内容を安全に保つためのパスワードを入力します。

ansible-vault encrypt secret.yml
復号化されたファイルの暗号化(secret.yml)
復号化されたファイルの暗号化(secret.yml)。

AnsibleVaultのパスワードの更新

ファイルを暗号化および復号化するたびにパスワードを入力する必要があることを確認しました。 ただし、ファイルを復号化せずに、ファイルのパスワードのみを更新したい場合もあります。 もしそうなら、あなたは使用する必要があります rekey サブコマンド。 このサブコマンドを使用すると、ファイルのパスワードを自由に変更できます。

次のコマンドを実行して、 secret.yml ファイル。

rekeyサブコマンドは、暗号化されたファイルのパスを唯一の引数として使用します。

ansible-vault rekey secret.yml

以下に示すように、ファイルの現在のパスワードに続けて新しいパスワードを入力します。

この時点で、古いパスワードはファイルを復号化するために機能しなくなります。

AnsibleVaultのパスワードの更新
AnsibleVaultのパスワードの更新

次に、以下のコマンドを実行して、 secret.yml

ansible-vault decrypt secret.yml

プロンプトが表示されたら古いパスワードを入力すると、次のようなエラーメッセージが表示されます。 復号化に失敗しました、以下に示すように。 この出力は、ファイルのパスワードが正常に更新されたことを確認します。

新しいパスワードの確認が有効になっている
新しいパスワードの確認が有効になっている

プレイブックとモジュールでの保護されたデータの使用

ファイルを暗号化および復号化するコマンドの実行が機能することを確認しました。 ただし、アプリケーションのプロセスを安全に自動化する場合は、プレイブックとモジュールを使用する必要があります。

1. Ansible構成ファイルを開きます(〜/ .ansible.cfg)エディターで、Ansibleの設定が含まれています。

次のコードをコピーして、最後に貼り付けます 〜/ .ansible.cfg ファイルを作成し、変更を保存して、エディターを閉じます。 このコードは、Ansibleにインベントリファイルを探すように指示します(〜/ .ansible-hosts)

[defaults]
hostfile = ~/.ansible-hosts

2.次に、 〜/ .ansible-hosts ファイル。Ansible管理ノードが管理できるホストのインベントリが含まれています。

を入力します 〜/ .ansible-hosts 次のコード行でファイルを作成し、変更を保存してファイルを閉じます。 このコードは、ローカル接続タイプを介してローカルホストを管理できることをAnsibleに通知します。

localhost ansible_connection=local

3.以下のコマンドを実行して、新しい暗号化ファイルを作成します。 ファイルには任意の名前を付けることができますが、このチュートリアルではファイルの名前はhelloworld.ymlです。

ansible-vault create helloworld.yml
Ansible Playbookの作成(helloworld.yml)
Ansible Playbookの作成(helloworld.yml)。

以下のコードをに入力します helloworld.yml ファイルを作成し、変更を保存してエディタを閉じます。

このコードは、インベントリ内のすべてのホストにhelloworldメッセージを出力する基本的なAnsibleプレイブックです。 コードブロックの上部にある—記号は、YAMLドキュメントの開始を示します。

---

- hosts: all # Sets to perform the task to all hosts in the inventory 
  tasks: # Sets the tasks to perform
    - shell: echo 'hello world' # Prints a 'hello world' message

4.最後に、以下のansible-playbookコマンドを実行し、続いて–ask-vault-passオプションを実行して、インベントリ内のすべてのホストでhelloworld.ymlプレイブックを実行します。

ansible-playbook --ask-vault-pass helloworld.yml

のパスワードを入力します helloworld.yml プロンプトが表示されたらファイル。 以下に示すように、プレイブックの実行は成功しています。

  • ok = 2 –両方のタスクが正常に実行されたことを示します。
  • 変更=1 –タスクがシステムの状態に1つの変更を加えたことを示します。 この場合、シェルにhelloworldメッセージを書き込みました。
  • unreachableとfailedは両方とも0です–実行中に到達不能または失敗したホストがないことを示します。
プレイブックの実行
プレイブックの実行

パスワードファイルでのAnsibleVaultの使用

1回限りのタスクを実行するときにパスワードを手動で入力することはできますが、実際の使用には実用的ではありません。

ファイルを暗号化および復号化するためのパスワードを提供するためのより良い方法は、パスワードファイルを使用することです。 このようにして、パスワードを安全な場所に保存でき、Ansibleは必要なファイルからパスワードを読み取ります。

1.以下のコマンドを実行して、AnsibleVaultのパスワードを次のファイルに保存します。 .vault_pass。 my_vault_passwordを実際のボールトパスワードに置き換えます。

echo 'my_vault_password' > .vault_pass

2.次に、以下の各コマンドを実行して所有権を変更します(chown)ファイルをルートに変更し、の権限を変更します .vault_pass ファイル。 これらのコマンドは、あなた(rootユーザー)だけがファイルの読み取りと書き込みを行えるようにします。

# Change ownership of the file to root user
chown root:root .vault_pass
# Change file permissions to root only (read and write permissions)
chmod 700 .vault_pass

3.最後に、以下のansible-playbookコマンドを実行し、続いて–vault-password-fileオプションを実行して、パスワードファイル(helloworld.yml)を使用してプレイブック(helloworld.yml)を実行します。.vault_pass)。

ansible-playbook --vault-password-file=.vault_pass helloworld.yml

以下で、Ansibleが暗号化されたファイルのパスワードを要求せずにプレイブックを実行したことに注意してください。

パスワードファイルを使用したPlaybookの実行
パスワードファイルを使用したPlaybookの実行

結論

このチュートリアルでは、Ansible Vaultを使用して、Ansibleプレイブックとタスクの機密データを暗号化および復号化する方法を学習しました。 パスワードファイルを使用して、AnsibleVaultのパスワードを安全な場所に保存しました。 この動作は、プレイブックを実行する際のユーザーの介入を減らすのに役立ちます。

この新たに発見された知識により、データのセキュリティを気にすることなく、機密データを自信を持って暗号化し、プレイブックを他のユーザーと共有できるようになりました。

使用する場合 LastPass パスワード管理のために、なぜですか AnsibleVaultのパスワードをLastPassに保存します Ansibleは必要に応じて自動的に取得しますか?

The post AnsibleVaultで秘密を守る appeared first on Gamingsym Japan.