JAPAN VMUG Summer Meeting With BIGLOBE の LT(今日からはじめた Idem と Aria Guardrails)で、Idem & Aria Guardrails の様子を紹介しました。idem は、Aria Guardrails のポリシー ルールでも利用されています。
今回の内容です。
- 1. Idem について
- 2. 今回の環境
- 3. idem のインストール
- 4. Azure への接続
- 5. idem での Azure 操作(リソース グループ)
- 6. idem での Azure 操作(仮想マシン)
1. Idem について
idem は、VMware の OSS クラウド自動化プラットフォーム プロジェクトで、名前はidempotent(冪等性)に由来します。Salt(SaltStack)の流れをくむもののようです。
Desired State(あらかじめ定義された状態)に設定を収束する機能で、環境構築 / 設定変更の自動化だけでなく、セキュリティ設定の自動修正など(つまり Aria Guardrails)でも活用されます。
そして、構成ファイル(Salt の .sls)を、既存環境から自動生成できるようになっています。
idem 自体やプラグインなどは、GitLab でホストされています。
idem CLI は Python 3.x ベースのツールで、POP(Plugin Oriented Programming)という仕組みにより、操作対象のプラグインを追加して利用します。
こちらのブログも参考になります。
2. 今回の環境
Photon OS 5.0 に idem をインストールして、Azure を操作してみます。
idem 実行環境
Photon OS 5.0 です。
# cat /etc/photon-release VMware Photon OS 5.0 PHOTON_BUILD_NUMBER=dde71ec57
Python 3.11 がインストールされています。
# tdnf update python3 # python -V Python 3.11.0
Python では、venv で idem 用の環境を作成しておきます。
$ python -m venv idem
OS ユーザにログインしなおすたびに、venv の環境変数を読み込みます。
$ source ./idem/bin/activate (idem)$
Azure リソース グループ / 仮想マシン
今回はデモ用に リソース グループと仮想マシンを1つずつ作成してあります。
- リソース グループ: rg-idem
- 仮想マシン: vm01
3. idem のインストール
idem は、pip でインストールします。
(idem)# pip -V pip 22.3 from /root/idem/lib/python3.11/site-packages/pip (python 3.11)
idem をインストールします。
(idem)# pip install idem
idem の CLI が実行可能になったことを確認しておきます。
(idem)# idem --version idem 23.1.2
操作対象ごとに、「idem-~」という名前の pip モジュールをインストールします。今回は Azure を操作するので、idem-azure をインストールします。
ただし、実際には idem-azure をインストールすれば依存関係により idem もインストールされるはずです。
(idem)# pip install idem-azure
4. Azure への接続
Azure 側でアプリ登録 & IAM 設定を実施して、idem 側では ID と Secret を記載したファイルを用意します。
4-1. Azure 側の事前設定
Azure 側では、一般的な Azure 連携と同様に、アプリの登録とアクセス制御(IAM)設定が必要です。
アプリの登録
Azure Acitive Directory を開いて、「アプリの登録」→「新規登録」をクリックします。
アプリの名前(今回は idem-azure)を入力して、「登録」をクリックします。
登録したアプリ(idem-azure)の「概要」画面で、下記を確認しておきます。
- アプリケーション(クライアント)ID
- ディレクトリ(テナント)ID
クライアント シークレットの生成
登録したアプリ(idem-azure)の、「証明書とシークレット」→「新しいクライアント シークレット」をクリックして、クライアント シークレットを生成します。
「値」の文字列がクライアント シークレットなので、テキスト エディタなどに保存しておきます。
アクセス制御(IAM)の設定
今回は、rg-idem リソース グループのみを操作します。
リソース グループ「rg-idem」を開いて、「アクセス制御 (IAM )」→「追加」から、下記のようにロールを割り当てます。
- ロール: 「特権管理者ロール」タブ →「共同作成者」
- メンバー: 「メンバーを選択する」をクリック →「idem-azure」を選択
結果として、下記のようなロール割り当てになります。
サブスクリプション ID の確認
サブスクリプション ID は、リソース グループの「概要」などから確認しておきます。
4-2. idem 側の接続設定
接続先の情報を記載したファイルを作成しておきます。
credentials.yaml
azure: default: client_id: "アプリケーション(クライアント)ID" secret: "クライアント シークレットの値" subscription_id: "サブスクリプション ID" tenant: "ディレクトリ(テナント)ID"
idem encrypt コマンドを実行して、接続先を記載したファイルを暗号化した .fernet ファイルを生成します。このとき、復号化のたまのキーが出力されます。
(idem)$ idem encrypt ./credentials.yaml k5mYRrvsMVnpJYq9Aj6aNOHPcMdaOJ8VGBNabmShRAI=
.fernet ファイルのパスとキーを、環境変数に格納しておきます。
$ export ACCT_FILE=$(pwd)/credentials.yaml.fernet $ export ACCT_KEY="k5mYRrvsMVnpJYq9Aj6aNOHPcMdaOJ8VGBNabmShRAI="
5. idem での Azure 操作(リソース グループ)
5-1. State(.sls / 構成情報)の取得
idem では、「idem describe」で既存環境から構成情報を出力できます。構成情報は .sls(SaLt State)の形式です。azure.resource_management.resource_groups で、参照可能なリソース グループがすべて取得できます。ちなみに今回は IAM の設定により rg-idem リソース グループのみ取得できます。
$ idem describe azure.resource_management.resource_groups
特定のリソースのみ取得するには、フィルターを指定します。
$ idem describe azure.resource_management.resource_groups --filter="[?resource[?resource_group_name=='rg-idem']]"
下記のようにリダイレクトでファイルに出力できます。
idem describe azure.resource_management.resource_groups > azure-rg_rg-idem.sls
5-2. Drift(差分)の反映
.sls ファイルの内容をもとに、「idem state」で Drift(差分)を反映できます。
$ idem state ./azure-rg_rg-idem.sls
Drift があるか確認のみの場合は、「--test」オプションを指定します。
$ idem state ./azure-rg_rg-idem.sls --test
6. idem での Azure 操作(仮想マシン)
6-1. State(.sls / 構成情報)の取得
仮想マシンは、azure.compute.virtual_machines です。
$ idem describe azure.compute.virtual_machines
リソースグループと同様、フィルターを指定できます。
$ idem describe azure.compute.virtual_machines --filter="[?resource[?virtual_machine_name=='vm01']]"
Drift を反映してみるために、vm01 の情報を azure-vm_vm01.sls ファイルに保存しておきます。
$ idem describe azure.compute.virtual_machines --filter="[?resource[?virtual_machine_name=='vm01']]" > azure-vm_vm01.sls
azure-vm_vm01.sls には、下記のように vm01 の構成情報が出力されます。
6-2. Drift(差分)の反映
今回は、Azure 仮想マシンのタグを変更してみます。
vm01 のタグを変更した azure-vm_vm01_edit.sls を用意しました。
idem state を「-t(--test)」オプションで実行してみると、差分が old: / new: で表示されます。
$ idem state ./azure-vm_vm01_edit.sls --test
「--test」オプションなしで実行すると、vm01 に Drift が反映されます。
$ idem state ./azure-vm_vm01_edit.sls
Azure Portal でも、タグが変更されたことを確認できます。
以上、idem で Azure を操作してみる話でした。
続き&録画はこちら。