リソースのロックによる予期せぬ変更の防止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.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

ロックが適用されるしくみ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 don't restrict how resources perform their own functions. リソースの変更は制限されますが、リソースの操作は制限されません。Resource changes are restricted, but resource operations aren't restricted. たとえば、SQL Database に ReadOnly ロックを設定すると、データベースの削除または変更を実行できなくなりますが、For example, a ReadOnly lock on a SQL Database prevents you from deleting or modifying the database. データベース内のデータの作成、更新、または削除は実行できます。It doesn't prevent you from creating, updating, or deleting data in the database. データのトランザクションは https://management.azure.com に送信されないため、これらの操作は許可されます。Data transactions are permitted because those operations aren't sent to https://management.azure.com.

ReadOnly を適用すると予期しない結果につながる可能性があります。リソースを変更する操作のように見えなくても、実際はロックによってブロックされているアクションを必要とする場合があるためです。Applying ReadOnly can lead to unexpected results because some operations that don't seem to modify the resource actually require actions that are blocked by the lock. ReadOnly ロックは、リソースまたはリソースを含むリソース グループに適用できます。The ReadOnly lock can be applied to the resource or to the resource group containing the resource. ReadOnly ロックによってブロックされる一般的な操作の例には、次のようなものがあります。Some common examples of the operations that are blocked by a ReadOnly lock are:

  • ReadOnly ロックをストレージ アカウントに設定すると、どのユーザーもキーを一覧表示できなくなります。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 のサーバー エクスプローラーはリソース用のファイルを表示できなくなります。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.

  • ReadOnly ロックを、仮想マシンを含むリソース グループに設定すると、どのユーザーも仮想マシンを起動したり、再起動したりできなくなります。A ReadOnly lock on a resource group that contains a virtual machine prevents all users from starting or restarting the virtual machine. これらの操作では、POST 要求が必要です。These operations require a POST request.

誰がロックを作成または削除できるかWho can create or delete locks

管理ロックを作成または削除するには、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.

Managed Applications とロックManaged Applications and locks

Azure Databricks などの一部の Azure サービスでは、マネージド アプリケーションを使用してサービスが実装されています。Some Azure services, such as Azure Databricks, use managed applications to implement the service. その場合、サービスで 2 つのリソース グループが作成されます。In that case, the service creates two resource groups. 1 つのリソース グループにはサービスの概要が含まれ、ロックされません。One resource group contains an overview of the service and isn't locked. もう 1 つのリソース グループにはサービスのインフラストラクチャが含まれ、ロックされます。The other resource group contains the infrastructure for the service and is locked.

インフラストラクチャのリソース グループを削除しようとすると、リソース グループがロックされていることを示すエラーが表示されます。If you try to delete the infrastructure resource group, you get an error stating that the resource group is locked. インフラストラクチャのリソース グループのロックを削除しようとすると、システム アプリケーションによって所有されているためロックを削除できないことを示すエラーが表示されます。If you try to delete the lock for the infrastructure resource group, you get an error stating that the lock can't be deleted because it's owned by a system application.

代わりに、サービスを削除すると、インフラストラクチャのリソース グループも削除されます。Instead, delete the service, which also deletes the infrastructure resource group.

マネージド アプリケーションでは、デプロイしたサービスを選択します。For managed applications, select the service you deployed.

サービスを選択する

サービスにマネージド リソース グループへのリンクが含まれることに注意してください。Notice the service includes a link for a Managed Resource Group. そのリソース グループがインフラストラクチャを保持しており、ロックされています。That resource group holds the infrastructure and is locked. 直接削除することはできません。It can't be directly deleted.

マネージド グループを表示する

ロックされているインフラストラクチャ リソース グループを含め、サービスのすべてのものを削除するには、サービスの [削除] を選択します。To delete everything for the service, including the locked infrastructure resource group, select Delete for the service.

サービスの削除

ポータル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.

    ロックを削除する

TemplateTemplate

ロックをデプロイするために Resource Manager テンプレートを使用する場合は、ロックの範囲に応じて名前と型に異なる値を使用します。When using a Resource Manager template to deploy a lock, you use different values for the name and type depending on the scope of the lock.

ロックをリソースに適用するときには、次の形式を使用します。When applying a lock to a resource, use the following formats:

  • 名前 - {resourceName}/Microsoft.Authorization/{lockName}name - {resourceName}/Microsoft.Authorization/{lockName}
  • 種類 - {resourceProviderNamespace}/{resourceType}/providers/lockstype - {resourceProviderNamespace}/{resourceType}/providers/locks

リソース グループまたはサブスクリプションにロックを適用するときには、次の形式を使用します。When applying a lock to a resource group or subscription, use the following formats:

  • 名前 - {lockName}name - {lockName}
  • 種類 - Microsoft.Authorization/lockstype - Microsoft.Authorization/locks

次の例では、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": "https://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."
            }
        }
    ]
}

リソース グループに対するロックの設定の例は、「Create a resource group and lock it (リソース グループの作成とロック)」を参照してください。For an example of setting a lock on a resource group, see Create a resource group and lock it.

PowerShellPowerShell

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

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

New-AzResourceLock -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-AzResourceLock -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-AzResourceLock

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

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

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

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

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

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzResourceLock -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 には、2016-09-01 を使用します。For api-version, use 2016-09-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