Előfizetések üzembe helyezése Bicep-fájlokkal

Az erőforrások kezelésének egyszerűsítése érdekében az erőforrásokat az Azure-előfizetés szintjén helyezheti üzembe. Üzembe helyezhet például szabályzatokat és Azure-beli szerepköralapú hozzáférés-vezérlést (Azure RBAC) az előfizetésében, amely az előfizetésre alkalmazza őket.

Ez a cikk azt ismerteti, hogyan állíthatja be az üzembehelyezési hatókört egy Előfizetésre egy Bicep-fájlban.

Megjegyzés

Előfizetési szintű üzembe helyezés esetén 800 különböző erőforráscsoportra telepítheti azokat.

Képzési források

Ha lépésről lépésre szeretne többet megtudni az üzembehelyezési hatókörökről, olvassa el az Erőforrások üzembe helyezése előfizetések, felügyeleti csoportok és bérlők számára a Bicep használatával című témakört.

Támogatott erőforrások

Nem minden erőforrástípus helyezhető üzembe az előfizetés szintjén. Ez a szakasz felsorolja, hogy mely erőforrástípusok támogatottak.

Az Azure Blueprints esetében használja a következőt:

Azure-szabályzatok esetén használja a következőket:

Hozzáférés-vezérléshez használja a következőt:

Az erőforráscsoportokban üzembe helyező beágyazott sablonok esetében használja a következőt:

Új erőforráscsoportok létrehozásához használja a következőt:

Az előfizetés kezeléséhez használja a következőt:

Monitorozáshoz használja a következőt:

A biztonság érdekében használja a következőt:

Egyéb támogatott típusok a következők:

Hatókör beállítása

A hatókör előfizetésre való beállításához használja a következőt:

targetScope = 'subscription'

Üzembehelyezési parancsok

Előfizetésben való üzembe helyezéshez használja az előfizetésszintű üzembehelyezési parancsokat.

Az Azure CLI-hez használja az az deployment sub create parancsot. Az alábbi példa egy sablont helyez üzembe egy erőforráscsoport létrehozásához:

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

Az ARM-sablonok üzembe helyezési parancsaival és beállításaival kapcsolatos részletesebb információkért lásd:

Üzembe helyezés helye és neve

Előfizetési szintű üzemelő példányok esetén meg kell adnia az üzembe helyezés helyét. Az üzembe helyezés helye eltér az üzembehelyezési erőforrások helyétől. Az üzembehelyezési hely határozza meg, hogy hol tárolja az üzembehelyezési adatokat. A felügyeleti csoport és a bérlő üzembe helyezéséhez is szükség van egy helyre. Az erőforráscsoport üzemelő példányai esetében az erőforráscsoport helye az üzembehelyezési adatok tárolására szolgál.

Megadhat egy nevet az üzembe helyezésnek, vagy használhatja az alapértelmezett üzembe helyezési nevet. Az alapértelmezett név a sablonfájl neve. A main.json nevű sablon üzembe helyezése például létrehozza a main alapértelmezett üzembehelyezési nevét.

Minden üzembe helyezési név esetében a hely nem módosítható. Nem hozható létre üzembe helyezés egyetlen helyen, ha egy másik helyen található egy azonos nevű meglévő üzemelő példány. Ha például a centralusban a Deployment1 névvel rendelkező előfizetési üzembe helyezést hoz létre, később nem hozhat létre egy másik üzembe helyezést a deployment1 névvel, hanem a westus helyével. Ha a hibakódot InvalidDeploymentLocationkapja, használjon másik nevet, vagy ugyanazt a helyet, mint az előző üzembe helyezés.

Üzembehelyezési hatókörök

Előfizetésben való üzembe helyezéskor az erőforrásokat a következőre helyezheti üzembe:

  • a művelet cél-előfizetése
  • bármely előfizetés a bérlőben
  • erőforráscsoportok az előfizetésben vagy más előfizetésekben
  • az előfizetés bérlője

A bővítményerőforrás hatóköre az üzembehelyezési céltól eltérő célra terjedhet ki.

A sablont üzembe helyező felhasználónak hozzáféréssel kell rendelkeznie a megadott hatókörhöz.

Hatókör az előfizetéshez

Ha erőforrásokat szeretne üzembe helyezni a cél-előfizetésben, adja hozzá ezeket az erőforrásokat a resource kulcsszóval.

targetScope = 'subscription'

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

Példák az előfizetésben való üzembe helyezésre: Erőforráscsoportok létrehozása a Bicep használatával és Szabályzatdefiníció hozzárendelése.

Ha a művelettől eltérő előfizetésben szeretne erőforrásokat üzembe helyezni, adjon hozzá egy modult. A tulajdonság beállításához használja az előfizetési függvénytscope. Adja meg a subscriptionId tulajdonságot annak az előfizetésnek az azonosítójára, amelybe üzembe szeretne helyezni.

targetScope = 'subscription'

param otherSubscriptionID string

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

Hatókör az erőforráscsoporthoz

Ha erőforrásokat szeretne üzembe helyezni egy erőforráscsoportban az előfizetésen belül, adjon hozzá egy modult, és állítsa be annak tulajdonságát scope . Ha az erőforráscsoport már létezik, a resourceGroup függvénnyel állítsa be a hatókör értékét. Adja meg az erőforráscsoport nevét.

targetScope = 'subscription'

param resourceGroupName string

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

Ha az erőforráscsoport ugyanabban a Bicep-fájlban van létrehozva, használja az erőforráscsoport szimbolikus nevét a hatókör értékének beállításához. Példa a hatókör szimbolikus névre való beállítására: Erőforráscsoport létrehozása a Bicep használatával.

Hatókör a bérlőre

Ha erőforrásokat szeretne létrehozni a bérlőben, adjon hozzá egy modult. A bérlőfüggvény használatával állítsa be a tulajdonságát scope .

A sablont telepítő felhasználónak rendelkeznie kell a bérlőn való üzembe helyezéshez szükséges hozzáféréssel.

Az alábbi példa egy, a bérlőn üzembe helyezett modult tartalmaz.

targetScope = 'subscription'

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

A modul használata helyett a hatókört tenant() egyes erőforrástípusokhoz is beállíthatja. Az alábbi példa egy felügyeleti csoportot helyez üzembe a bérlőben.

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

További információ: Felügyeleti csoport.

Erőforráscsoportok

További információ az erőforráscsoportok létrehozásáról: Erőforráscsoport létrehozása a Bicep használatával.

Azure Policy

Szabályzatdefiníció hozzárendelése

Az alábbi példa egy meglévő szabályzatdefiníciót rendel az előfizetéshez. Ha a szabályzatdefiníció paramétereket vesz fel, adja meg őket objektumként. Ha a szabályzatdefiníció nem fogad el paramétereket, használja az alapértelmezett üres objektumot.

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
  }
}

Szabályzatdefiníciók létrehozása és hozzárendelése

Definiálhat és hozzárendelhet egy szabályzatdefiníciót ugyanabban a Bicep-fájlban.

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
  }
}

Hozzáférés-vezérlés

A szerepkörök hozzárendelésével kapcsolatos további információkért lásd: Azure-beli szerepkör-hozzárendelések hozzáadása Azure-Resource Manager-sablonok használatával.

Az alábbi példa létrehoz egy erőforráscsoportot, zárolást alkalmaz rá, és hozzárendel egy szerepkört egy taghoz.

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
  }
}

Az alábbi példa azt a modult mutatja be, amely alkalmazza a zárolást:

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

A következő példa a szerepkör hozzárendelésére szolgáló modult mutatja be:

@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
  }
}

Következő lépések

Az egyéb hatókörökről az alábbiakban olvashat bővebben: