ロックを使ってAzureのリソースを変更されないようにしてみた
Azureにはロックという機能があります。
ロックはリソースの削除や変更を防止する事が出来る機能で、操作ミス等による不用意なリソース変更を防げます。
今回はロックをリソースグループや仮想マシンに適用する事により、仮想マシン(ディスク等の関連アイテムを含む)の削除や起動停止の制限を試してみました。
※今回はAzure Blueprintsを使ったロックは試しておりません。
Azure ロックの種類や適用範囲
ロックの種類
ロックの種類については非常にシンプルで2種類のみになります。
ロックの種類 | |
削除 | リソースの削除が出来なくなる。VMの場合起動停止やサイズ設定変更は可能。 |
読み取り専用 | 閲覧者と同等の権限でリソースの情報を見る事しか出来ない。VMの場合は設定変更だけではなく起動停止なども出来ない。 |
スコープ(適用範囲)の種類
適用範囲についても非常にシンプルで3種類のみになります。上位に適用した場合は配下のリソースにも適用されます。
スコープ(適用範囲) | |
サブスクリプション(最上位) | サブスクリプションのアイテム全体にロックを割り当てる |
リソースグループ | リソースグループ内のアイテムすべてにロックを割り当てる |
リソース(アイテム単位) | リソース(アイテム)個別にロックを割りあてる |
ロックを適用した場合の制限イメージ(仮想マシン)
実際にロックを適用した場合の動作はどうなるでしょうか。リソースグループとそのリソースグループにある仮想マシンに対して以下のロックを適用した場合を想定します。
-
-
- リソースグループ
- 読み取り専用
- 仮想マシン
- 削除
- リソースグループ
-
この仮想マシンは起動停止、設定変更、削除が出来ない状態になります。
複数のロックがある場合は強い権限(読み取り専用)の方が優先されます。この仮想マシン場合は読み取り専用のロックが適用されます。
なお、RBACの適用状況関わらずロックは全ユーザーに適用されます。ロック解除してからでないとリソースの削除や変更が出来ません。ロックの適用解除には所有者 もしくは ユーザー アクセス管理者の権限が必要となります。
次は実際にリソースグループや仮想マシンにロックを適用して確認してみます。
※通常はリソースグループに弱い権限(削除)、リソース単位で読み取り専用といった強い権限を割り当てます。
Azure仮想マシンにロックを適用する
今回は以下のサンプル環境で試しております。
-
-
- リソースグループ名:test-rg
- VM名:lock-test-vm-01(リソースグループはtest-rg)
-
仮想マシンに削除のロックを適用する
まず最初に仮想マシンに削除のロックを適用してみます。
ロック設定 | |
仮想マシンの設定にあるロックで追加を選択します。 | ![]() |
ロックの追加が表示されますので、ロック名、ロックの種類を設定します。 今回はlock-01、削除の選択にしています。 OKをクリックして設定を保存します。 |
![]() |
完了すると設定したロックが表示されます。 |
![]() |
仮想マシンに削除のロックを適用した場合の動作
削除のロックを適用した仮想マシンで動作を確認してみます。
動作確認 | |
仮想マシンのメニューで削除を選択します。 | ![]() |
仮想マシンを削除できませんでしたというメッセージが表示されました。ロックが有効な事が確認出来ました。 | ![]() |
次に仮想マシンを起動してみます。 |
![]() |
仮想マシンを正常に起動する事が出来ました。 | ![]() |
削除のみが出来ない状態である事が確認出来ました。
仮想マシンに読み取り専用のロックを適用する
次は仮想マシンに適用した削除のロックを読み取りに変更してみます。
ロック設定 | |
仮想マシンの設定にあるロックで先ほど設定したlock-01で編集を選択します。 ロックの編集画面で削除から読み取り専用に変更しOKをクリックします。 |
![]() |
lock-01のロックの種類が読み取り専用になっている事を確認します。
|
![]() |
仮想マシンに読み取り専用のロックを適用した場合の動作
仮想マシンに読み取り専用のロックを適用した場合の動作を確認してみます。
動作確認 | |
仮想マシンを起動します。 | ![]() |
仮想マシンを起動できませんでしたというメッセージが表示されました。ロックが有効な事が確認出来ました。 | ![]() |
読み取りのロックの場合は仮想マシンの起動が出来ない事が分かりました。
仮想マシンに接続されているディスク等にはロックが適用されているのか
仮想マシンに接続されているディスクにはロック状況はどうなっているのでしょうか。仮想マシンに読み取り専用のロックを設定した状態で実際に確認してみます。
仮想マシンのロックは接続されているディスクには影響がない事が分かりました。
次はリソースグループにロックを適用してみます。
PowerShellを使ったリソースロックはこちら。
Azure リソースグループにロックを適用する
今回は以下のサンプル環境で試してみました。
-
-
- リソースグループ:test-rg
- 読み取りのロックを適用(lock-02)
- VM:lock-test-vm-01(リソースグループはtest-rg)
- 削除のロックを適用(lock-02)
- リソースグループ:test-rg
-
リソースグループに読み取り専用のロックを適用する
リソースグループに読み取り専用のロックを適用してみます。
ロック設定 | |
リソースグループの設定にあるロックで追加を選択します。 | ![]() |
ロックの追加が表示されますので、ロック名、ロックの種類を設定します。 今回はlock-02、読み取り専用の選択にしています。 OKをクリックして設定を保存します。 |
![]() |
完了するとリソースグループに適用されているロック(スコープがリソースのものを含む)が表示されます。 |
![]() |
仮想マシンのロック適用状況を確認、動作確認
仮想マシンに削除、リソースグループに読み取りのロックを適用した仮想マシンで動作を確認してみます。
動作確認 | |
仮想マシンのロック適用状況を確認してみます。リソースグループのロックと仮想マシンに適用したロック両方が設定されている事が分かります。 | ![]() |
※親リソース(今回の場合はリソースグループ)から引き継がれたロックは親リソース側で編集が必要になります。 | |
仮想マシンを起動してみます。 | ![]() |
仮想マシンを起動できませんでしたというメッセージが表示されました。 |
![]() |
リソースグループに適用されたロック(読み取り)が優先して適用されている事が分かりました。
リソースグループ内の他のリソースへのロック適用状況
リソースグループ内にある他リソースのロック適用状況はどうなっているのでしょうか。仮想マシンに接続されているディスクでロック状況を確認してみます。
動作確認 | |
仮想マシンのメニューでディスクを選択します。仮想マシンに接続されているディスク名が表示されますので選択します。 | ![]() |
ディスクにリソースグループで設定したロックが適用されている事が分かります。 実際にディスクサイズを設定変更して確認してみます。 |
![]() |
ディスクのサイズ変更が出来ない事が分かりました。 | ![]() |
リソースグループ自体を削除してみる
ロックを適用した状態でリソースグループの削除を試してみます。リソースグループにロック設定をした場合も、リソースグループ内のリソース単体にロックを適用した場合も同じ動作になります。
動作確認 | |
リソースグループ自体を削除してみます。 | ![]() |
ロックが有効な為、リソースグループの削除は失敗します。 |
![]() |
※リソースグループの削除を行う場合は、リソースグループ内のすべてのロックが解除されている必要があります。
ロックを適用する場合の注意点
マイクロソフト社のサイトにも記載されておりますが、ロックを適用する事で制限できるのはリソース自体の削除等になります。したがってストレージアカウント等の場合、実際に保管されているデータ等は削除できます。
ロックする事により仮想マシンのリストア出来ないケース等もありますのでこの点は注意が必要です。
ただ間違ってリソースを削除してしまう等を防ぐことが出来るのでとても良いかと思いました。
PowerShellを使ったリソースロックはこちら。
Azure VMでディスクやネットワークインターフェースを纏めて削除する事をこちらで試しております。