{Azure Resource Manager}リソースをロックしてインフラストラクチャを保護する

 

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/lock-resources?tabs=json
https://learn.microsoft.com/ja-jp/azure/virtual-machines/tag-cli
https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/resource-providers-and-types

管理者であれば、
Azure サブスクリプション
リソース グループ、
またはリソースをロックして、ユーザーの不注意による削除や変更から保護できます。


CanNotDelete は、正規ユーザーはリソースの読み取りと変更を実行できますが、削除ができないことを示します。
ReadOnly は、正規ユーザーはリソースの読み取りを実行できますが、削除または更新ができないことを示します。


vm01とvm02をそれぞれCanNotDeleteとReadOnlyで作成し、下記を確認

vm01はタグ付与できるが、削除できない
vm02はタグ付与も削除もどちらもできない

 

-- 1. 前作業

az login --use-device-code
az account show

az version

az configure --list-defaults
az configure --defaults location=japaneast
az configure --list-defaults

az group create \
--name rg9999999 \
--location japaneast


az group list
az upgrade


-- 2. vmの作成

az vm create \
--resource-group rg9999999 \
--name vm01 \
--image UbuntuLTS \
--size Standard_B1ls \
--admin-username azureuser \
--generate-ssh-keys \
--storage-sku Standard_LRS

az vm create \
--resource-group rg9999999 \
--name vm02 \
--image UbuntuLTS \
--size Standard_B1ls \
--admin-username azureuser \
--generate-ssh-keys \
--storage-sku Standard_LRS

az vm list \
--resource-group rg9999999

 

-- 3. リソースのロック

az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table

az provider show --namespace Microsoft.Compute --query "resourceTypes[*].resourceType" --out table


az lock create \
--name lock01 \
--lock-type CanNotDelete \
--resource-group rg9999999 \
--resource vm01 \
--resource-type Microsoft.Compute/virtualMachines


az lock create \
--name lock02 \
--lock-type ReadOnly \
--resource-group rg9999999 \
--resource vm02 \
--resource-type Microsoft.Compute/virtualMachines


az lock list


-- 4. タグの付与(ロックあり)

az vm update \
--resource-group rg9999999 \
--name vm01 \
--set tags.key1=val1 tags.key2=val2

az vm update \
--resource-group rg9999999 \
--name vm02 \
--set tags.key1=val1 tags.key2=val2

→ (ScopeLocked)エラー

az vm show \
--resource-group rg9999999 \
--name vm01 \
--query tags

az vm show \
--resource-group rg9999999 \
--name vm02 \
--query tags

 


-- 5. vmの削除(ロックあり)

az vm delete \
--resource-group rg9999999 \
--name vm01 \
--yes

→ (ScopeLocked)エラー

az vm delete \
--resource-group rg9999999 \
--name vm02 \
--yes

→ (ScopeLocked)エラー

-- 6. ロック解除

 

az lock delete \
--name lock01 \
--resource-group rg9999999 \
--resource vm01 \
--resource-type Microsoft.Compute/virtualMachines

az lock delete \
--name lock02 \
--resource-group rg9999999 \
--resource vm02 \
--resource-type Microsoft.Compute/virtualMachines

az lock list


-- 7. タグの付与(ロック解除後)


az vm update \
--resource-group rg9999999 \
--name vm01 \
--set tags.key1=val1 tags.key2=val2

az vm update \
--resource-group rg9999999 \
--name vm02 \
--set tags.key1=val1 tags.key2=val2


az vm show \
--resource-group rg9999999 \
--name vm01 \
--query tags

az vm show \
--resource-group rg9999999 \
--name vm02 \
--query tags

 

-- 8. vmの削除(ロック解除後)

az vm delete \
--resource-group rg9999999 \
--name vm01 \
--yes


az vm delete \
--resource-group rg9999999 \
--name vm02 \
--yes

az vm list \
--resource-group rg9999999


-- 9. クリーンアップ


az group list

az group delete \
--name rg9999999 \
--yes

az group delete \
--name NetworkWatcherRG \
--yes