クイック スタート: REST API で Azure ブループリントを定義して割り当てる

重要

2026 年 7 月 11 日に、Blueprints (プレビュー) は非推奨になります。 既存のブループリントの定義と割り当てを Template Specsデプロイ スタックに移行します。 ブループリント アーティファクトは、デプロイ スタックの定義に使用される ARM JSON テンプレートまたは Bicep ファイルに変換されます。 アーティファクトを ARM リソースとして作成する方法については、次を参照してください。

このチュートリアルでは、Azure Blueprints を使用して、ご自分の組織内のブループリントの作成、発行、および割り当てに関連する一般的ないくつかのタスクを実行する方法について説明します。 このスキルは、Azure Resource Manager (ARM) テンプレート、ポリシー、セキュリティに基づいて、再利用可能で迅速にデプロイできる構成を開発するための一般的なパターンを定義するために役立ちます。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • Microsoft.Blueprint リソースプロバイダーを登録します。 手順については、「リソースプロバイダーと種類」を参照してください。

Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。

Azure Cloud Shell を開始するには、以下のようにします。

オプション 例とリンク
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 Button to launch Azure Cloud Shell.
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell を使用するには、以下のようにします。

  1. Cloud Shell を開始します。

  2. コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。

  4. Enter キーを選択して、コードまたはコマンドを実行します。

Get started with REST API (REST API の概要) に関するページ

REST API を初めて使用する場合は、最初に「Azure REST API リファレンス」の要求 URI と要求本文に関するセクションを参照してください。 このクイックスタートでは、これらの概念を使用して Azure Blueprints を操作する方法を説明しており、それらの実践的な知識を前提としています。 ARMClient などのツールは認可を自動的に処理できるので、初めての方にお勧めします。

Azure Blueprints の仕様については、Azure Blueprints REST API に関するページを参照してください。

REST API と PowerShell

REST API の呼び出しを行うためのツールがまだない場合は、PowerShell を使うことを検討してください。 Azure で認証を行うためのヘッダーのサンプルを次に示します。 認証ヘッダー (ベアラー トークンと呼ばれることもあります) を生成し、パラメーターまたは Request Body で接続する REST API の URI を提供します。

# Log in first with Connect-AzAccount if not using Cloud Shell

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token.AccessToken
}

# Invoke the REST API
$restUri = 'https://management.azure.com/subscriptions/{subscriptionId}?api-version=2020-01-01'
$response = Invoke-RestMethod -Uri $restUri -Method Get -Headers $authHeader

上記の $restUri 変数の {subscriptionId} を置き換えて、サブスクリプションに関する情報を取得します。 $response 変数には Invoke-RestMethod コマンドレットの結果が保持されており、ConvertFrom-json などのコマンドレットを使用して解析できます。 REST API サービス エンドポイントで Request Body が必要な場合は、JSON 形式の変数を Invoke-RestMethod-Body パラメーターに提供します。

ブループリントを作成する

コンプライアンスの標準的なパターンを定義する最初のステップは、使用可能なリソースからブループリントを作成することです。 MyBlueprint という名前のブループリントを作成して、サブスクリプションのロールとポリシーの割り当てを構成してみましょう。 その後、リソース グループ、ARM テンプレート、およびそのリソース グループに対するロールの割り当てを追加します。

Note

REST API を使用している場合、"ブループリント" オブジェクトが最初に作成されます。 追加する各 "成果物" でパラメーターを持つものについては、最初の "ブループリント" でパラメーターを事前に定義します。

各 REST API URI で、以下の変数を実際の値に置き換えます。

  • {YourMG} - 実際の管理グループの ID に置き換えます。
  • {subscriptionId} - 実際のサブスクリプション ID に置き換えます。

Note

サブスクリプション レベルでブループリントを作成することもできます。 詳細については、サブスクリプションでのブループリントの作成例に関するページを参照してください。

  1. 初期 "ブループリント" オブジェクトを作成します。 Request Body には、ブループリントに関するプロパティ、作成するリソース グループ、ブループリント レベルのすべてのパラメーターが含まれています。 パラメーターは割り当て中に設定し、後の手順で追加する成果物によって使用されます。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
  2. サブスクリプションでロールの割り当てを追加します。 Request Body では成果物の種類が定義されていて、プロパティはロール定義の識別子と整合しており、プリンシパルの ID は値の配列として渡されます。 次の例では、指定されたロールを付与されたプリンシパル ID が、ブループリントの割り当て中に設定されるパラメーターに対して構成されます。 この例では、GUID が b24988ac-6180-42a0-ab88-20f7382dd24cContributor 組み込みロールを使用しています。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleContributor?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
  3. サブスクリプションでポリシーの割り当てを追加します。 Request Body では成果物の種類が定義されていて、プロパティはポリシーまたはイニシアティブの定義と整合しており、ブループリントの割り当て中に定義済みのブループリント パラメーターを使用するようにポリシー割り当てを構成します。 この例では、GUID が 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71Apply tag and its default value to resource groups 組み込みポリシーを使用しています。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyTags?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  4. サブスクリプションでストレージ タグに対する別のポリシー割り当てを (storageAccountType_ parameter を再利用して) 追加します。 この追加のポリシー割り当て成果物は、ブループリントで定義されたパラメーターを複数の成果物で使用できることを示します。 この例では、storageAccountType を使用して、リソース グループにタグを設定します。 この値によって、次のステップで作成するストレージ アカウントに関する情報が提供されます。 この例では、GUID が 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71Apply tag and its default value to resource groups 組み込みポリシーを使用しています。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyStorageTags?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
  5. リソース グループにテンプレートを追加します。 ARM テンプレートの Request Body では、テンプレートの通常の JSON コンポーネントが含まれ、properties.resourceGroup でターゲット リソース グループが定義されます。 また、テンプレートでは、それぞれをテンプレートに渡すことで、storageAccountTypetagNametagValue ブループリント パラメーターも再利用します。 ブループリント パラメーターは properties.parameters を定義するとテンプレートから利用することができ、テンプレート JSON 内ではそのキーと値のペアを使用して値を挿入します。 ブループリントとテンプレート パラメーターの名前は同じでもかまいませんが、それぞれがブループリントからテンプレート成果物に渡す方法を示すために、ここでは別のものにしてあります。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/templateStorage?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "kind": "template",
          "properties": {
              "template": {
                  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                  "contentVersion": "1.0.0.0",
                  "parameters": {
                      "storageAccountTypeFromBP": {
                          "type": "string",
                          "defaultValue": "Standard_LRS",
                          "allowedValues": [
                              "Standard_LRS",
                              "Standard_GRS",
                              "Standard_ZRS",
                              "Premium_LRS"
                          ],
                          "metadata": {
                              "description": "Storage Account type"
                          }
                      },
                      "tagNameFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag name from blueprint"
                          }
                      },
                      "tagValueFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag value from blueprint"
                          }
                      }
                  },
                  "variables": {
                      "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
                  },
                  "resources": [{
                      "type": "Microsoft.Storage/storageAccounts",
                      "name": "[variables('storageAccountName')]",
                      "apiVersion": "2016-01-01",
                      "tags": {
                         "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
                      },
                      "location": "[resourceGroups('storageRG').location]",
                      "sku": {
                          "name": "[parameters('storageAccountTypeFromBP')]"
                      },
                      "kind": "Storage",
                      "properties": {}
                  }],
                  "outputs": {
                      "storageAccountSku": {
                          "type": "string",
                          "value": "[variables('storageAccountName')]"
                      }
                  }
              },
              "resourceGroup": "storageRG",
              "parameters": {
                  "storageAccountTypeFromBP": {
                      "value": "[parameters('storageAccountType')]"
                  },
                  "tagNameFromBP": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValueFromBP": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  6. リソース グループにロールの割り当てを追加します。 前のロール割り当てエントリと同様に、次の例では、Owner ロールに対する定義識別子を使用して、ブループリントとは異なるパラメーターを指定します。 この例では、GUID が 8e3af657-a8ff-443c-a75c-2fe8c4bcb635Owner 組み込みロールを使用しています。

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleOwner?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      

ブループリントを発行する

これで成果物がブループリントに追加されたので、発行することができます。 発行すると、ブループリントをサブスクリプションに割り当てることができるようになります。

  • REST API URI

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/versions/{BlueprintVersion}?api-version=2018-11-01-preview
    

{BlueprintVersion} の値は、文字、数字、ハイフンの (スペースまたは他の特殊文字を含まない) 文字列です。 最大長は 20 文字です。 一意で内容がわかるものを使用します (例: v20180622-135541)。

ブループリントを割り当てる

REST API を使用してブループリントを発行すると、サブスクリプションに割り当てることができるようになります。 作成したブループリントを、ご自分の管理グループ階層下のいずれかのサブスクリプションに割り当てます。 ブループリントは、サブスクリプションに保存された場合、そのサブスクリプションに対してのみ割り当てることができます。 Request Body により割り当てるブループリントが指定され、ブループリント定義内のリソース グループに名前と場所が付与されます。 また、ブループリントで定義され、1 つ以上の添付成果物で使用されるすべてのパラメーターも Request Body により提供されます。

各 REST API URI で、以下の変数を実際の値に置き換えます。

  • {tenantId} - 実際のテナント ID に置き換えます。
  • {YourMG} - 実際の管理グループの ID に置き換えます。
  • {subscriptionId} - 実際のサブスクリプション ID に置き換えます。
  1. Azure Blueprints のサービス プリンシパルに、ターゲット サブスクリプションでの Owner ロールを提供します。 AppId は静的 (f71766dc-90d9-4b7d-bd9d-4499c4331c3f) ですが、サービス プリンシパル ID はテナントによって異なります。 お使いのテナントの詳細を要求するには、次の REST API を使用します。 Azure Active Directory Graph API が使用されますが、承認は異なります。

    • REST API URI

      GET https://graph.windows.net/{tenantId}/servicePrincipals?api-version=1.6&$filter=appId eq 'f71766dc-90d9-4b7d-bd9d-4499c4331c3f'
      
  2. サブスクリプションに割り当てることにより、ブループリントのデプロイを実行します。 contributors および owners パラメーターにはロールの割り当てを付与するプリンシパルの objectIds の配列が必要なので、Azure Active Directory Graph API を使用して、独自のユーザー、グループ、またはサービス プリンシパルに対する Request Body で使用するための objectIds を収集します。

    • REST API URI

      PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
      
    • 要求本文

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • ユーザー割り当てマネージド ID

      ブループリントの割り当てでは、ユーザー割り当てマネージド ID を使用することもできます。 この場合、要求本文の identity 部分が次のように変わります。 {yourRG}{userIdentity} は、それぞれ実際のリソース グループの名前とユーザー割り当てマネージド ID の名前に置き換えてください。

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      ユーザー割り当てマネージド ID は、ブループリントを割り当てるユーザーにアクセス許可があれば、どのサブスクリプションおよびどのリソース グループに属していてもかまいません。

      重要

      Azure Blueprints は、ユーザー割り当てのマネージド ID を管理しません。 ユーザーが各自で十分なロールとアクセス許可を割り当てる必要があります。そうしないと、ブループリントの割り当てに失敗します。

リソースをクリーンアップする

ブループリントを割り当て解除する

ブループリントは、サブスクリプションから削除することができます。 多くの場合、アーティファクトのリソースが不要になったときは削除するようにします。 ブループリントを削除しても、そのブループリントの一部として割り当てられている成果物は後に残されます。 ブループリントの割り当てを削除するには、次の REST API 操作を使用します。

  • REST API URI

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
    

ブループリントを削除する

ブループリント自体を削除するには、次の REST API 操作を使用します。

  • REST API URI

    DELETE https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
    

次のステップ

このクイックスタートでは、REST API を使用して、ブループリントを作成、割り当て、削除しました。 Azure Blueprints の詳細については、ブループリントのライフサイクルに関する記事に進んでください。