🚓

Azure Policy 定義のエクスポート・インポート

2022/06/03に公開

はじめに

Azure Policy の定義は json 形式で定義されていますが、標準機能ではバックアップやリストアの機能はありません。GitHub と連携して、エクスポート・インポートできるようですが、社内で使ってない場合はどうするんだ、となるんで、CLI でエクスポート・インポートする方法を整理します。

エクスポート

エクスポートは Azure REST API を使います。
https://docs.microsoft.com/ja-jp/rest/api/policy/policy-definitions/get

  1. Azure PowerShell にログインします。
Connect-AzAccount

  1. Bearer トークンを取得しセットします。
$accesstoken = Get-AzAccessToken
$token = "Bearer " + $accesstoken.Token
$header = @{
    "Authorization" = $token;
    "Content-Type" = "application/json"
}

  1. カスタムポリシーの名前一覧を取得します。
Get-AzPolicyDefinition -SubscriptionId <exportSubscriptionId> -Custom | Select-Object name

  1. REST API の URI を作成します。
$uri = "https://management.azure.com/subscriptions/<exportSubscriptionId>/providers/Microsoft.Authorization/policyDefinitions/<policyName>?api-version=2021-06-01"

なお保存先が管理グループになっている場合は、以下の URI になります。

$uri = "https://management.azure.com/providers/Microsoft.Management/managementGroups/<managementGroupId>/providers/Microsoft.Authorization/policyDefinitions/<policyName> ?api-version=2021-06-01"

  1. GET リクエストを作成します。
$getRequest = @{
        Uri         = $uri
        Headers     = $header
        Method      = 'GET'
        ContentType = 'application/json'
}

  1. ポリシー定義をファイルにエクスポートします。
$response = Invoke-WebRequest @getRequest
Write-Output $response.content | Out-File -FilePath <policyName>.json

インポート

  1. インポートは Azure PowerShell で行います。
New-AzPolicyDefinition -Name <policyName> -SubscriptionId <importSubscriptionId> -Policy <policyName>.json

管理グループに反映する場合は以下の Azure PowerShell コマンドを使用します。

New-AzPolicyDefinition -Name <policyName> -ManagementGroupName <managementGroupName> -Policy <policyName>.json

Discussion