vm.gowatana.jp

NEOにほんごVMware(仮)

Idem で Azure を操作してみる。

JAPAN VMUG Summer Meeting With BIGLOBE の LT(今日からはじめた Idem と Aria Guardrails)で、Idem & Aria Guardrails の様子を紹介しました。idem は、Aria Guardrails のポリシー ルールでも利用されています。

vmug-jp.connpass.com

 

今回の内容です。

 

1. Idem について

idem は、VMware の OSS クラウド自動化プラットフォーム プロジェクトで、名前はidempotent(冪等性)に由来します。Salt(SaltStack)の流れをくむもののようです。

Desired State(あらかじめ定義された状態)に設定を収束する機能で、環境構築 / 設定変更の自動化だけでなく、セキュリティ設定の自動修正など(つまり Aria Guardrails)でも活用されます。

そして、構成ファイル(Salt の .sls)を、既存環境から自動生成できるようになっています。

www.idemproject.io

 

idem 自体やプラグインなどは、GitLab でホストされています。

 

idem CLI は Python 3.x ベースのツールで、POP(Plugin Oriented Programming)という仕組みにより、操作対象のプラグインを追加して利用します。

 

こちらのブログも参考になります。

octo.vmware.com

 

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 を操作してみる話でした。

続き&録画はこちら。