委任されたサブスクリプション内で修復が可能なポリシーをデプロイする

Azure Lighthouse では、サービス プロバイダーが委任されたサブスクリプション内にポリシー定義を作成したり、その編集をしたりすることができます。 修復タスクを使用しているポリシー (つまり、効果が deployIfNotExists または modify のポリシー) をデプロイする場合には、顧客のテナントにマネージド ID を作成する必要があります。 このマネージド ID は、ポリシー内にテンプレートをデプロイする際に Azure Policy が使用するものです。 この記事では、顧客を Azure Lighthouse にオンボードする場合とポリシーそのものをデプロイする場合の両方で、このシナリオを実現するために必要な手順について説明します。

ヒント

このトピックではサービス プロバイダーと顧客の場合について説明していますが、複数のテナントを管理するエンタープライズも同じプロセスを使用できます。

顧客のテナント内でマネージド ID にロールを割り当てることができるユーザーを作成する

Azure Lighthouse に顧客をオンボードするときには、顧客テナント内の委任されたリソースへのアクセスを付与する承認を定義します。 それぞれの認証では、管理テナントの Microsoft Entra ユーザー、グループまたはサービス プリンシパルに対応する principalId と、付与される Azure 組み込みロール に対応する roleDefinitionId が指定されます。

ある principalId に顧客テナント内でのマネージド ID へのロールの割り当てを許可するには、roleDefinitionIdユーザー アクセス管理者に設定する必要があります。 このロールは一般に Azure Lighthouse ではサポートされていませんが、この特定のシナリオで使用できます。 このロールをこの principalId に付与すると、特定の組み込みロールをマネージド ID に割り当てできるようになります。 これらのロールは delegatedRoleDefinitionIds プロパティに定義されており、ユーザー アクセスの管理者と所有者を除き、あらゆるサポートされている Azure 組み込みロールを含めることができます。

顧客のオンボードが終わると、この承認で作成された principalId が、顧客テナント内のマネージド ID にこれらの組み込みロールを割り当てることができるようになります。 ユーザー アクセス管理者ロールに通常関連付けられている他のアクセス許可が付与されることはありません。

Note

現在、全テナントに対するロールの割り当ては API で行う必要があり、Azure portal ではできません。

以下の例は、ある principalId にユーザー アクセス管理者ロールを設定するものです。 このユーザーは、顧客テナント内でマネージド ID に次の 2 種類の組み込みロールを割り当てることができます:共同作成者および Log Analytics 共同作成者。

{
    "principalId": "3kl47fff-5655-4779-b726-2cf02b05c7c4",
    "principalIdDisplayName": "Policy Automation Account",
    "roleDefinitionId": "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
    "delegatedRoleDefinitionIds": [
         "b24988ac-6180-42a0-ab88-20f7382dd24c",
         "92aaf0da-9dab-42b6-94a3-d43ce8d16293"
    ]
}

修復可能なポリシーをデプロイする

上で説明したとおりに必要なアクセス許可を設定してユーザーを作成した後、そのユーザーが、修復タスクを使用するポリシーを委任された顧客サブスクリプション内にデプロイできます。

たとえば、こちらのサンプルにあるように、顧客テナント内にある Azure Key Vault リソースを対象とした診断を有効にしたい場合を考えてみましょう。 (上で説明したとおり) 管理主体となるテナント内で適切なアクセス許可の設定を済ませたユーザーが、このシナリオを実現するために Azure Resource Manager テンプレートをデプロイします。

現時点では、委任されたサブスクリプションと一緒に使用するポリシーの割り当てを作成する操作に Azure portal ではなく、API を使用する必要があります。 これを行うときは、apiVersion2019-04-01-preview 以降に設定し、新しいプロパティ delegatedManagedIdentityResourceId を含める必要があります。 このプロパティを使用すれば、(Azure Lighthouse にオンボードしたサブスクリプションまたはリソース グループにある) 顧客のテナントに存在するマネージド ID を対象に加えることができます。

次の例は、delegatedManagedIdentityResourceId を使ったロール割り当てを示したものです。

"type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2019-04-01-preview",
            "name": "[parameters('rbacGuid')]",
            "dependsOn": [
                "[variables('policyAssignment')]"
            ],
            "properties": {
                "roleDefinitionId": "[concat(subscription().id, '/providers/Microsoft.Authorization/roleDefinitions/', variables('rbacContributor'))]",
                "principalType": "ServicePrincipal",
                "delegatedManagedIdentityResourceId": "[concat(subscription().id, '/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment'))]",
                "principalId": "[toLower(reference(concat('/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment')), '2018-05-01', 'Full' ).identity.principalId)]"
            }

ヒント

委任されたサブスクリプションに (modify の効果を使って) タグを追加または削除するポリシーのデプロイ方法は、別のよく似たサンプルでも確認できます。

次のステップ