Ansible TowerでAzure Key Vaultから認証情報を取得する

こんにちは、レッドハットでAnsibleのテクニカルサポートエンジニアをしている八木澤(ひよこ大佐)です。

システム運用では、アクセス先のユーザー名やパスワードなどの機密情報の管理に気を配る必要があります。通常、Ansible Towerに登録した認証情報などは、暗号化されPostgreSQLのデータベース内に保持されます。そのため、特別な操作をすることなく認証情報を安全に保管することができます。

しかし、運用ポリシーによっては認証情報などを「Microsoft Azure Key Vault」や「CyberArk AIM」などの外部の認証情報管理サービスに一元的に保管している場合があり、Towerに機密情報を保持することができない場合があります。Ansible Towerではそのような外部の認証情報管理サービスと連携し、認証情報を取得することが可能です。

今回は、「Microsoft Azure Key Vault」を利用して認証情報を取得する実際の手順をご紹介します。

azure.microsoft.com

その他のサービスの詳細な設定内容については、以下のAnsible Tower公式ドキュメントを参照してください。

12. シークレット管理システム — Ansible Tower User Guide v3.6.3

Azure側の設定

では実際に設定してみましょう。 Ansible TowerでKey Vaultを利用するためには、以下の情報を確認する必要があります。

Azure側の情報 概要
Vault URL (DNS名) Key Vaultで設定されるURLです。確認方法については後ほど解説します。(例: https://xxxxxx.vault.azure.net)
クライアント ID Azure ADの「アプリの登録」から登録した際に発行されるIDです。
クライアントシークレット Azure ADの「アプリの登録」から登録した際に発行されるシークレットキーです。
テナント ID Azure ADの設定画面から確認することができます。

クライアントIDおよびクライアントシークレットの登録方法については、本記事では割愛します。詳細な登録方法を確認したい場合は、以下の公式ドキュメントを確認してください。

ポータルで Azure AD アプリとサービス プリンシパルを作成する - Microsoft identity platform | Microsoft Docs

※私が作成した以下のスライドの19ページ以降でもクライアントIDおよびシークレットの登録方法をスクリーンショット付きで紹介しています。

speakerdeck.com

キーコンテナーの作成とシークレットの保存

シークレットを保存する前に、まずはキーコンテナーを作成する必要があります。キーコンテナーは以下の手順で作成できます。

f:id:hiyokotaisa:20200518215358p:plain
「すべてのサービス」から「キーコンテナー」を選択

f:id:hiyokotaisa:20200518220036p:plain
「キーコンテナーの作成」をクリック

必要事項を入力しキーコンテナーを作成したら、実際にシークレットを登録してみましょう。シークレットの画面から、「生成/インポート」をクリックし新規登録画面へ移動します。

f:id:hiyokotaisa:20200518220427p:plain
「生成/インポート」をクリック

生成画面を開いたら、「名前」に適切な名前を、「値」に保存するパスワードを入力します。

f:id:hiyokotaisa:20200518220858p:plain
シークレットを作成

キーを作成したら、後のTowerでの設定のために、作成したシークレットの名前と、キーコンテナーのトップページに表示されているDNS名(Vault URL)を控えておきましょう。

f:id:hiyokotaisa:20200518221522p:plain
DNS名(Vault URL)

アクセスポリシーの設定

デフォルトではAnsible Towerはキーコンテナー内の情報にアクセスする権限がないため、エラーが発生してしまいます。その回避のため、キーコンテナーの設定から「アクセス ポリシー」の設定を開き、クライアントID取得時に登録したアプリに対してアクセス権を付与しておきましょう。

これで、Azure側の設定は完了です。

Tower側の設定

Tower側の操作に移ります。Tower UIから「認証情報」を開き、新規に認証情報を作成します。認証情報のタイプは「Microsoft Azure Key Vault」を選択してください。

f:id:hiyokotaisa:20200518222130p:plain
Microsoft Azure Key Vaultを選択

認証情報には、Azure側で確認した情報を入力します。内容に誤りがないか確認したら、「保存」をクリックしてください。「テスト」をクリックすることで、正しくシークレットを取得できるか確認することもできます。このテストでエラーが発生する場合は、入力したIDやシークレットに誤りがないか、アクセスポリシーが正しく設定されているか今一度確認してください。

f:id:hiyokotaisa:20200518222752p:plain
必要情報を入力し保存

f:id:hiyokotaisa:20200518223051p:plain
設定したシークレットが取得できるかテストすることも可能

マシンクレデンシャルとの関連付け

Key Vaultの認証情報を設定することができましたが、このままではジョブテンプレートに適用することができません。実際にKey Vaultに保存されているシークレットを使用してターゲットノードにログインするためには、マシンクレデンシャルに上記Key Vaultの認証情報を紐付ける必要があります。

まず、マシンクレデンシャルを作成後、「パスワード」の虫眼鏡アイコンをクリックし、「入力ソースの設定」画面を開きます。「認証情報」タブから先程作成したKey Vaultの認証情報を選択し、「次へ」をクリックします。

f:id:hiyokotaisa:20200518223625p:plain
入力ソースの設定

その後、「シークレット名」にKey Vaultで作成したシークレット名を入力し、「OK」をクリックします。

f:id:hiyokotaisa:20200518223833p:plain
シークレット名を入力

あとは通常通りこのマシンクレデンシャルをジョブテンプレートに関連付け、ジョブを実行すれば認証情報を利用することができます。

おわりに

Ansible Towerでは内部に認証情報を保持するだけでなく、外部サービスから認証情報を取得することもできます。さまざまな運用形態に柔軟に対応することができますので、ぜひ一度試してみてください。

Happy Automation!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。