Azure Policy を使って準拠していないリソースを修復するRemediate non-compliant resources with Azure Policy

deployIfNotExistsmodify に準拠していないリソースは、修復を使って準拠状態にすることができます。Resources that are non-compliant to a deployIfNotExists or modify policy can be put into a compliant state through Remediation. 修復は、既存のリソースに割り当てられているポリシーの deployIfNotExists 効果やタグ操作を実行するように Azure Policy に指示することによって実行されます。Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the tag operations of the assigned policy on your existing resources. この記事では、Azure Policy による修復を理解して実行するために必要な手順を示します。This article shows the steps needed to understand and accomplish remediation with Azure Policy.

修復のセキュリティの仕組みHow remediation security works

deployIfNotExists ポリシー定義にあるテンプレートを実行するとき、Azure Policy ではマネージド ID が使用されます。When Azure Policy runs the template in the deployIfNotExists policy definition, it does so using a managed identity. マネージド ID は Azure Policy によって各割り当てに対して作成されますが、どのようなロールをマネージド ID に付与するかについての詳細が必要です。Azure Policy creates a managed identity for each assignment, but must have details about what roles to grant the managed identity. 管理対象 ID にロールが存在しない場合、そのポリシーまたはイニシアチブの割り当て中にこのエラーが表示されます。If the managed identity is missing roles, this error is displayed during the assignment of the policy or an initiative. ポータルを使用している場合、割り当てが開始されると、Azure Policy によって、示されているロールのすべてが自動的にマネージド ID に付与されます。When using the portal, Azure Policy will automatically grant the managed identity the listed roles once assignment is started.

管理対象 ID - ロールが存在しない

重要

deployIfNotExistsmodify で変更されたリソースがポリシー割り当てのスコープの範囲外の場合、あるいはテンプレートがポリシー割り当てのスコープの範囲外にあるリソース上のプロパティにアクセスした場合、その割り当ての管理対象 ID には手動でアクセス権を付与する必要があります。さもないと、修復デプロイは失敗します。If a resource modified by deployIfNotExists or modify is outside the scope of the policy assignment or the template accesses properties on resources outside the scope of the policy assignment, the assignment's managed identity must be manually granted access or the remediation deployment will fail.

ポリシー定義を設定するConfigure policy definition

最初の手順は、含まれているテンプレートのコンテンツを deployIfNotExistsmodify が正しくデプロイするために必要なロールを、ポリシー定義に定義することです。The first step is to define the roles that deployIfNotExists and modify needs in the policy definition to successfully deploy the content of your included template. details (詳細) プロパティで roleDefinitionIds プロパティを追加します。Under the details property, add a roleDefinitionIds property. このプロパティは、環境にあるロールに合致する一連の文字列です。This property is an array of strings that match roles in your environment. deployIfNotExists の例または modify の例に示す例を参照してください。For a full example, see the deployIfNotExists example or the modify examples.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

roleDefinitionIds プロパティは完全なリソース識別子を使用し、ロールの短い roleName は使用しません。The roleDefinitionIds property uses the full resource identifier and doesn't take the short roleName of the role. 環境にある「共同作成者」ロールの ID を取得するには、次のコードを使用します。To get the ID for the 'Contributor' role in your environment, use the following code:

az role definition list --name 'Contributor'

管理対象 ID を手動で設定します。Manually configure the managed identity

ポータルを使用して割り当てを作成する際、Azure Policy によって、マネージド ID の生成と roleDefinitionIds に定義されているロールのマネージド ID への付与の両方が実行されます。When creating an assignment using the portal, Azure Policy both generates the managed identity and grants it the roles defined in roleDefinitionIds. 次の条件では、管理対象 ID を作成し、アクセス許可を割り当てる手順を手動で行う必要があります:In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

  • SDK (Azure PowerShell など) を使用している場合While using the SDK (such as Azure PowerShell)
  • 割り当てスコープの範囲外のリソースがテンプレートによって変更される場合When a resource outside the assignment scope is modified by the template
  • 割り当てスコープの範囲外のリソースがテンプレートによって読み取られる場合When a resource outside the assignment scope is read by the template

注意

現在この機能をサポートしている SDK は Azure PowerShell と .NET だけです。Azure PowerShell and .NET are the only SDKs that currently support this capability.

PowerShell で管理対象 ID を作成するCreate managed identity with PowerShell

ポリシーの割り当て時に管理対象 ID を作成するには、場所 を定義して、AssignIdentity を使用する必要があります。To create a managed identity during the assignment of the policy, Location must be defined and AssignIdentity used. 次の例では、組み込みポリシー Deploy SQL DB transparent data encryption の定義を取得して、ターゲット リソース グループを設定し、割り当てを作成しています。The following example gets the definition of the built-in policy Deploy SQL DB transparent data encryption, sets the target resource group, and then creates the assignment.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Create the assignment using the -Location and -AssignIdentity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -AssignIdentity

この結果、$assignment 変数には管理対象 ID のプリンシパル ID とともに、ポリシー割り当てを作成するときに返される標準値が含まれます。The $assignment variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. この変数には $assignment.Identity.PrincipalId を使ってアクセスできます。It can be accessed through $assignment.Identity.PrincipalId.

定義したロールを PowerShell を使って付与するGrant defined roles with PowerShell

新しい管理対象 ID に必要なロールを付与するには、Azure Active Directory からレプリケーションを完了しておく必要があります。The new managed identity must complete replication through Azure Active Directory before it can be granted the needed roles. 次の例では、レプリケーションを完了した後、roleDefinitionIds に対して $policyDef でポリシー定義を反復処理し、New-AzRoleAssignment を使用して、新しい管理対象 ID にロールを付与します。Once replication is complete, the following example iterates the policy definition in $policyDef for the roleDefinitionIds and uses New-AzRoleAssignment to grant the new managed identity the roles.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

定義したロールをポータルから付与するGrant defined roles through portal

ポータルを使用して、割り当ての管理対象 ID に定義したロールを付与する方法は 2 通りあります。1 つは アクセス制御 (IAM) を利用する方法、もう 1 つはポリシーまたはイニシアティブ割り当てを編集する方法です(最後に 保存 をクリック)。There are two ways to grant an assignment's managed identity the defined roles using the portal, by using Access control (IAM) or by editing the policy or initiative assignment and clicking Save.

割り当ての管理対象 ID にロールを追加するには、次の手順に従います。To add a role to the assignment's managed identity, follow these steps:

  1. Azure portal 上で [すべてのサービス] をクリックし、 [ポリシー] を検索して選択し、Azure Policy サービスを起動します。Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

  2. Azure Policy ページの左側にある [割り当て] を選択します。Select Assignments on the left side of the Azure Policy page.

  3. 管理対象 ID がある割り当てを見つけて、その名前をクリックします。Locate the assignment that has a managed identity and click on the name.

  4. 編集ページで割り当て ID を見つけます。Find the Assignment ID property on the edit page. 割り当て ID は以下のような ID です。The assignment ID will be something like:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    管理対象 ID の名前は、割り当てリソース ID の最後の部分です。この例では 2802056bfc094dfb95d4d7a5 です。The name of the managed identity is the last portion of the assignment resource ID, which is 2802056bfc094dfb95d4d7a5 in this example. 割り当てリソース ID のこの部分をコピーします。Copy this portion of the assignment resource ID.

  5. ロールの定義で手動で追加する必要があるリソース、またはリソースの親コンテナー (リソース グループ、サブスクリプション、管理グループ) に移動します。Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. リソース ページにある アクセス制御 (IAM) のリンクをクリックして、アクセス制御ページの上部にある [+ Add role assignment](+ ロール割り当ての追加) をクリックします。Click the Access control (IAM) link in the resources page and click + Add role assignment at the top of the access control page.

  7. ポリシー定義から、 roleDefinitionIds に一致するロールを選択します。Select the appropriate role that matches a roleDefinitionIds from the policy definition. Assign access to は ''Azure AD user, group, or application という既定値の設定のままにします。Leave Assign access to set to the default of 'Azure AD user, group, or application'. [選択] ボックスで、前の手順で見つけた割り当てリソース ID の部分を貼り付けるか、入力します。In the Select box, paste or type the portion of the assignment resource ID located earlier. 検索が完了したら、同じ名前のオブジェクトをクリックすることで ID を選択し、 [保存] をクリックします。Once the search completes, click the object with the same name to select ID and click Save.

修復タスクを作成するCreate a remediation task

ポータルを通じて修復タスクを作成するCreate a remediation task through portal

評価では、deployIfNotExists または modify 効果を持つポリシー割り当てによって、準拠していないリソースがあるかどうかが判定されます。During evaluation, the policy assignment with deployIfNotExists or modify effects determines if there are non-compliant resources. 準拠していないリソースが見つかった場合は、修復ページにその詳細が表示されます。When non-compliant resources are found, the details are provided on the Remediation page. 準拠していないリソースがあるポリシーの一覧には、修復タスク をトリガーするオプションがあります。Along with the list of policies that have non-compliant resources is the option to trigger a remediation task. このオプションは、deployIfNotExists テンプレートまたは modify 操作からデプロイを作成するものです。This option is what creates a deployment from the deployIfNotExists template or the modify operations.

修復タスク を作成するには、次の手順に従います。To create a remediation task, follow these steps:

  1. Azure portal 上で [すべてのサービス] をクリックし、 [ポリシー] を検索して選択し、Azure Policy サービスを起動します。Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

    [すべてのサービス] で [ポリシー] を検索する

  2. Azure Policy ページの左側にある [修復] を選択します。Select Remediation on the left side of the Azure Policy page.

    [ポリシー] ページで [修復] を選択する

  3. deployIfNotExists および modify のポリシー割り当てのうち、準拠していないリソースがあるものはすべて、 [修復するポリシー] タブとデータ テーブルに含まれます。All deployIfNotExists and modify policy assignments with non-compliant resources are included on the Policies to remediate tab and data table. 準拠していないリソースがあるポリシーをクリックします。Click on a policy with resources that are non-compliant. 新しい修復タスクページが開きます。The New remediation task page opens.

    注意

    修復タスクページは、コンプライアンス ページから問題のポリシーを見つけて、クリックし、ページの [] をクリックし、修復タスクの作成ボタンをクリックしても開くことができます。An alternate way to open the remediation task page is to find and click on the policy from the Compliance page, then click the Create Remediation Task button.

  4. [New remediation task](新しい修復タスク) ページで [Scope](スコープ) 省略記号ボタンを使って、ポリシーが割り当てられている子リソースを選択することで、修復するリソースをフィルター処理します (個々のリソース オブジェクトまでフィルター可能)。On the New remediation task page, filter the resources to remediate by using the Scope ellipses to pick child resources from where the policy is assigned (including down to the individual resource objects). また、 [場所] ドロップダウンを使って、リソースをさらにフィルター処理することもできます。Additionally, use the Locations drop-down to further filter the resources. 表に示されたリソースのみ修復されます。Only resources listed in the table will be remediated.

    修復 - 修復するリソースを選択する

  5. リソースのフィルター処理を終えたら、 [修復] をクリックして、修復タスクを開始します。Begin the remediation task once the resources have been filtered by clicking Remediate. [修復タスク] タブに対するポリシー コンプライアンス ページが開いて、タスクの進行状況が表示されます。The policy compliance page will open to the Remediation tasks tab to show the state of the tasks progress.

    修復 - 修復タスクの進行状況

  6. ポリシー コンプライアンス ページの [修復タスク] をクリックすると、進行状況の詳細が表示されます。Click on the remediation task from the policy compliance page to get details about the progress. 修復されているリソースの一覧と共に、タスクに使用されたフィルターが表示されます。The filtering used for the task is shown along with a list of the resources being remediated.

  7. [修復タスク] ページで、修復タスクを右クリックすると、その修復タスクのデプロイまたはリソースのいずれかが表示されます。From the remediation task page, right-click on a resource to view either the remediation task's deployment or the resource. 行の末尾にあると [関連イベント] をクリックすると、エラー メッセージなどの詳細が表示されます。At the end of the row, click on Related events to see details such as an error message.

    修復 - リソース タスクのコンテキスト メニュー

[修復タスク] を使ってデプロイされたリソースは、ポリシー コンプライアンス ページの [デプロイされたリソース] タブに追加されます。Resources deployed through a remediation task are added to the Deployed Resources tab on the policy compliance page.

Azure CLI を通じて修復タスクを作成するCreate a remediation task through Azure CLI

Azure CLI を使用して修復タスク を作成するには、az policy remediation コマンドを使用します。To create a remediation task with Azure CLI, use the az policy remediation commands. {subscriptionId} をサブスクリプション ID に置き換え、{myAssignmentId}deployIfNotExists または modify のポリシー割り当て ID に置き換えます。Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az policy remediation create --name myRemediation --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

その他の修復コマンドや例については、az ポリシーの修復 コマンドを参照してください。For other remediation commands and examples, see the az policy remediation commands.

Azure PowerShell を通じて修復タスクを作成するCreate a remediation task through Azure PowerShell

Azure PowerShell を使用して修復タスク を作成するには、Start-AzPolicyRemediation コマンドを使用します。To create a remediation task with Azure PowerShell, use the Start-AzPolicyRemediation commands. {subscriptionId} をサブスクリプション ID に置き換え、{myAssignmentId}deployIfNotExists または modify のポリシー割り当て ID に置き換えます。Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

その他の修復コマンドレットや例については、Az.PolicyInsights モジュールを参照してください。For other remediation cmdlets and examples, see the Az.PolicyInsights module.

次の手順Next steps