Azure Bastionの自動起動停止方法(作成削除をスケジュール実行)
Azure PowerShellやREST APIを利用した、Azure Bastionリソース作成、削除手順です。
Azure Bastionホストは起動停止できません。
仮想マシン(Azure VM)の起動状況や接続しているかどうかに関わらず継続して課金が発生します。
仮想マシンを停止している場合や、接続しない時間帯にAzure Bastionホストを起動しておくことは無駄に課金が掛かる事になります。
停止させて課金を抑えたい所ですが、Azure Bastion自体の起動停止は出来ません。
削除するしか課金を停止手段はありません。
それなら使う時のみ、リソースを作成して削除するようにしようという事で手順をまとめてみました。
Azure PowerShellを使った方法と、REST APIを使った方法を確認してみました。
REST APIはLogic Apps(ロジックアプリ)のワークフローを利用する事でスケジュール化できるようにしています。
※Azure PowerShellの動作確認は、AutomationアカウントのRunbook(PowerShell(7.2))で実施しています。
※Developer SKUは無料で利用できます。
※本手順は検証利用を目的として確認しています。利用する場合は十分にご注意ください。
- 1. PowerShellを使ったAzure Bastion作成、削除
- 2. REST APIを使ってAzure Bastionを作成、削除(Logic Appsを利用)
- 2.1. Azure BastionのREST API
- 2.2. Logic AppsをREST APIのスケジュール実行環境として利用
- 2.3. Logic Appsでシステム割り当てマネージドIDを設定
- 2.4. Logic AppsのワークフローからREST APIを実行してAzure Bastionを作成
- 2.5. ワークフローを実行してAzure Bastionのリソースを作成状況を確認
- 2.6. ワークフローのコピー
- 2.7. Logic AppsのワークフローからREST APIを実行してAzure Bastionを削除
- 2.8. ワークフローを実行してAzure Bastionのリソースを削除状況を確認
- 3. 最後に
PowerShellを使ったAzure Bastion作成、削除
Azure Bastionに関するPowerShellコマンドレット
Azure Bastionのリソース作成などで利用する、主なPowerShellコマンドレットは4つです。
作成、情報取得、更新、削除です。
リソース作成時にはAzure Portalと同じ項目を設定します。
リソース名、リソースグループ名、ロケーション、仮想ネットワークのリソース情報、パブリックIPのリソース情報、SKUなどを指定します。
処理 | Azure PowerShell |
作成 | New-AzBastion |
取得 | Get-AzBastion |
更新 | Set-AzBastion |
削除 | Remove-AzBastion |
作成したAzure Bastionの設定内容
作成したリソースの設定内容です。
Azure BastionのSKUはStandardを想定しています。
パブリックIPはAzure Bastionのリソースと同時に作成しています。
事前に作成されている、仮想ネットワークやサブネットを利用する想定としています。
要素 | 項目 | 設定値 |
パブリックIP | 名前 | bas-pip-01 |
SKU | Standard | |
仮想ネットワーク | 仮想ネットワーク名 | test-vnet-01 |
アドレス空間 | 10.0.0.0/16 | |
サブネット名 | AzureBastionSubnet | |
ループ回数 | 10.0.255.0/26 | |
Bastion | 名前 | bas-01 |
SKU | Standard | |
インスタンス数 | 2 | |
詳細設定 | すべてにチェック (セッションの記録除く) |
※セッションの記録はStandard SKUでは利用できません。
※課金が掛かるリソースのみ(パブリックIPやAzure Bastion)を新規作成する想定としています。
Azure Portalを利用したBastionホストの作成はこちら。
PowerShellを使ってAzure Bastionを作成
Azure PowerShellを利用してAzure Bastionのリソースを作成します。
最初にAzure Bastionのリソースを作成する仮想ネットワーク、サブネットの情報を取得します。
次にパブリックIPアドレス作成、最後にAzure Bastionのリソースを作成しています。
Get-AzVirtualNetwork:仮想ネットワークの情報を取得
New-AzPublicIpAddress:パブリックIPのリソースを作成
New-AzBastion:Azure Bastionのリソースを作成
パブリックIPアドレスのSKUはStandardを指定します。
Azure Bastionの機能は個別に有効、無効を指定します。
※Automationアカウントで利用する想定としています。利用環境に応じてManagedIDの認証処理やサブスクリプションの指定等を削除してください。
※すべてのリソースが、同じリソースグループにある想定になっています。異なるリソースグループを利用する場合は変数の指定を追加、変更してください。
Azure Bastionのリソースを作成するPowerShell | |
|
Automationアカウントのリソース作成から仮想マシン起動を例にしたRunbook作成手順についてはこちらで紹介しています。
Runbookのスケジュール設定についてはこちらの記事で紹介しています。
PowerShellを使ってAzure Bastionを削除する
Azure PowerShellを利用してAzure Bastionのリソースを削除します。
使用したコマンドレットです。
Remove-AzBastion:Azure Bastionのリソースを削除
Remove-AzPublicIpAddress:パブリックIPのリソースを削除
仮想ネットワークやサブネットはそのまま残しています。
※課金が発生するパブリックIPとAzure Bastionのリソースのみ削除しています。
Azure Bastionのリソースを削除するPowerShell | |
|
作成したリソースの設定内容を確認
PowerShellで作成したAzure Bastionのリソースを確認します。
設定にある構成のメニューで確認します。
レベル(SKU)や機能が指定通り有効化されているのが確認できました。
作成したリソースの設定内容を確認 | |
左側のメニューで構成を選択します。 |
—広告—
REST APIを使ってAzure Bastionを作成、削除(Logic Appsを利用)
Azure BastionのREST API
REST APIを利用してAzure Bastionのリソース作成や削除などの操作ができます。
Logic AppsをREST APIのスケジュール実行環境として利用
今回、REST APIをスケジュール実行させる環境としてLogic Appsを利用します。
従量課金(消費)(マルチテナント)のプランで2つのリソースを作成しています。
logic-bas-start-01:リソースを作成
logic-bas-stop-01:リソースを削除
Logic Appsのリソース作成手順についてはこちらの記事で紹介しています。
トリガーやアクションの概要についてもこちらで紹介しています。
Logic Appsでシステム割り当てマネージドIDを設定
Logic AppsのワークフローでAzureのリソース操作を行うために認証が必要となる事があります。
HTTPやAzure Resource Managerのコネクタで認証が必要となります。
今回の手順では、認証にシステム割り当てマネージドIDを利用しています。
Logic Appsのリソースに対して、Azure Bastionのリソース作成に必要なロールを割り当てます。
※割り当ては必要なロールのみに制限する事が推奨されます。
Logic AppsのマネージドID設定 | |
IDのメニューで有効化、Azure ロールの割り当て設定します。
|
|
Logic AppsのワークフローからREST APIを実行してAzure Bastionを作成
ロジックアプリデザイナーを利用してワークフローを作成します。
PowerShellの場合と同様に仮想ネットワークやサブネットは事前にあるリソースを利用しています。
パブリックIPアドレスとAzure Bastionのリソースを作成しています。
-
- 主なワークフローの流れ
- スケジュール設定
- サブスクリプションの読み取り
- 変数設定
- HTTPのアクションでパブリックIPアドレスを作成
- リソースの読み取り
- HTTPのアクションをでAzure Bastionを作成
- 主なワークフローの流れ
リソースの読み取りでは作成したパブリックIPアドレスや仮想ネットワークのリソースIDを取得しています。
Azure Bastionホストを作成 | ||
トリガーを追加します。 ScheduleコネクタにあるRecurrenceのアクションを選択します。 毎朝9時30分(日本時間)に実行されるように設定します。 |
||
Azure Resource Managerコネクタにあるサブスクリプション読み取るアクションでサブスクリプションIDを取得します。 Azure Resource Managerコネクタを利用する場合は接続の作成が必要になります。 |
||
Variablesのコネクタを利用して変数を設定します。 ※アクションの名前は変更できます。分かりやすい名前で設定します。 |
||
【変数の設定内容】
|
||
REST APIを利用してパブリックIPアドレスのリソースを作成します。 HTTPのコネクタから、REST APIを利用できます。 Public IP Addresses – Create Or Update URIで作成するパブリックIPのリソース名を指定してます。 認証の設定も行います。 |
||
詳細パラメーターでAuthentication(認証)を追加します。 認証の種類にはマネージドIDを指定します。 マネージドIDにはシステム割り当てマネージドIDを指定します。 |
||
設定した変数や値を利用します。 式の挿入から関数を利用できます。
|
||
|
||
【リソースグループ名の例】 | ||
仮想ネットワークとパブリックIPのリソースIDを取得します。 【短いリソースIDの指定例】 取得したリソースIDはBastionのリソース作成時に利用します。 |
||
REST APIを利用してAzure Bastionのリソースを作成します。 Bastion Hosts – Create Or Update 認証の設定も行います。 ※設定後のコードビューの値も記載しています。設定内容の詳細はこちらを参照ください。 |
||
bodyで指定するパブリックIPやサブネットのリソースIDは取得した値を利用しています。
|
||
【変数の設定例】
|
||
【コードビューの表示結果】
|
||
作成したワークフローを保存します。
|
||
Logic AppsのワークフローでサブスクリプションIDを取得する方法についてはこちらで紹介しています。
Azure Logic Appsのワークフローを平日のみ実行する方法についてはこちらで紹介しています。
ワークフローを実行してAzure Bastionのリソースを作成状況を確認
ワークフローを実行して結果を確認します。
Azure Bastionのリソースが作成されている事が確認できます。
※今回は手動でワークフローを実行しています。
ワークフローのコピー
Logic Appsの従量課金(マルチテナント)では複製を使ってワークフローをコピーする事ができます。
起動と停止を個別にワークフロー作成する場合などに使うと便利かと思います。
Logic AppsのワークフローからREST APIを実行してAzure Bastionを削除
Azure Bastionのリソースを削除するワークフロー例です。
スケジュール設定、変数設定、HTTPのアクションでREST API実行という流れになります。
※パブリックIPアドレスのリソースも削除しています。
ワークフローを実行してAzure Bastionのリソースを削除状況を確認
ワークフローを実行して結果を確認します。
Azure Bastionのリソースが削除されている事が確認できます。
※今回は手動でワークフローを実行しています。
ワークフローの実行結果 | |
Logic Appsで実行の履歴を確認します。 成功している事が確認できます。 アクティビティログから、パブリックIPアドレスとAzure Bastionのリソースが削除された事が確認できます。 |
|
—広告—
最後に
今回はAzure PowerShellやLogic AppsのワークフローからREST APIを実行してAzure Bastionホストの作成、削除する手順を確認しました。
Logic Appsのワークフローを使う事で、Azure Bastionのリソース作成削除をスケジュール実行できました。
仮想マシンの自動起動停止と組み合わせて使う事でコスト削減も可能かと思いました。
引き続き色々試してみたいと思います。
Logic Appsを使った仮想マシン(Azure VM)の起動停止についてはこちらで紹介しています。
Azure Resource Managerを利用した方法についても紹介しています。
Logic Appsを使ったAzure API Managementの起動停止(論理削除、回復)のスケジュール化についてはこちらで紹介しています。