Nasazení předplatného se soubory Bicep

Pokud chcete zjednodušit správu prostředků, můžete prostředky nasadit na úrovni vašeho předplatného Azure. Do svého předplatného můžete například nasadit zásady a řízení přístupu na základě role v Azure (Azure RBAC), které je použije napříč vaším předplatným.

Tento článek popisuje, jak nastavit rozsah nasazení na předplatné v souboru Bicep.

Poznámka

V nasazení na úrovni předplatného můžete provést nasazení do 800 různých skupin prostředků.

Školicí materiály

Pokud byste se raději o oborech nasazení dozvěděli prostřednictvím podrobných pokynů, přečtěte si téma Nasazení prostředků do předplatných, skupin pro správu a tenantů pomocí nástroje Bicep.

Podporované prostředky

Na úrovni předplatného není možné nasadit všechny typy prostředků. Tato část obsahuje seznam podporovaných typů prostředků.

Pro Azure Blueprints použijte:

V případě zásad Azure použijte:

Pro řízení přístupu použijte:

Pro vnořené šablony, které se nasazují do skupin prostředků, použijte:

Při vytváření nových skupin prostředků použijte:

Ke správě předplatného použijte:

Pro účely monitorování použijte:

Z důvodu zabezpečení použijte:

Mezi další podporované typy patří:

Nastavit obor

Pokud chcete nastavit rozsah na předplatné, použijte:

targetScope = 'subscription'

Příkazy nasazení

K nasazení do předplatného použijte příkazy pro nasazení na úrovni předplatného.

Pro Azure CLI použijte příkaz az deployment sub create. Následující příklad nasadí šablonu pro vytvoření skupiny prostředků:

az deployment sub create \
  --name demoSubDeployment \
  --location centralus \
  --template-file main.bicep \
  --parameters rgName=demoResourceGroup rgLocation=centralus

Podrobnější informace o příkazech nasazení a možnostech nasazení šablon ARM najdete tady:

Umístění a název nasazení

Pro nasazení na úrovni předplatného musíte zadat umístění nasazení. Umístění nasazení je oddělené od umístění prostředků, které nasazujete. Umístění nasazení určuje, kam se mají ukládat data nasazení. Nasazení skupin pro správu a tenantů také vyžadují umístění. U nasazení skupin prostředků se umístění skupiny prostředků používá k uložení dat nasazení.

Můžete zadat název nasazení nebo použít výchozí název nasazení. Výchozí název je název souboru šablony. Například nasazení šablony s názvem main.json vytvoří výchozí název nasazení main.

Pro každý název nasazení je umístění neměnné. Nasazení nemůžete vytvořit v jednom umístění, pokud existuje nasazení se stejným názvem v jiném umístění. Pokud například vytvoříte nasazení předplatného s názvem deployment1 v centralus, nemůžete později vytvořit další nasazení s názvem deployment1 , ale umístění westus. Pokud se zobrazí kód InvalidDeploymentLocationchyby , použijte pro tento název jiný název nebo stejné umístění jako v předchozím nasazení.

Rozsahy nasazení

Při nasazování do předplatného můžete prostředky nasadit do:

  • cílové předplatné z operace
  • libovolné předplatné v tenantovi
  • skupiny prostředků v rámci předplatného nebo jiných předplatných
  • tenant pro předplatné

Prostředek rozšíření je možné omezit na cíl, který se liší od cíle nasazení.

Uživatel nasazující šablonu musí mít přístup k zadanému oboru.

Rozsah na předplatné

Pokud chcete prostředky nasadit do cílového předplatného, přidejte je pomocí klíčového resource slova .

targetScope = 'subscription'

// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  ...
}

Příklady nasazení do předplatného najdete v tématech Vytvoření skupin prostředků pomocí Bicepu a Přiřazení definice zásad.

Pokud chcete nasadit prostředky do předplatného, které se liší od předplatného operace, přidejte modul. K nastavení vlastnosti použijte funkci předplatnéhoscope. subscriptionId Zadejte vlastnost k ID předplatného, do kterého chcete nasadit.

targetScope = 'subscription'

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentSub'
  scope: subscription(otherSubscriptionID)
}

Obor na skupinu prostředků

Pokud chcete nasadit prostředky do skupiny prostředků v rámci předplatného, přidejte modul a nastavte jeho scope vlastnost. Pokud skupina prostředků již existuje, nastavte hodnotu oboru pomocí funkce resourceGroup . Zadejte název skupiny prostředků.

targetScope = 'subscription'

param resourceGroupName string

module exampleModule 'module.bicep' = {
  name: 'exampleModule'
  scope: resourceGroup(resourceGroupName)
}

Pokud je skupina prostředků vytvořená ve stejném souboru Bicep, použijte k nastavení hodnoty oboru symbolický název skupiny prostředků. Příklad nastavení oboru na symbolický název najdete v tématu Vytvoření skupiny prostředků pomocí bicepu.

Rozsah na tenanta

Pokud chcete v tenantovi vytvořit prostředky, přidejte modul. Pomocí funkce tenanta nastavte jeho scope vlastnost.

Uživatel, který šablonu nasazuje, musí mít požadovaný přístup k nasazení v tenantovi.

Následující příklad obsahuje modul, který se nasadí do tenanta.

targetScope = 'subscription'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Místo použití modulu můžete pro některé typy prostředků nastavit obor na tenant() . Následující příklad nasadí skupinu pro správu v tenantovi.

targetScope = 'subscription'

param mgName string = 'mg-${uniqueString(newGuid())}'

// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Další informace najdete v tématu Skupina pro správu.

Skupiny prostředků

Informace o vytváření skupin prostředků najdete v tématu Vytvoření skupiny prostředků pomocí bicepu.

Azure Policy

Přiřazení definice zásad

Následující příklad přiřadí k předplatnému existující definici zásad. Pokud definice zásady přebírá parametry, zadejte je jako objekt. Pokud definice zásady nepřebírají parametry, použijte výchozí prázdný objekt.

targetScope = 'subscription'

param policyDefinitionID string
param policyName string
param policyParameters object = {}

resource policyAssign 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: policyName
  properties: {
    policyDefinitionId: policyDefinitionID
    parameters: policyParameters
  }
}

Vytvoření a přiřazení definic zásad

Definici zásad můžete definovat a přiřadit ve stejném souboru Bicep.

targetScope = 'subscription'

resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationpolicy'
  properties: {
    policyType: 'Custom'
    parameters: {}
    policyRule: {
      if: {
        field: 'location'
        equals: 'northeurope'
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource locationRestrict 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'allowedLocation'
  properties: {
    policyDefinitionId: locationPolicy.id
  }
}

Řízení přístupu

Další informace o přiřazování rolí najdete v tématu Přidání přiřazení rolí Azure pomocí šablon Azure Resource Manager.

Následující příklad vytvoří skupinu prostředků, použije na ni zámek a přiřadí roli objektu zabezpečení.

targetScope = 'subscription'

@description('Name of the resourceGroup to create')
param resourceGroupName string

@description('Location for the resourceGroup')
param resourceGroupLocation string

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'

@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)

var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'

resource newResourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
  properties: {}
}

module applyLock 'lock.bicep' = {
  name: 'applyLock'
  scope: newResourceGroup
}

module assignRole 'role.bicep' = {
  name: 'assignRBACRole'
  scope: newResourceGroup
  params: {
    principalId: principalId
    roleNameGuid: roleAssignmentName
    roleDefinitionId: roleID
  }
}

Následující příklad ukazuje modul pro použití zámku:

resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
  name: 'rgLock'
  properties: {
    level: 'CanNotDelete'
    notes: 'Resource group should not be deleted.'
  }
}

Další příklad ukazuje modul pro přiřazení role:

@description('The principal to assign the role to')
param principalId string

@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()

param roleDefinitionId string

resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleNameGuid
  properties: {
    roleDefinitionId: roleDefinitionId
    principalId: principalId
  }
}

Další kroky

Další informace o dalších oborech najdete tady: