Azure PowerShell でリソースを管理するManage resources with Azure PowerShell

リソースを Azure に展開する場合、展開するリソースの種類、展開先、設定方法を決定するときにとても柔軟に対応できます。When deploying resources to Azure, you have tremendous flexibility when deciding what types of resources to deploy, where they are located, and how to set them up. ただし、その柔軟性によって、組織内で許可するオプションよりも多くのオプションを使用できるようになる可能性があります。However, that flexibility may open more options than you would like to allow in your organization. Azure にリソースを展開することを検討する場合、次のような懸案事項があります。As you consider deploying resources to Azure, you might be wondering:

  • 特定の国でのデータの主権に関する法的要件を満たすにはどうすればよいかHow do I meet legal requirements for data sovereignty in certain countries?
  • コストを管理するにはどうすればよいかHow do I control costs?
  • 重要なシステムが誤って変更されないようにするにはどうすればよいかHow do I ensure that someone does not inadvertently change a critical system?
  • リソース コストを追跡し、正確に請求するにはどうすればよいかHow do I track resource costs and bill it accurately?

この記事ではこのような問題に対応します。This article addresses those questions. 具体的には次のとおりです。Specifically, you:

  • ユーザーをロールに割り当て、ロールを範囲に割り当てることで、想定したアクションのみを実行するアクセス許可がユーザーに付与されます。Assign users to roles and assign the roles to a scope so users have permission to perform expected actions but not more actions.
  • サブスクリプション内のリソースの規則を規定するポリシーを適用します。Apply policies that prescribe conventions for resources in your subscription.
  • システムの重要なリソースをロックします。Lock resources that are critical to your system.
  • リソースにタグを付けることで、組織にとって意味のある値で追跡することができます。Tag resources so you can track them by values that make sense to your organization.

この記事では、ガバナンスの実装に必要なタスクを中心に説明します。This article focuses on the tasks you take to implement governance. 概念に関する幅広い議論については、「Azure でのガバナンス」を参照してください。For a broader discussion of the concepts, see Governance in Azure.

Azure Cloud Shell を起動するLaunch Azure Cloud Shell

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。It has common Azure tools preinstalled and configured to use with your account. [コピー] をクリックしてコードをコピーし、Cloud Shell に貼り付けて Enter キーを押すだけで、コードを実行することができます。Just click the Copy to copy the code, paste it into the Cloud Shell, and then press enter to run it. Cloud Shell は、次のようにいくつかの方法で起動することができます。There are a few ways to launch the Cloud Shell:

コード ブロックの右上隅にある [使ってみる] をクリックします。Click Try It in the upper right corner of a code block. この記事の Cloud Shell
ブラウザーで Cloud Shell を開きます。Open Cloud Shell in your browser.
Azure Portal の右上のメニューの [Cloud Shell] ボタンをクリックします。Click the Cloud Shell button on the menu in the upper right of the Azure portal. ポータルの Cloud ShellCloud Shell in the portal

PowerShell をローカルにインストールして使用することを選択する場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。If you choose to install and use the PowerShell locally, see Install Azure PowerShell module. PowerShell をローカルで実行している場合、Connect-AzureRmAccount を実行して Azure との接続を作成することも必要です。If you are running PowerShell locally, you also need to run Connect-AzureRmAccount to create a connection with Azure.

スコープを理解するUnderstand scope

項目を作成する前に、スコープの概念について確認しましょう。Before creating any items, let's review the concept of scope. Azure には、管理グループ、サブスクリプション、リソース グループ、およびリソースという 4 つのレベルの管理が用意されています。Azure provides four levels of management: management groups, subscription, resource group, and resource. 現在、管理グループはプレビュー リリースです。Management groups are in a preview release. 次の図に、これらのレイヤーの例を示します。The following image shows an example of these layers.

Scope (スコープ)

これらのスコープ レベルのいずれかに管理設定を適用します。You apply management settings at any of these levels of scope. 選択するレベルで、設定の適用範囲が決まります。The level you select determines how widely the setting is applied. 下位のレベルは、高位のレベルから設定を継承します。Lower levels inherit settings from higher levels. サブスクリプションに設定を適用すると、その設定はサブスクリプション内のすべてのリソース グループとリソースに適用されます。When you apply a setting to the subscription, that setting is applied to all resource groups and resources in your subscription. リソース グループに設定を適用すると、その設定はリソース グループとそのすべてのリソースに適用されます。When you apply a setting on the resource group, that setting is applied the resource group and all its resources. ただし、別のリソース グループにその設定はありません。However, another resource group does not have that setting.

通常、より高位のレベルで重要な設定を適用し、より低位のレベルでプロジェクト固有の要件を適用することをお勧めします。Usually, it makes sense to apply critical settings at higher levels and project-specific requirements at lower levels. たとえば、組織のすべてのリソースを確実に特定のリージョンに配置したい場合などがあります。For example, you might want to make sure all resources for your organization are deployed to certain regions. この要件を満たすには、許可された場所を指定するポリシーをサブスクリプションに適用します。To accomplish this requirement, apply a policy to the subscription that specifies the allowed locations. 組織内の他のユーザーが新しいリソース グループとリソースを追加すると、許可された場所が自動的に適用されます。As other users in your organization add new resource groups and resources, the allowed locations are automatically enforced.

この記事では、すべての管理設定をリソース グループに適用して、完了したらこれらの設定を容易に削除できるようにします。In this article, you apply all management settings to a resource group so you can easily remove those settings when done.

リソース グループを作成しましょう。Let's create the resource group.

Set-AzureRmContext -Subscription <subscription-name>
New-AzureRmResourceGroup -Name myResourceGroup -Location EastUS

現在、リソース グループは空です。Currently, the resource group is empty.

ロールベースのアクセス制御Role-based access control

組織のユーザーがこれらのリソースへの適切なアクセス レベルを持つようにします。You want to make sure users in your organization have the right level of access to these resources. ユーザーに無制限のアクセス権を許可したくはありませんが、ユーザーが自分の作業を実行できるようにすることも必要です。You don't want to grant unlimited access to users, but you also need to make sure they can do their work. ロールベースのアクセス制御 (RBAC) を使うと、あるスコープで特定のアクションを実行するアクセス許可を持つユーザーを管理することができます。Role-based access control (RBAC) enables you to manage which users have permission to complete specific actions at a scope. ロールには、許可される一連のアクションを定義します。A role defines a set of permitted actions. ロールをスコープに割り当て、スコープのそのロールに属するユーザーを指定します。You assign the role to a scope, and specify which users belong to that role for the scope.

アクセス制御戦略を計画する場合は、ユーザーの作業を実行できる最低限の特権をユーザーに付与します。When planning your access control strategy, grant users the least privilege to get their work done. 次の図は、RBAC 割り当てパターン例です。The following image shows a suggested pattern for assigning RBAC.

Scope (スコープ)

すべてのリソースに適用される 3 つの基本的なロール (所有者、共同作成者、閲覧者) があります。There are three roles that apply to all resources - Owner, Contributor, and Reader. 所有者ロールに割り当てるアカウントは厳格に管理し、ほとんど使用しないことをお勧めします。Any accounts assigned to the Owner role should be tightly controlled and rarely used. ソリューションの状態を監視する特権のみが必要なユーザーには、閲覧者ロールを付与することをお勧めします。Users that only need to observe the state of solutions should be granted the Reader role.

ほとんどのユーザーには、サブスクリプション レベルまたはリソース グループ レベルで、リソース固有のロールまたはカスタム ロールを付与します。Most users are granted resource-specific roles or custom roles at either the subscription or resource group level. これらのロールには、許可するアクションを厳格に定義します。These roles tightly define the permitted actions. ユーザーをこれらのロールに割り当てると、高すぎる特権を許可することなく、必要なアクセス権をユーザーに付与することができます。By assigning users to these roles, you grant the required access for users without permitting too much control. 1 つのアカウントを複数のロールに割り当てることができます。この場合、ユーザーには複数のロールを組み合わせたアクセス許可が付与されます。You can assign an account to more than one role, and that user gets the combined permissions of the roles. リソース レベルでアクセス権を付与すると、多くの場合、ユーザーの制限が厳しくなりすぎますが、特定のタスク向けに設計された自動プロセスには役立つ場合もあります。Granting access at the resource level is often too restrictive for users, but may work for an automated process designed for specific task.

ロールを割り当てることができるユーザーWho can assign roles

ロールの割り当てを作成および削除するには、Microsoft.Authorization/roleAssignments/* アクセス権が必要です。To create and remove role assignments, users must have Microsoft.Authorization/roleAssignments/* access. このアクセス権は、所有者ロールまたはユーザー アクセス管理者ロールを通じて許可されます。This access is granted through the Owner or User Access Administrator roles.

ロールの割り当てAssign a role

この記事では、仮想マシンとそれに関連する仮想ネットワークをデプロイします。In this article, you deploy a virtual machine and its related virtual network. 仮想マシン ソリューションを管理するために、一般的に必要なアクセスを提供する、リソースに固有の次の 3 つのロールがあります。For managing virtual machine solutions, there are three resource-specific roles that provide commonly needed access:

多くの場合は、個々のユーザーにロールを割り当てる代わりに、類似のアクションを実行する必要のあるユーザーのための Azure Active Directory グループを作成する方が簡単です。Instead of assigning roles to individual users, it's often easier to create an Azure Active Directory group for users who need to take similar actions. その後、そのグループを適切なロールに割り当てます。Then, assign that group to the appropriate role. この記事を簡略化するために、メンバーを含まない Azure Active Directory グループを作成します。To simplify this article, you create an Azure Active Directory group without members. その場合でも、このグループをスコープのロールに割り当てることができます。You can still assign this group to a role for a scope.

次の例では、グループを作成し、それをリソース グループの仮想マシンの共同作業者ロールに割り当てます。The following example creates a group and assigns it to the Virtual Machine Contributor role for the resource group. New-AzureAdGroup コマンドを実行するには、Azure Cloud Shell を使用するか、または Azure AD PowerShell モジュールをダウンロードする必要があります。To run the New-AzureAdGroup command, you must either use the Azure Cloud Shell or download the Azure AD PowerShell module.

$adgroup = New-AzureADGroup -DisplayName VMDemoContributors `
  -MailNickName vmDemoGroup `
  -MailEnabled $false `
  -SecurityEnabled $true
New-AzureRmRoleAssignment -ObjectId $adgroup.ObjectId `
  -ResourceGroupName myResourceGroup `
  -RoleDefinitionName "Virtual Machine Contributor"

通常は、デプロイされたリソースを管理するユーザーが確実に割り当てられるようにするために、このプロセスをネットワークの共同作業者ストレージ アカウントの共同作業者に対して繰り返します。Typically, you repeat the process for Network Contributor and Storage Account Contributor to make sure users are assigned to manage the deployed resources. この記事では、これらの手順を省略できます。In this article, you can skip those steps.

Azure のポリシーAzure policies

Azure のポリシーは、サブスクリプション内のすべてのリソースが会社の基準を順守するために役立ちます。Azure policies help you make sure all resources in subscription meet corporate standards. ポリシーを使用し、展開オプションを承認されたリソースの種類と SKU のみに制限することでコストを削減します。Use policies to reduce your costs by restricting deployment options to only those resource types and SKUs that are approved. リソースのルールとアクションを定義すると、それらのルールは展開時に自動的に適用されます。You define rules and actions for your resources and those rules are automatically enforced during deployment. たとえば、展開されているリソースの種類を制御できます。For example, you can control the types of resources that are deployed. また、リソースの承認済みの場所を制限することもできます。Or, you can restrict the approved locations for resources. アクションを拒否するポリシーや、アクションの監査を設定するポリシーがあります。Some policies deny an action, and some policies set up auditing of an action.

ポリシーはロールベースのアクセス制御 (RBAC) を補完するものです。Policy is complementary to role-based access control (RBAC). RBAC はユーザー アクセスに重点を置き、既定で禁止し、明示的に許可するシステムです。RBAC focuses on user access, and is a default deny and explicit allow system. ポリシーは、展開中と展開後のリソース プロパティに焦点を当てています。Policy focuses on resource properties during and after deployment. ポリシーは既定で許可し、明示的に禁止するシステムです。It's a default allow and explicit deny system.

ポリシーを理解するには、ポリシー定義ポリシー割り当てという 2 つの概念があります。There are two concepts to understand with policies - policy definitions and policy assignments. ポリシー定義には、適用する管理条件を指定します。A policy definition describes the management conditions you want to enforce. ポリシーの割り当ては、特定のスコープのアクションにポリシー定義を設定します。A policy assignment puts a policy definition into action for a particular scope.


Azure には、変更せずに使用できる組み込みのポリシー定義がいくつか用意されています。Azure provides several built-in policy definitions you can use without any modification. パラメーター値を渡して、スコープ内で許可する値を指定します。You pass parameter values to specify the values that are permitted in your scope. 組み込みポリシー定義が要件を満たしていない場合は、カスタムのポリシー定義を作成することができます。If built-in policy definition don't fulfill your requirements, you can create custom policy definitions.

ポリシーを適用するApply policies

サブスクリプションには、既にいくつかのポリシー定義が含まれています。Your subscription already has several policy definitions. 使用可能なポリシー定義を確認するには、次を使用します。To see the available policy definitions, use:

(Get-AzureRmPolicyDefinition).Properties | Format-Table displayName, policyType

既存のポリシー定義が表示されます。You see the existing policy definitions. ポリシーの種類は、BuiltIn または [カスタム] のどちらかです。The policy type is either BuiltIn or Custom. この中から、割り当てる条件を記述している定義を探します。Look through the definitions for ones that describe a condition you want assign. この記事では、次のようなポリシーを割り当てます。In this article, you assign policies that:

  • すべてのリソースの場所を制限するlimit the locations for all resources
  • 仮想マシンの SKU を制限するlimit the SKUs for virtual machines
  • 管理ディスクを使用しない仮想マシンを監査するaudit virtual machines that do not use managed disks
$locations ="eastus", "eastus2"
$skus = "Standard_DS1_v2", "Standard_E2s_v2"

$rg = Get-AzureRmResourceGroup -Name myResourceGroup

$locationDefinition = Get-AzureRmPolicyDefinition | where-object {$ -eq "Allowed locations"}
$skuDefinition = Get-AzureRmPolicyDefinition | where-object {$ -eq "Allowed virtual machine SKUs"}
$auditDefinition = Get-AzureRmPolicyDefinition | where-object {$ -eq "Audit VMs that do not use managed disks"}

New-AzureRMPolicyAssignment -Name "Set permitted locations" `
  -Scope $rg.ResourceId `
  -PolicyDefinition $locationDefinition `
  -listOfAllowedLocations $locations
New-AzureRMPolicyAssignment -Name "Set permitted VM SKUs" `
  -Scope $rg.ResourceId `
  -PolicyDefinition $skuDefinition `
  -listOfAllowedSKUs $skus
New-AzureRMPolicyAssignment -Name "Audit unmanaged disks" `
  -Scope $rg.ResourceId `
  -PolicyDefinition $auditDefinition

仮想マシンをデプロイするDeploy the virtual machine

ロールとポリシーを割り当てたため、ソリューションをデプロイする準備ができました。You have assigned roles and policies, so you're ready to deploy your solution. 既定のサイズは Standard_DS1_v2 です。これは、許可される SKU の 1 つです。The default size is Standard_DS1_v2, which is one of your allowed SKUs. この手順の実行時に、資格情報の入力を求められます。When running this step, you are prompted for credentials. 入力した値は、仮想マシンのユーザー名とパスワードとして構成されます。The values that you enter are configured as the user name and password for the virtual machine.

New-AzureRmVm -ResourceGroupName "myResourceGroup" `
     -Name "myVM" `
     -Location "East US" `
     -VirtualNetworkName "myVnet" `
     -SubnetName "mySubnet" `
     -SecurityGroupName "myNetworkSecurityGroup" `
     -PublicIpAddressName "myPublicIpAddress" `
     -OpenPorts 80,3389

デプロイが完了したら、そのソリューションにより多くの管理設定を適用できます。After your deployment finishes, you can apply more management settings to the solution.

リソースのロックLock resources

リソースのロックは、組織内のユーザーが重要なリソースを誤って削除したり変更したりするのを防ぎます。Resource locks prevent users in your organization from accidentally deleting or modifying critical resources. ロールベースのアクセス制御とは異なり、リソースのロックはすべてのユーザーとロールに制限を適用します。Unlike role-based access control, resource locks apply a restriction across all users and roles.

ロック レベルは CanNotDelete または ReadOnly に設定できます。You can set the lock level to CanNotDelete or ReadOnly. ポータルでは、ロック レベルはそれぞれ [削除][読み取り専用] と表示されます。In the portal, the locks levels are displayed as 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.


ReadOnly ロックを適用する場合は気を付けてください。Be careful when applying a ReadOnly lock. 読み取り操作のように見える場合でも、実際は追加のアクションが必要な操作もあります。Some operations that seem like read operations actually require additional actions. たとえば、ReadOnly ロックをストレージ アカウントに設定すると、すべてのユーザーがキーを一覧表示できなくなります。For example, 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.

親スコープでロックを適用すると、そのスコープ内のすべてのリソースは同じロックを継承します。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.

Resource Manager のロックは、管理ウィンドウで実行され、 に送信される操作で構成される操作のみに適用されます。Resource Manager locks apply only to operations that happen in the management plane, which consists of operations sent to ロックは、リソースが独自の機能を処理する方法を制限しません。The locks don't restrict how resources process 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. データのトランザクションは に送信されないため、これらの操作は許可されます。Data transactions are allowed because those operations are not sent to

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

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

リソースのロックLock a resource

仮想マシンとネットワーク セキュリティ グループをロックするには、次を使用します。To lock the virtual machine and network security group, use:

New-AzureRmResourceLock -LockLevel CanNotDelete `
  -LockName LockVM `
  -ResourceName myVM `
  -ResourceType Microsoft.Compute/virtualMachines `
  -ResourceGroupName myResourceGroup
New-AzureRmResourceLock -LockLevel CanNotDelete `
  -LockName LockNSG `
  -ResourceName myNetworkSecurityGroup `
  -ResourceType Microsoft.Network/networkSecurityGroups `
  -ResourceGroupName myResourceGroup

仮想マシンは、ロックを明確に削除した場合にのみ削除できます。The virtual machine can only be deleted if you specifically remove the lock. その手順は、「リソースのクリーンアップ」に示されています。That step is shown in Clean up resources.

リソースへのタグ付けTag resources

Azure リソースにタグを適用すると、カテゴリ別に論理的に整理できます。You apply tags to your Azure resources to logically organize them by categories. 各タグは名前と値で構成されます。Each tag consists of a name and a value. たとえば、運用環境のすべてのリソースには名前 "環境" と値 "運用" を適用できます。For example, you can apply the name "Environment" and the value "Production" to all the resources in production.

タグを適用すると、そのタグの名前と値が付けられた、サブスクリプション内のすべてのリソースを取得できます。After you apply tags, you can retrieve all the resources in your subscription with that tag name and value. タグを使用すると、複数のリソース グループから関連リソースを取得できます。Tags enable you to retrieve related resources from different resource groups. この方法は、課金または管理の目的でリソースを整理する必要がある場合に役立ちます。This approach is helpful when you need to organize resources for billing or management.

タグには次の制限事項が適用されます。The following limitations apply to tags:

  • 各リソースまたはリソース グループには、最大で 15 個のタグ名/タグ値のペアを付けることができます。Each resource or resource group can have a maximum of 15 tag name/value pairs. この制限は、リソース グループまたはリソースに直接適用されたタグにのみ適用されます。This limitation applies only to tags directly applied to the resource group or resource. リソース グループには、それぞれ 15 個のタグ名/タグ値のペアが付けられたリソースを多数含めることができます。A resource group can contain many resources that each have 15 tag name/value pairs. リソースに関連付ける必要のある値が 15 個を超える場合は、タグ値に JSON 文字列を使用します。If you have more than 15 values that you need to associate with a resource, use a JSON string for the tag value. JSON 文字列には、1 つのタグ名に適用される値を多数含めることができます。The JSON string can contain many values that are applied to a single tag name. この記事では、JSON 文字列をタグに割り当てる例を示します。This article shows an example of assigning a JSON string to the tag.
  • タグ名は 512 文字まで、タグ値は 256 文字までに制限されます。The tag name is limited to 512 characters, and the tag value is limited to 256 characters. ストレージ アカウントについては、タグ名は 128 文字まで、タグ値は 256 文字までに制限されます。For storage accounts, the tag name is limited to 128 characters, and the tag value is limited to 256 characters.
  • リソース グループに適用したタグは、そのリソース グループ内のリソースには継承されません。Tags applied to the resource group are not inherited by the resources in that resource group.
  • Cloud Services など、クラシック リソースにタグを適用することはできません。Tags can't be applied to classic resources such as Cloud Services.
  • タグ名には、これらの文字を含めることはできません: <>%&\?/Tag names can't contain these characters: <, >, %, &, \, ?, /

リソースへのタグ付けTag resources

リソース グループに 2 つのタグを追加するには、Set-AzureRmResourceGroup コマンドを使用します。To add two tags to a resource group, use the Set-AzureRmResourceGroup command:

Set-AzureRmResourceGroup -Name myResourceGroup -Tag @{ Dept="IT"; Environment="Test" }

3 つ目のタグを追加するとします。Let's suppose you want to add a third tag. リソースまたはリソース グループにタグを適用するたびに、そのリソースまたはリソース グループの既存のタグが上書きされます。Every time you apply tags to a resource or a resource group, you overwrite the existing tags on that resource or resource group. 既存のタグを失うことなく新しいタグを追加するには、既存のタグを取得し、新しいタグを追加して、タグのコレクションを再適用する必要があります。To add a new tag without losing the existing tags, you must retrieve the existing tags, add a new tag, and reapply the collection of tags:

# Get existing tags and add a new tag
$tags = (Get-AzureRmResourceGroup -Name myResourceGroup).Tags
$tags.Add("Project", "Documentation")

# Reapply the updated set of tags 
Set-AzureRmResourceGroup -Tag $tags -Name myResourceGroup

リソースは、リソース グループからタグを継承しません。Resources don't inherit tags from the resource group. 現在、リソース グループには 3 つのタグがありますが、リソースにはタグがありません。Currently, your resource group has three tags but the resources do not have any tags. リソースにある重複しない既存のタグを保持して、リソース グループのすべてのタグをリソースに適用するには、次のスクリプトを使用します。To apply all tags from a resource group to its resources, and retain existing tags on resources that are not duplicates, use the following script:

# Get the resource group
$group = Get-AzureRmResourceGroup myResourceGroup

if ($group.Tags -ne $null) {
    # Get the resources in the resource group
    $resources = Get-AzureRmResource -ResourceGroupName $group.ResourceGroupName

    # Loop through each resource
    foreach ($r in $resources)
        # Get the tags for this resource
        $resourcetags = (Get-AzureRmResource -ResourceId $r.ResourceId).Tags

        # If the resource has existing tags, add new ones
        if ($resourcetags)
            foreach ($key in $group.Tags.Keys)
                if (-not($resourcetags.ContainsKey($key)))
                    $resourcetags.Add($key, $group.Tags[$key])

            # Reapply the updated tags to the resource 
            Set-AzureRmResource -Tag $resourcetags -ResourceId $r.ResourceId -Force
            Set-AzureRmResource -Tag $group.Tags -ResourceId $r.ResourceId -Force

また、既存のタグを保持せずに、リソース グループのタグをリソースに適用することもできまます。Alternatively, you can apply tags from the resource group to the resources without keeping the existing tags:

# Get the resource group
$g = Get-AzureRmResourceGroup -Name myResourceGroup

# Find all the resources in the resource group, and for each resource apply the tags from the resource group
Get-AzureRmResource -ResourceGroupName $g.ResourceGroupName | ForEach-Object {Set-AzureRmResource -ResourceId $_.ResourceId -Tag $g.Tags -Force }

1 つのタグに複数の値を結合するには、JSON 文字列を使用します。To combine several values in a single tag, use a JSON string.

Set-AzureRmResourceGroup -Name myResourceGroup -Tag @{ CostCenter="{`"Dept`":`"IT`",`"Environment`":`"Test`"}" }

すべてのタグを削除するには、空のハッシュ テーブルを渡します。To remove all tags, you pass an empty hash table.

Set-AzureRmResourceGroup -Name myResourceGroup -Tag @{ }

仮想マシンにタグを適用するには、次を使用します。To apply tags to a virtual machine, use:

$r = Get-AzureRmResource -ResourceName myVM `
  -ResourceGroupName myResourceGroup `
  -ResourceType Microsoft.Compute/virtualMachines
Set-AzureRmResource -Tag @{ Dept="IT"; Environment="Test"; Project="Documentation" } -ResourceId $r.ResourceId -Force

タグでリソースを見つけるFind resources by tag

タグ名と値でリソースを見つけるには、次を使用します。To find resources with a tag name and value, use:

(Find-AzureRmResource -TagName Environment -TagValue Test).Name

返される値は、タグ値ですべての仮想マシンを停止するような管理タスクで使用できます。You can use the returned values for management tasks like stopping all virtual machines with a tag value.

Find-AzureRmResource -TagName Environment -TagValue Test | Where-Object {$_.ResourceType -eq "Microsoft.Compute/virtualMachines"} | Stop-AzureRmVM

タグ値でコストを表示するView costs by tag values

リソースにタグを適用した後、それらのタグでリソースのコストを表示できます。After applying tags to resources, you can view costs for resources with those tags. コスト分析に最新の使用状況が表示されるには少し時間がかかるため、まだコストが表示されない可能性があります。It takes a while for cost analysis to show the latest usage, so you may not see the costs yet. コストが使用可能な場合は、サブスクリプション内のリソース グループにまたがるリソースのコストを表示できます。When the costs are available, you can view costs for resources across resource groups in your subscription. コストを表示するには、ユーザーに課金情報へのサブスクリプション レベルのアクセス権が必要です。Users must have subscription level access to billing information to see the costs.

ポータル内でタグでコストを表示するには、サブスクリプションを選択し、[コスト分析] を選択します。To view costs by tag in the portal, select your subscription and select Cost Analysis.


次に、タグ値でフィルター処理し、[適用] を選択します。Then, filter by the tag value, and select Apply.


Azure Billing API を使用して、プログラムでコストを表示することもできます。You can also use the Azure Billing APIs to programmatically view costs.

リソースのクリーンアップClean up resources

ロックされたネットワーク セキュリティ グループは、そのロックが削除されるまで削除できません。The locked network security group can't be deleted until the lock is removed. ロックを削除するには、次を使用します。To remove the lock, use:

Remove-AzureRmResourceLock -LockName LockVM `
  -ResourceName myVM `
  -ResourceType Microsoft.Compute/virtualMachines `
  -ResourceGroupName myResourceGroup
Remove-AzureRmResourceLock -LockName LockNSG `
  -ResourceName myNetworkSecurityGroup `
  -ResourceType Microsoft.Network/networkSecurityGroups `
  -ResourceGroupName myResourceGroup

必要がなくなったら、Remove-AzureRmResourceGroup コマンドを使用して、リソース グループ、VM、およびすべての関連リソースを削除できます。When no longer needed, you can use the Remove-AzureRmResourceGroup command to remove the resource group, VM, and all related resources.

Remove-AzureRmResourceGroup -Name myResourceGroup

次の手順Next steps