Young Leaves

Azure のリソースロックについて

今回はAzure リソースの意図しない設定変更や削除を保護する目的として利用されるリソースロックの機能について説明します。

リソースロックとは

リソースロックとは、ユーザーがAzure リソースを誤って変更・削除しないため、Azure の各リソースに対し設定できる機能です。リソースロックを設定することで、開発者や運用担当者の誤ったAzure リソースの操作を防ぐことができます。

リソースロックは、Azure のリソースに対してのみロックを行うものであり、リソースのOSやデータに対する変更は制限はしません。例えば、読み取り専用のリソースロックをLinux OS の仮想マシンに作成しても、OS 内部の設定変更、追加等は制限されません。

リソースロックのスコープ

リソースロックはAzure の各リソースに設定でき、設定したリソースに対してロックが適用されます。また、リソースロックは親スコープで設定するとロックを継承します。例えば、RG というリソースグループにリソースロックを設定すると、RG1 内の全てのリソースにロックが適用されます。サブスクリプションにリソースロックを設定すると、サブスクリプションに含まれる全てのリソースに対してロックが適用されます。リソースロックは全てのユーザーに対し有効となり、RBAC 等のアクセス権限より優先されます。

ロックの種類

リソースロックの種類には削除と読み取り専用の2種類があります。各種類の説明につきましては以下の通りとなります。

削除

リソースの作成、変更、実行は許可し、削除のみ制限します。リソースの作成、変更、実行は行うけど削除されると困るリソースに対して設定します。例えば、構築済みのリソースに対して設定することで、リソースの変更や実行を許可し削除だけ制限するといった使い方もできます。

読み取り専用

リソースの読み取りのみ許可し、作成、変更、実行、削除を制限します。リソースの作成、変更、削除の制限に加え実行の制限も行うため、仮想マシン等のリソースの起動や停止も制限できます。そのため、読み取り専用のリソースロックを親スコープ等で作成する際には注意が必要です。親スコープの継承等により複数のリソースロックが適用される場合は、制限の厳しいロックが適用されます。

リソースロックの作成・削除

リソースロックを作成する方法は以下の通りとなります。

  • Azure Portal
  • Azure CLI
  • PowerShell
  • Terraform 等のIaC ツール

今回はAzure CLI を使用したリソースロックの作成を行います。Azure CLI の実行環境はAzure Cloud Shell を使用して実行します。

Azure CLI

Azure CLI でリソースロックを作成するには、「az lock create」コマンドを使用します。例えば、「testgroup」というリソースグループに所属している仮想マシン「testvm」に対し、「testlock」というロック名で「削除」のリソースロックを作成するコマンドは以下の通りとなります。

bash;# 仮想マシンに対して削除のリソースロックを作成する
az lock create --name testlock \
    --lock-type      CanNotDelete \
    --resource-group testgroup \
    --resource-type  Microsoft.Compute/virtualMachines \
    --resource       testvm

各オプションの説明は以下の通りとなります。

locktype

ロックの種類を指定します。削除の場合はCanNotDelete、読み取り専用の場合はReadOnlyを設定します。

resource-group

リソースグループを指定します。resouce-typeとresourceを設定せずresouce-groupのみ設定した場合はリソースグループにロックを作成します。

resource-type

リソースの種類を指定します。リソースの種類はリソースエクスプローラー等で調べることができます。

resource

ロックを作成するリソース名を指定します。

作成したリソースロックを確認するには「az lock list」コマンドを使用します。何も指定せず「az lock list」コマンドを実行すると、全てのリソースロックを確認することができます。上記で作成した仮想マシンのリソースロックを確認するコマンドは以下の通りとなります。オプションについては作成時と同じ内容となるため省略します。

# 仮想マシンに作成したリソースロックを表示する
az lock list --resource testvm \
    --resource-group testgroup \
    --resource-type  Microsoft.Compute/virtualMachines

リソースロックを削除するには「az lock delete」コマンドを使用します。仮想マシンに作成した「testlock」というリソースロックを削除するコマンドは以下の通りとなります。オプションについては作成時と同じ内容となるため省略します。

# 仮想マシンに作成したリソースロックを削除する
az lock delete --name testlock \
    --resource-group testgroup \
    --resource-type  Microsoft.Compute/virtualMachines \
    --resource       testvm

まとめ

  • リソースロックはAzure リソースの不用意な作成、変更、実行、削除を事前に防ぐための機能
  • リソースロックは継承する。親スコープでリソースロックを設定すると子スコープにも適用される
  • リソースロックには削除と読み取り専用がある
  • Azure CLI でリソースロックを作成するには「az lock」コマンドを使用する

参考資料