Azrue Resource Manager(ARM)にはリソースロック機能があります。
何をするものですが
ロールベースのアクセス制御(RBAC)は特定ユーザーの操作を制限するものですが、リソースロック機能は管理側ですべてのユーザーにCanNotDelete(削除不可)またはReadOnly(読み取り専用)のどちらかの状態にリソースをロックする機能です。
※ただし現状Azure PowerShellで指定できるのはCanNotDeleteのみっぽいです
削除不可はリソースに対して変更などは可能ですが削除をできなくします。読み取り専用はそのままですね。
ロックを制御できるのは所有者かユーザーアクセス管理者だけになります。
またロックは継承されます。その際、最も厳しいロックの状態が優先されます。(親リソースにReadOnlyが付与されている場合、子リソースにCanNotDeleteを付与してもReadOnlyのほうが強いのでReadOnlyが優先されます)
ロックを制御するには
REST APIかAzure PowerShellを利用します。Azure PowerShellの場合、 New-AzureRmResourceLock を使用します。
> New-AzureRmResourceLock -LockLevel CanNotDelete -LockName samplelock -ResourceName test -ResourceType Microsoft.Network/publicIPAddresses -ResourceGroupName testgroup 確認 Are you sure you want to create the following lock: /subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/testgroup/providers/Microsoft.Network/publicIPAddresses/test/providers/Microsoft.Authorization/locks/samplelock [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y Name : samplelock ResourceId : /subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/testgroup/providers/Micros oft.Network/publicIPAddresses/test/providers/Microsoft.Authorization/locks/samplelock ResourceName : test ResourceType : Microsoft.Network/publicIPAddresses ExtensionResourceName : samplelock ExtensionResourceType : Microsoft.Authorization/locks ResourceGroupName : testgroup SubscriptionId : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Properties : @{Level=CanNotDelete} LockId : /subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/testgroup/providers/Micros oft.Network/publicIPAddresses/test/providers/Microsoft.Authorization/locks/samplelock
これで削除不可になりました。実際に削除してみるとエラーが発生して削除することができません。(サブスクリプションの所有者でも!)
ロックを解除(削除)するには Remove-AzureRmResourceLock を使用します。
> Remove-AzureRmResourceLock -LockName samplelock -ResourceName test -ResourceType Microsoft.Network/publicIPAddresses -ResourceGroupName testgroup
その他
ロックはARMテンプレート内でも利用できます。
まとめ
うまく活用して不慮の事故を未然に防ぎましょう。
See Also: