リソースのロックによる予期せぬ変更の防止Lock resources to prevent unexpected changes

管理者は、サブスクリプション、リソース グループ、またはリソースをロックし、組織の他のユーザーが誤って重要なリソースを削除したり変更したりするのを防止しなければならないことがあります。As an administrator, you may need to lock a subscription, resource group, or resource to prevent other users in your organization from accidentally deleting or modifying critical resources. ロック レベルは CanNotDelete または ReadOnly に設定できます。You can set the lock level to CanNotDelete or ReadOnly. ポータルでは、これらのロックはそれぞれ [削除][読み取り専用] と表示されます。In the portal, the locks are called Delete and Read-only respectively.

  • CanNotDelete は、正規ユーザーはリソースの読み取りと変更を実行できますが、削除は実行できないことを示します。CanNotDelete means authorized users can still read and modify a resource, but they can't delete the resource.
  • ReadOnly は、正規ユーザーはリソースの読み取りを実行できますが、リソースの更新は実行できないことを示します。ReadOnly means authorized users can read a resource, but they can't delete or update the resource. このロックの適用は、すべての正規ユーザーのアクセス許可を、閲覧者ロールによって与えられるアクセス許可に制限することに似ています。Applying this lock is similar to restricting all authorized users to the permissions granted by the Reader role.

ロックが適用されるしくみHow locks are applied

親スコープでロックを適用すると、そのスコープ内のすべてのリソースは同じロックを継承します。When you apply a lock at a parent scope, all resources within that scope inherit the same lock. 後で追加するリソースも、親からロックを継承します。Even resources you add later inherit the lock from the parent. 継承されるロックの中で最も制限の厳しいロックが優先されます。The most restrictive lock in the inheritance takes precedence.

ロールベースのアクセス制御とは異なり、管理ロックを使用すると、すべてのユーザーとロールに対して制限を適用することができます。Unlike role-based access control, you use management locks to apply a restriction across all users and roles. ユーザーとロールのアクセス許可を設定する方法については、「Azure のロールベースのアクセス制御」を参照してください。To learn about setting permissions for users and roles, see Azure Role-based Access Control.

Resource Manager のロックは、管理ウィンドウで実行され、https://management.azure.com に送信される操作で構成される操作のみに適用されます。Resource Manager locks apply only to operations that happen in the management plane, which consists of operations sent to https://management.azure.com. ロックは、リソースが独自の機能を実行する方法を制限しません。The locks do not restrict how resources perform their own functions. リソースの変更は制限されますが、リソースの操作は制限されません。Resource changes are restricted, but resource operations are not restricted. たとえば、SQL Database に対する ReadOnly ロックは、ユーザーによるデータベースの削除または変更を禁止しますが、データベースに対するデータの作成、更新、または削除は禁止しません。For example, a ReadOnly lock on a SQL Database prevents you from deleting or modifying the database, but it does not prevent you from creating, updating, or deleting data in the database. データのトランザクションは https://management.azure.com に送信されないため、これらの操作は許可されます。Data transactions are permitted because those operations are not sent to https://management.azure.com.

ReadOnly を適用すると、読み取り操作のように見えるいくつかの操作には実際に追加のアクションが必要となるため、予期しない結果を招く可能性があります。Applying ReadOnly can lead to unexpected results because some operations that seem like read operations actually require additional actions. たとえば、 ReadOnly ロックをストレージ アカウントに設定すると、すべてのユーザーがキーを一覧表示できなくなります。For example, placing a ReadOnly lock on a storage account prevents all users from listing the keys. 返されるキーは書き込み操作に使用できるため、キーの一覧表示操作は POST 要求を介して処理されます。The list keys operation is handled through a POST request because the returned keys are available for write operations. 別の例として、 ReadOnly ロックを App Service リソースに配置すると、Visual Studio のサーバー エクスプローラーの操作には書き込みアクセスが必要となるため、Visual Studio のサーバー エクスプローラーはリソース用のファイルを表示できなくなります。For another example, placing a ReadOnly lock on an App Service resource prevents Visual Studio Server Explorer from displaying files for the resource because that interaction requires write access.

組織でロックを作成または削除できるユーザーWho can create or delete locks in your organization

管理ロックを作成または削除するには、Microsoft.Authorization/* または Microsoft.Authorization/locks/* アクションにアクセスできる必要があります。To create or delete management locks, you must have access to Microsoft.Authorization/* or Microsoft.Authorization/locks/* actions. 組み込みロールのうち、所有者ユーザー アクセス管理者にのみこれらのアクションが許可されています。Of the built-in roles, only Owner and User Access Administrator are granted those actions.

ポータルPortal

  1. ロックを適用するリソース、リソース グループ、またはサブスクリプションの [設定] ブレードで、 [ロック] を選択します。In the Settings blade for the resource, resource group, or subscription that you wish to lock, select Locks.

    ロックを選択する

  2. ロックを追加するには、 [追加] を選択します。To add a lock, select Add. 親レベルでロックを作成する場合は、親を選択します。If you want to create a lock at a parent level, select the parent. 現在選択されているリソースは、ロックを親から継承します。The currently selected resource inherits the lock from the parent. たとえば、リソース グループをロックすることで、グループのリソースすべてにロックを適用することができます。For example, you could lock the resource group to apply a lock to all its resources.

    ロックを追加する

  3. ロックに名前とロック レベルを指定します。Give the lock a name and lock level. 必要に応じて、ロックについて説明したメモを追加することができます。Optionally, you can add notes that describe the lock.

    ロックを設定する

  4. ロックを削除するには、省略記号 (...) を選択し、表示されるオプションから [削除] を選択します。To delete the lock, select the ellipsis and Delete from the available options.

    ロックを削除する

テンプレートTemplate

次の例では、App Service プラン、Web サイト、および Web サイトに対するロックを作成するテンプレートを示します。The following example shows a template that creates an app service plan, a web site, and a lock on the web site. ロックのリソースの種類は、ロック対象リソースのリソースの種類と /providers/locks です。The resource type of the lock is the resource type of the resource to lock and /providers/locks. ロックの名前は、リソース名に /Microsoft.Authorization/ とロックの名前を連結して作成されます。The name of the lock is created by concatenating the resource name with /Microsoft.Authorization/ and the name of the lock.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "hostingPlanName": {
            "type": "string"
        }
    },
    "variables": {
        "siteName": "[concat('ExampleSite', uniqueString(resourceGroup().id))]"
    },
    "resources": [
        {
            "apiVersion": "2016-09-01",
            "type": "Microsoft.Web/serverfarms",
            "name": "[parameters('hostingPlanName')]",
            "location": "[resourceGroup().location]",
            "sku": {
                "tier": "Free",
                "name": "f1",
                "capacity": 0
            },
            "properties": {
                "targetWorkerCount": 1
            }
        },
        {
            "apiVersion": "2016-08-01",
            "name": "[variables('siteName')]",
            "type": "Microsoft.Web/sites",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
            ],
            "properties": {
                "serverFarmId": "[parameters('hostingPlanName')]"
            }
        },
        {
            "type": "Microsoft.Web/sites/providers/locks",
            "apiVersion": "2016-09-01",
            "name": "[concat(variables('siteName'), '/Microsoft.Authorization/siteLock')]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', variables('siteName'))]"
            ],
            "properties": {
                "level": "CanNotDelete",
                "notes": "Site should not be deleted."
            }
        }
    ]
}

PowerShell を使用してこのテンプレート例をデプロイするには、以下を使用します。To deploy this example template with PowerShell, use:

New-AzureRmResourceGroup -Name sitegroup -Location southcentralus
New-AzureRmResourceGroupDeployment -ResourceGroupName sitegroup -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/lock.json -hostingPlanName plan0103

Azure CLI を使用してこのテンプレート例をデプロイするには、以下を使用します。To deploy this example template with Azure CLI, use:

az group create --name sitegroup --location southcentralus
az group deployment create --resource-group sitegroup --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/lock.json --parameters hostingPlanName=plan0103

PowerShellPowerShell

デプロイされているリソースを Azure PowerShell でロックするには、New-AzureRmResourceLock コマンドを使います。You lock deployed resources with Azure PowerShell by using the New-AzureRmResourceLock command.

リソースをロックするには、対象となるリソースの名前とそのリソース タイプ、リソース グループ名を指定します。To lock a resource, provide the name of the resource, its resource type, and its resource group name.

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName LockSite -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

リソース グループをロックするには、そのリソース グループの名前を指定します。To lock a resource group, provide the name of the resource group.

New-AzureRmResourceLock -LockName LockGroup -LockLevel CanNotDelete -ResourceGroupName exampleresourcegroup

ロックについての情報を取得するには、Get-AzureRmResourceLock を使います。To get information about a lock, use Get-AzureRmResourceLock. サブスクリプション内のすべてのロックを取得するには、次のように入力します。To get all the locks in your subscription, use:

Get-AzureRmResourceLock

特定のリソースのロックをすべて取得するには、次のように入力します。To get all locks for a resource, use:

Get-AzureRmResourceLock -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

特定のリソース グループのロックをすべて取得するには、次のように入力します。To get all locks for a resource group, use:

Get-AzureRmResourceLock -ResourceGroupName exampleresourcegroup

ロックを削除するには、次のように入力します。To delete a lock, use:

$lockId = (Get-AzureRmResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzureRmResourceLock -LockId $lockId

Azure CLIAzure CLI

デプロイされているリソースを Azure CLI でロックするには、az lock create コマンドを使います。You lock deployed resources with Azure CLI by using the az lock create command.

リソースをロックするには、対象となるリソースの名前とそのリソース タイプ、リソース グループ名を指定します。To lock a resource, provide the name of the resource, its resource type, and its resource group name.

az lock create --name LockSite --lock-type CanNotDelete --resource-group exampleresourcegroup --resource-name examplesite --resource-type Microsoft.Web/sites

リソース グループをロックするには、そのリソース グループの名前を指定します。To lock a resource group, provide the name of the resource group.

az lock create --name LockGroup --lock-type CanNotDelete --resource-group exampleresourcegroup

ロックについての情報を取得するには、az lock list を使います。To get information about a lock, use az lock list. サブスクリプション内のすべてのロックを取得するには、次のように入力します。To get all the locks in your subscription, use:

az lock list

特定のリソースのロックをすべて取得するには、次のように入力します。To get all locks for a resource, use:

az lock list --resource-group exampleresourcegroup --resource-name examplesite --namespace Microsoft.Web --resource-type sites --parent ""

特定のリソース グループのロックをすべて取得するには、次のように入力します。To get all locks for a resource group, use:

az lock list --resource-group exampleresourcegroup

ロックを削除するには、次のように入力します。To delete a lock, use:

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --resource-type Microsoft.Web/sites --resource-name examplesite --output tsv --query id)
az lock delete --ids $lockid

REST APIREST API

管理ロック用の REST API を使用して、デプロイ済みのリソースをロックできます。You can lock deployed resources with the REST API for management locks. REST API を使用すると、ロックを作成し、削除できます。また、既存のロックに関する情報を取得することもできます。The REST API enables you to create and delete locks, and retrieve information about existing locks.

ロックを作成するには、次のように実行します。To create a lock, run:

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/locks/{lock-name}?api-version={api-version}

スコープには、サブスクリプション、リソース グループ、またはリソースを使用できます。The scope could be a subscription, resource group, or resource. lock-name には、ロックの名前を指定できます。The lock-name is whatever you want to call the lock. api-version には、 2015-01-01を使用します。For api-version, use 2015-01-01.

要求に、ロックのプロパティを指定する JSON オブジェクトを含めます。In the request, include a JSON object that specifies the properties for the lock.

{
  "properties": {
    "level": "CanNotDelete",
    "notes": "Optional text notes."
  }
} 

次の手順Next steps