クイック スタート: 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 に自動的にはコピーされません。 | |
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 | |
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 |
Azure Cloud Shell を使用するには、以下のようにします。
Cloud Shell を開始します。
コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。
Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。
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
サブスクリプション レベルでブループリントを作成することもできます。 詳細については、サブスクリプションでのブループリントの作成例に関するページを参照してください。
初期 "ブループリント" オブジェクトを作成します。
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." } } } }
サブスクリプションでロールの割り当てを追加します。
Request Body
では成果物の種類が定義されていて、プロパティはロール定義の識別子と整合しており、プリンシパルの ID は値の配列として渡されます。 次の例では、指定されたロールを付与されたプリンシパル ID が、ブループリントの割り当て中に設定されるパラメーターに対して構成されます。 この例では、GUID がb24988ac-6180-42a0-ab88-20f7382dd24c
のContributor
組み込みロールを使用しています。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')]" } }
サブスクリプションでポリシーの割り当てを追加します。
Request Body
では成果物の種類が定義されていて、プロパティはポリシーまたはイニシアティブの定義と整合しており、ブループリントの割り当て中に定義済みのブループリント パラメーターを使用するようにポリシー割り当てを構成します。 この例では、GUID が49c88fc8-6fd1-46fd-a676-f12d1d3a4c71
のApply 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')]" } } } }
サブスクリプションでストレージ タグに対する別のポリシー割り当てを (
storageAccountType_ parameter
を再利用して) 追加します。 この追加のポリシー割り当て成果物は、ブループリントで定義されたパラメーターを複数の成果物で使用できることを示します。 この例では、storageAccountType
を使用して、リソース グループにタグを設定します。 この値によって、次のステップで作成するストレージ アカウントに関する情報が提供されます。 この例では、GUID が49c88fc8-6fd1-46fd-a676-f12d1d3a4c71
のApply 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')]" } } } }
リソース グループにテンプレートを追加します。 ARM テンプレートの
Request Body
では、テンプレートの通常の JSON コンポーネントが含まれ、properties.resourceGroup
でターゲット リソース グループが定義されます。 また、テンプレートでは、それぞれをテンプレートに渡すことで、storageAccountType
、tagName
、tagValue
ブループリント パラメーターも再利用します。 ブループリント パラメーターは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')]" } } } }
リソース グループにロールの割り当てを追加します。 前のロール割り当てエントリと同様に、次の例では、
Owner
ロールに対する定義識別子を使用して、ブループリントとは異なるパラメーターを指定します。 この例では、GUID が8e3af657-a8ff-443c-a75c-2fe8c4bcb635
のOwner
組み込みロールを使用しています。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 に置き換えます。
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'
サブスクリプションに割り当てることにより、ブループリントのデプロイを実行します。
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 の詳細については、ブループリントのライフサイクルに関する記事に進んでください。