Funciones de recurso para Bicep

En este artículo se describen las funciones de Bicep para obtener valores de recurso.

Para obtener valores de la implementación actual, consulte Funciones con valores de implementación.

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

Devuelve el id. de recurso de un recurso de extensión. Un recurso de extensión es un tipo de recurso que se aplica a otro para agregarlo a sus funcionalidades.

Espacio de nombres: az.

La función extensionResourceId está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id.

El formato básico del identificador de recurso devuelto por esta función es:

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

El segmento de ámbito varía según el recurso que se está ampliando.

Cuando el recurso de extensión se aplica a un recurso, el identificador de recurso se devuelve en el formato siguiente:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Cuando el recurso de extensión se aplica a un grupo de recursos, el formato es:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Cuando el recurso de extensión se aplica a una suscripción, el formato es:

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Cuando el recurso de extensión se aplica a un grupo de administración, el formato es:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Una definición de directiva personalizada implementada en un grupo de administración se implementa como recurso de extensión. Para crear y asignar una directiva, implemente el siguiente archivo de Bicep en un grupo de administración.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Las definiciones de directivas integradas son recursos del nivel de inquilino. Para obtener un ejemplo de implementación de una definición de directiva integrada, consulte tenantResourceId.

getSecret

keyVaultName.getSecret(secretName)

Devuelve un secreto de Azure Key Vault. Use esta función para pasar un secreto a un parámetro de cadena segura de un módulo Bicep.

Nota:

La función az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) se puede usar en archivos .bicepparam para recuperar secretos del almacén de claves. Para más información, vea getSecret.

Solo puede usar la getSecret función desde la params sección de un módulo. Solo puede usarlo con un Microsoft.KeyVault/vaults recurso.

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

Se produce un error si intenta usar esta función en cualquier otra parte del archivo de Bicep. También se produce un error si usa esta función con interpolación de cadenas, incluso cuando se utiliza en la sección de parámetros.

La función solo se puede usar con un parámetro del módulo que tenga el elemento decorator @secure().

El almacén de claves debe tener enabledForTemplateDeployment establecido en true. El usuario que implementa el archivo Bicep debe tener acceso al secreto. Para obtener más información, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación de Bicep.

No es necesario un calificador de espacio de nombres porque la función se usa con un tipo de recurso.

Parámetros

Parámetro Obligatorio Type Descripción
secretName string Nombre del secreto almacenado en un almacén de claves.

Valor devuelto

Valor del secreto para el nombre del secreto.

Ejemplo

El siguiente archivo de Bicep se usa como módulo. Tiene un parámetro adminPassword definido con el decorador @secure().

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2022-08-01-preview' = {
  ...
}

El siguiente archivo de Bicep consume el archivo de Bicep anterior como módulo. El archivo de Bicep hace referencia a un almacén de claves existente y llama a la función getSecret para recuperar el secreto del almacén de claves y, a continuación, pasa el valor como parámetro al módulo.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

lista*

resourceName.list([apiVersion], [functionValues])

Puede llamar a una función de lista para cualquier tipo de recurso con una operación que comience por list. Algunos usos habituales son list, listKeys, listKeyValue y listSecrets.

La sintaxis de esta función varía según el nombre de la operación de la lista. Los valores devueltos también varían según la operación. Bicep no admite actualmente finalizaciones y validación de funciones list*.

Con la versión 0.4.X o posterior de la CLI de Bicep, puede llamar a la función de lista con el operador de acceso. Por ejemplo, storageAccount.listKeys().

No es necesario un calificador de espacio de nombres porque la función se usa con un tipo de recurso.

Parámetros

Parámetro Obligatorio Type Descripción
apiVersion No string Si no proporciona este parámetro, se usa la versión de API para el recurso. Proporcione solo una versión de API personalizada cuando necesite que la función se ejecute con una versión específica. Use el formato aaaa-mm-dd.
functionValues No object Un objeto que tiene valores para la función. Proporcione este objeto solo para las funciones que admiten la recepción de un objeto con valores de parámetro, como listAccountSas en una cuenta de almacenamiento. En este artículo se muestra un ejemplo de cómo pasar los valores de funciones.

Usos válidos

Las funciones list se pueden usar en las propiedades de una definición de recursos. No use una función list que exponga información confidencial en la sección de salidas de un archivo de Bicep. Los valores de salida se almacenan en el historial de implementaciones y un usuario malintencionado podría recuperarlos.

Cuando se usa con un bucle iterativo, puede usar las funciones list para input porque la expresión se asigna a la propiedad de recurso. No se pueden utilizar con count porque debe determinarse el recuento antes de resolver la función list.

Si usa una función list con un recurso que se implementa de forma condicional, se puede evaluar la función incluso si el recurso no está implementado. Se genera un error si la función list hace referencia a un recurso que no existe. Use el operador de expresión condicional ?: para asegurarse de que la función solo se evalúa cuando se implementa el recurso.

Valor devuelto

El objeto devuelto varía según la función de la lista que use. Por ejemplo, listKeys para una cuenta de almacenamiento devuelve el formato siguiente:

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

Otras funciones list tienen otros formatos de devolución. Para ver el formato de una función, inclúyalo en la sección de salidas tal y como se muestra en el archivo de Bicep de ejemplo.

Ejemplo de lista

En el ejemplo siguiente se implementa una cuenta de almacenamiento y, después, se llama a listKeys en ella. La clave se utiliza cuando se configura un valor para los scripts de implementación.

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'scriptWithStorage'
  location: location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

En el ejemplo siguiente se muestra una función list que toma un parámetro. En este caso, la función es listAccountSas. Pase un objeto para la hora de expiración. Dicha hora debe ser futura.

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

Implementaciones

Los usos posibles de list* se muestran en la tabla siguiente.

Tipo de recurso Nombre de función
Microsoft.Addons/supportProviders listsupportplaninfo
Microsoft.AnalysisServices/servers listGatewayStatus
Microsoft.ApiManagement/service/authorizationServers listSecrets
Microsoft.ApiManagement/service/gateways listKeys
Microsoft.ApiManagement/service/identityProviders listSecrets
Microsoft.ApiManagement/service/namedValues listValue
Microsoft.ApiManagement/service/openidConnectProviders listSecrets
Microsoft.ApiManagement/service/subscriptions listSecrets
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/Spring listTestKeys
Microsoft.Automation/automationAccounts listKeys
Microsoft.Batch/batchAccounts listkeys
Microsoft.BatchAI/workspaces/experiments/jobs listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/registries listCredentials
Microsoft.ContainerRegistry/registries listUsages
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetails
Microsoft.ContainerRegistry/registries/webhooks listEvents
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registries/tasks listDetails
Microsoft.ContainerService/managedClusters listClusterAdminCredential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/jobs listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factories/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizations
Microsoft.Devices/iotHubs listkeys
Microsoft.Devices/iotHubs/iotHubKeys listkeys
Microsoft.Devices/provisioningServices/keys listkeys
Microsoft.Devices/provisioningServices listkeys
Microsoft.DevTestLab/labs ListVhds
Microsoft.DevTestLab/labs/schedules ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.DomainRegistration listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/namespaces/authorizationRules listkeys
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft.ImportExport/jobs listBitLockerKeys
Microsoft.Kusto/Clusters/Databases ListPrincipals
Microsoft.LabServices/labs/users list
Microsoft.LabServices/labs/virtualMachines list
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationAccounts/assemblies listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft.Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft.Logic/workflows listCallbackUrl
Microsoft.Logic/workflows listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/repetitions listExpressionTraces
Microsoft.Logic/workflows/triggers listCallbackUrl
Microsoft.Logic/workflows/versions/triggers listCallbackUrl
Microsoft.MachineLearning/webServices listkeys
Microsoft.MachineLearning/Workspaces listworkspacekeys
Microsoft.MachineLearningServices/workspaces/computes listKeys
Microsoft.MachineLearningServices/workspaces/computes listNodes
Microsoft.MachineLearningServices/workspaces listKeys
Microsoft.Maps/accounts listKeys
Microsoft.Media/mediaservices/assets listContainerSas
Microsoft.Media/mediaservices/assets listStreamingLocators
Microsoft.Media/mediaservices/streamingLocators listContentKeys
Microsoft.Media/mediaservices/streamingLocators listPaths
Microsoft.Network/applicationSecurityGroups listIpConfigurations
Microsoft.NotificationHubs/Namespaces/authorizationRules listkeys
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft.OperationalInsights/workspaces list
Microsoft.OperationalInsights/workspaces listKeys
Microsoft.PolicyInsights/remediations listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices listAdminKeys
Microsoft.Search/searchServices listQueryKeys
Microsoft.SignalRService/SignalR listkeys
Microsoft.Storage/storageAccounts listAccountSas
Microsoft.Storage/storageAccounts listkeys
Microsoft.Storage/storageAccounts listServiceSas
Microsoft.StorSimple/managers/devices listFailoverSets
Microsoft.StorSimple/managers/devices listFailoverTargets
Microsoft.StorSimple/managers listActivationKey
Microsoft.StorSimple/managers listPublicEncryptionKey
Microsoft.Synapse/workspaces/integrationRuntimes listAuthKeys
Microsoft.Web/connectionGateways ListStatus
microsoft.web/connections listconsentlinks
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups list
Microsoft.Web/sites/config list
microsoft.web/sites/functions listkeys
microsoft.web/sites/functions listsecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys
microsoft.web/sites listsyncfunctiontriggerstatus
microsoft.web/sites/slots/functions listsecrets
microsoft.web/sites/slots/backups list
Microsoft.Web/sites/slots/config list
microsoft.web/sites/slots/functions listsecrets

Para determinar qué tipos de recursos tienen una operación de lista, dispone de las siguientes opciones:

  • Vea las operaciones de API de REST para un proveedor de recursos y busque operaciones List. Por ejemplo, las cuentas de almacenamiento tienen una operación listKeys.

  • Use el cmdlet de PowerShell Get-​AzProvider​Operation. En el ejemplo siguiente se obtienen todas las operaciones List para cuentas de almacenamiento:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Use el siguiente comando de la CLI de Azure para filtrar solo las operaciones de la lista:

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

pickZones

pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])

Determina si un tipo de recurso admite zonas para una región. Esta función solo admite recursos zonales. Los servicios con redundancia de zona devuelven una matriz vacía. Para obtener más información, consulte Servicios compatibles con Availability Zones.

Espacio de nombres: az.

Parámetros

Parámetro Obligatorio Type Descripción
providerNamespace string Espacio de nombres del proveedor de recursos para que el tipo de recurso compruebe la compatibilidad de la zona.
resourceType string El tipo de recurso para comprobar la compatibilidad de la zona.
ubicación string Región en la que se va a comprobar la compatibilidad de la zona.
numberOfZones No integer Número de zonas lógicas que se van a devolver. El valor predeterminado es 1. El número debe ser un entero positivo de 1 a 3. Use 1 para los recursos de una sola zona. En el caso de los recursos de varias zonas, el valor debe ser menor o igual que el número de zonas admitidas.
offset No integer Desplazamiento de la zona lógica inicial. La función devuelve un error si el desplazamiento más el valor de numberOfZones supera el número de zonas admitidas.

Valor devuelto

Matriz con las zonas admitidas. Cuando se usan los valores predeterminados para offset y numberOfZones, un tipo de recurso y una región que admiten zonas devuelven la siguiente matriz:

[
    "1"
]

Cuando el parámetro numberOfZones se establece en 3, devuelve lo siguiente:

[
    "1",
    "2",
    "3"
]

Si el tipo de recurso o la región no admiten zonas, se devuelve una matriz vacía.

[
]

Comentarios

Hay distintas categorías para Azure Availability Zones: zonal y con redundancia de zona. La función pickZones se puede usar para devolver una zona de disponibilidad para un recurso zonal. En el caso de servicios con redundancia de zona (ZRS), la función devuelve una matriz vacía. Los recursos zonales suelen tener una propiedad zones en el nivel superior de la definición del recurso. Para determinar la categoría de soporte técnico para las zonas de disponibilidad, vea Servicios de Azure compatibles con Availability Zones.

Para determinar si una determinada región o ubicación de Azure admite zonas de disponibilidad, llame a la función pickZones con un tipo de recurso zonal, por ejemplo, Microsoft.Network/publicIPAddresses. Si la respuesta no está vacía, la región admite zonas de disponibilidad.

Ejemplo de pickZones

En el archivo de Bicep siguiente se muestran tres resultados para usar la función pickZones.

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

La salida de los ejemplos anteriores devuelve tres matrices.

Nombre Tipo Value
admitido array [ "1" ]
notSupportedRegion array []
notSupportedType array []

Puede usar la respuesta de pickZones a fin de determinar si se debe proporcionar un valor NULL para las zonas o asignar máquinas virtuales a otras zonas.

providers

La función "providers" está en desuso en Bicep. Por tanto, no se recomienda utilizarla. Si usó esta función para obtener una versión de la API para el proveedor de recursos, se recomienda proporcionar una versión de la API específica en el archivo de Bicep. El uso de una versión de API devuelta dinámicamente puede interrumpir la plantilla si las propiedades cambian entre versiones.

La operación de proveedores sigue estando disponible a través de la API de REST. Se puede usar fuera de un archivo de Bicep para obtener información sobre un proveedor de recursos.

Espacio de nombres: az.

reference

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

Devuelve un objeto que representa el estado de tiempo de ejecución de un recurso. La salida y el comportamiento de la función reference se basan en gran medida en cómo cada proveedor de recursos (RP) implementa sus respuestas PUT y GET.

Espacio de nombres: az.

Los archivos de Bicep proporcionan acceso a la función de referencia, aunque normalmente no es necesario. En su lugar, se recomienda usar el nombre simbólico del recurso. La función de referencia solo se puede usar dentro del objeto properties de un recurso y no se puede usar para propiedades de nivel superior, como name o location. Lo mismo se aplica generalmente a las referencias mediante el nombre simbólico. Sin embargo, para las propiedades como name, es posible generar una plantilla sin usar la función de referencia. Se sabe que hay suficiente información sobre el nombre del recurso para emitir directamente el nombre. Se conoce como propiedades en tiempo de compilación. La validación de Bicep puede identificar cualquier uso incorrecto del nombre simbólico.

En el ejemplo siguiente se implementa una cuenta de almacenamiento. Las dos primeras salidas proporcionan los mismos resultados.

param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location

Para obtener una propiedad de un recurso existente que no está implementado en la plantilla, use la palabra clave existing:

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
  name: storageAccountName
}

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

Para hacer referencia a un recurso anidado dentro de un recurso primario, use el descriptor de acceso anidado (::). Esta sintaxis solo se usa cuando se accede al recurso anidado desde fuera del recurso primario.

vNet1::subnet1.properties.addressPrefix

Si intenta hacer referencia a un recurso que no existe, se produce el error NotFound y se produce un error en la implementación.

resourceId

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Devuelve el identificador único de un recurso.

Espacio de nombres: az.

La función resourceId está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id.

Utilice esta función cuando el nombre del recurso sea ambiguo o no esté aprovisionado dentro del mismo archivo de Bicep. El formato del identificador devuelto varía en función de si la implementación se produce en el ámbito de un grupo de recursos, una suscripción, un grupo de administración o un inquilino.

Por ejemplo:

param storageAccountName string
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Para obtener el identificador de recurso para un recurso que no está implementado en el archivo de Bicep, use la palabra clave existente.

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
    name: storageAccountName
}

output storageID string = storageAccount.id

Para obtener más información, consulte la función resourceId de plantilla JSON.

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

Devuelve el identificador único de un recurso implementado en el nivel de suscripción.

Espacio de nombres: az.

La función subscriptionResourceId está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id.

El identificador se devuelve con el formato siguiente:

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Observaciones

Utilice esta función para obtener el identificador de recurso de los recursos que se implementan en la suscripción en lugar de en un grupo de recursos. El identificador devuelto difiere del valor devuelto por la función resourceId en que no incluye un valor de grupo de recursos.

Ejemplo de subscriptionResourceId

El siguiente archivo de Bicep asigna un rol integrado. Puede implementarlo en un grupo de recursos o en una suscripción. Usa la función subscriptionResourceId para obtener el id. de recurso de los recursos integrados.

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

Devuelve el identificador único de un recurso implementado en el nivel de grupo de administración.

Espacio de nombres: az.

La función managementGroupResourceId está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id.

El identificador se devuelve con el formato siguiente:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

Observaciones

Utilice esta función para obtener el identificador de recurso de los recursos que se implementan en el grupo de administración en lugar de en un grupo de recursos. El id. devuelto difiere del valor devuelto por la función resourceId en que no incluye un valor de id. de subscripción ni de grupo de recursos.

Ejemplo de managementGroupResourceID

La siguiente plantilla crea y asigna una definición de directiva. Usa la función managementGroupResourceId para obtener el id. de recurso de la definición de directiva.

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2021-06-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

tenantResourceId

tenantResourceId(resourceType, resourceName1, [resourceName2], ...)

Devuelve el identificador único de un recurso implementado en el nivel de inquilino.

Espacio de nombres: az.

La función tenantResourceId está disponible en archivos de Bicep, pero normalmente no la necesita. En su lugar, use el nombre simbólico del recurso y acceda a la propiedad id.

El identificador se devuelve con el formato siguiente:

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Las definiciones de directivas integradas son recursos del nivel de inquilino. Para implementar una asignación de directiva que hace referencia a una definición de directiva integrada, use la función tenantResourceId.

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

Pasos siguientes