使用标记对 Azure 资源和管理层次结构进行组织

标记是应用于 Azure 资源的元数据元素。 它们是键值对,可帮助你根据与组织相关的设置来识别资源。 如果要跟踪资源的部署环境,请添加名为 Environment 的键。 若要确定部署到生产环境的资源,请赋予它们 Production 值。 完全形成后,键值对变为 Environment = Production。

可以将标记应用于 Azure 资源、资源组和订阅。

警告

标记以纯文本形式存储。 切勿向标记中添加敏感值。 可以通过许多方法(包括成本报告、返回现有标记定义的命令、部署历史记录、导出的模板和监视日志)公开敏感值。

重要

标记名称对于操作不区分大小写。 系统会更新或检索具有标记名称的标记,而不考虑大小写。 但是,资源提供程序可能会保留为标记名称提供的大小写。 你将在成本报表中看到该大小写。

标记值区分大小写。

注意

本文介绍如何删除设备或服务中的个人数据,并且可用于为 GDPR 下的义务提供支持。 有关 GDPR 的常规信息,请参阅 Microsoft 信任中心的 GDPR 部分服务信任门户的 GDPR 部分

所需访问权限

可以通过两种方式获取对标记资源的所需访问权限。

  • 你可以拥有对 Microsoft.Resources/tags 资源类型的写入权限。 此权限允许你标记任何资源,即使你无权访问资源本身。 标记参与者角色授予此访问权限。 例如,标记参与者角色无法通过门户将标记应用到资源或资源组。 但是,该角色可以通过门户将标记应用到订阅。 它支持通过 Azure PowerShell 和 REST API 执行所有标记操作。

  • 你可以拥有对资源本身的写入权限。 参与者角色授予对任何实体应用标记所需的访问权限。 要将标记仅应用于一种资源类型,请使用该资源的参与者角色。 例如,要将标记应用到虚拟机,请使用虚拟机参与者

PowerShell

应用标记

Azure PowerShell 提供两个用于应用标记的命令:New-AzTagUpdate-AzTag。 需要具有 Az.Resources 模块 1.12.0 或更高版本。 可以使用 Get-InstalledModule -Name Az.Resources 检查自己的版本。 可以安装该模块,或安装 Azure PowerShell 3.6.1 或更高版本。

New-AzTag 替换资源、资源组或订阅中的所有标记。 调用该命令时,请传入要标记的实体的资源 ID。

以下示例将一组标记应用到存储帐户:

$tags = @{"Dept"="Finance"; "Status"="Normal"}
$resource = Get-AzResource -Name demoStorage -ResourceGroup demoGroup
New-AzTag -ResourceId $resource.id -Tag $tags

该命令完成后,会发现该资源带有两个标记。

Properties :
        Name    Value
        ======  =======
        Dept    Finance
        Status  Normal

如果再次运行该命令(但这一次使用不同的标记),则会发现以前的标记已消失。

$tags = @{"Team"="Compliance"; "Environment"="Production"}
New-AzTag -ResourceId $resource.id -Tag $tags
Properties :
        Name         Value
        ===========  ==========
        Environment  Production
        Team         Compliance

若要将标记添加到已经有标记的资源,请使用 Update-AzTag。 将 -Operation 参数设置为 Merge

$tags = @{"Dept"="Finance"; "Status"="Normal"}
Update-AzTag -ResourceId $resource.id -Tag $tags -Operation Merge

请注意,现有标记随着两个新标记的添加而增长。

Properties :
        Name         Value
        ===========  ==========
        Status       Normal
        Dept         Finance
        Team         Compliance
        Environment  Production

每个标记名称只能有一个值。 如果为标记提供新值,则即使使用合并操作,也会替换旧值。 以下示例将 Status 标记从 Normal 更改为 Green 。

$tags = @{"Status"="Green"}
Update-AzTag -ResourceId $resource.id -Tag $tags -Operation Merge
Properties :
        Name         Value
        ===========  ==========
        Status       Green
        Dept         Finance
        Team         Compliance
        Environment  Production

-Operation 参数设置为 Replace 时,新标记集将替换现有标记。

$tags = @{"Project"="ECommerce"; "CostCenter"="00123"; "Team"="Web"}
Update-AzTag -ResourceId $resource.id -Tag $tags -Operation Replace

资源中只会保留新标记。

Properties :
        Name        Value
        ==========  =========
        CostCenter  00123
        Team        Web
        Project     ECommerce

相同的命令也适用于资源组或订阅。 将它们传入要标记的资源组或订阅的标识符。

若要将一组新标记添加到资源组,请使用:

$tags = @{"Dept"="Finance"; "Status"="Normal"}
$resourceGroup = Get-AzResourceGroup -Name demoGroup
New-AzTag -ResourceId $resourceGroup.ResourceId -tag $tags

若要更新资源组的标记,请使用:

$tags = @{"CostCenter"="00123"; "Environment"="Production"}
$resourceGroup = Get-AzResourceGroup -Name demoGroup
Update-AzTag -ResourceId $resourceGroup.ResourceId -Tag $tags -Operation Merge

若要将一组新标记添加到订阅,请使用:

$tags = @{"CostCenter"="00123"; "Environment"="Dev"}
$subscription = (Get-AzSubscription -SubscriptionName "Example Subscription").Id
New-AzTag -ResourceId "/subscriptions/$subscription" -Tag $tags

若要更新订阅的标记,请使用:

$tags = @{"Team"="Web Apps"}
$subscription = (Get-AzSubscription -SubscriptionName "Example Subscription").Id
Update-AzTag -ResourceId "/subscriptions/$subscription" -Tag $tags -Operation Merge

一个资源组中可能有多个同名资源。 在这种情况下,可以通过以下命令设置每个资源:

$resource = Get-AzResource -ResourceName sqlDatabase1 -ResourceGroupName examplegroup
$resource | ForEach-Object { Update-AzTag -Tag @{ "Dept"="IT"; "Environment"="Test" } -ResourceId $_.ResourceId -Operation Merge }

列出标记

若要获取资源、资源组或订阅的标记,请使用 Get-AzTag 命令并传入实体的资源 ID。

若要查看资源的标记,请使用:

$resource = Get-AzResource -Name demoStorage -ResourceGroup demoGroup
Get-AzTag -ResourceId $resource.id

若要查看资源组的标记,请使用:

$resourceGroup = Get-AzResourceGroup -Name demoGroup
Get-AzTag -ResourceId $resourceGroup.ResourceId

若要查看订阅的标记,请使用:

$subscription = (Get-AzSubscription -SubscriptionName "Example Subscription").Id
Get-AzTag -ResourceId "/subscriptions/$subscription"

按标记列出

若要获取具有特定标记名称和值的资源,请使用:

(Get-AzResource -Tag @{ "CostCenter"="00123"}).Name

若要获取具有特定标记名称和任意标记值的资源,请使用:

(Get-AzResource -TagName "Dept").Name

若要获取具有特定标记名称和值的资源组,请使用:

(Get-AzResourceGroup -Tag @{ "CostCenter"="00123" }).ResourceGroupName

删除标记

若要删除特定标记,请使用 Update-AzTag,并将 -Operation 设置为 Delete。 传递要删除的标记的资源 ID。

$removeTags = @{"Project"="ECommerce"; "Team"="Web"}
Update-AzTag -ResourceId $resource.id -Tag $removeTags -Operation Delete

指定的标记随即被删除。

Properties :
        Name        Value
        ==========  =====
        CostCenter  00123

若要删除所有标记,请使用 Remove-AzTag 命令。

$subscription = (Get-AzSubscription -SubscriptionName "Example Subscription").Id
Remove-AzTag -ResourceId "/subscriptions/$subscription"

Azure CLI

应用标记

Azure CLI 提供了两个命令用于应用标记:az tag createaz tag update。 必须具有 Azure CLI 2.10.0 或更高版本。 可以使用 az version 检查自己的版本。 若要更新或安装 CLI,请参阅安装 Azure CLI

az tag create 替换资源、资源组或订阅中的所有标记。 调用该命令时,请传入要标记的实体的资源 ID。

以下示例将一组标记应用到存储帐户:

resource=$(az resource show -g demoGroup -n demoStorage --resource-type Microsoft.Storage/storageAccounts --query "id" --output tsv)
az tag create --resource-id $resource --tags Dept=Finance Status=Normal

该命令完成后,会发现该资源带有两个标记。

"properties": {
  "tags": {
    "Dept": "Finance",
    "Status": "Normal"
  }
},

如果再次运行该命令(但这一次使用不同的标记),则会发现以前的标记已消失。

az tag create --resource-id $resource --tags Team=Compliance Environment=Production
"properties": {
  "tags": {
    "Environment": "Production",
    "Team": "Compliance"
  }
},

若要将标记添加到已经有标记的资源,请使用 az tag update。 将 --operation 参数设置为 Merge

az tag update --resource-id $resource --operation Merge --tags Dept=Finance Status=Normal

请注意,现有标记随着两个新标记的添加而增长。

"properties": {
  "tags": {
    "Dept": "Finance",
    "Environment": "Production",
    "Status": "Normal",
    "Team": "Compliance"
  }
},

每个标记名称只能有一个值。 如果为标记提供新值,则即使使用合并操作,新标记也会替换旧值。 以下示例将 Status 标记从 Normal 更改为 Green 。

az tag update --resource-id $resource --operation Merge --tags Status=Green
"properties": {
  "tags": {
    "Dept": "Finance",
    "Environment": "Production",
    "Status": "Green",
    "Team": "Compliance"
  }
},

--operation 参数设置为 Replace 时,新标记集将替换现有标记。

az tag update --resource-id $resource --operation Replace --tags Project=ECommerce CostCenter=00123 Team=Web

资源中只会保留新标记。

"properties": {
  "tags": {
    "CostCenter": "00123",
    "Project": "ECommerce",
    "Team": "Web"
  }
},

相同的命令也适用于资源组或订阅。 将它们传入要标记的资源组或订阅的标识符。

若要将一组新标记添加到资源组,请使用:

group=$(az group show -n demoGroup --query id --output tsv)
az tag create --resource-id $group --tags Dept=Finance Status=Normal

若要更新资源组的标记,请使用:

az tag update --resource-id $group --operation Merge --tags CostCenter=00123 Environment=Production

若要将一组新标记添加到订阅,请使用:

sub=$(az account show --subscription "Demo Subscription" --query id --output tsv)
az tag create --resource-id /subscriptions/$sub --tags CostCenter=00123 Environment=Dev

若要更新订阅的标记,请使用:

az tag update --resource-id /subscriptions/$sub --operation Merge --tags Team="Web Apps"

列出标记

若要获取资源、资源组或订阅的标记,请使用 az tag list 命令并传入实体的资源 ID。

若要查看资源的标记,请使用:

resource=$(az resource show -g demoGroup -n demoStorage --resource-type Microsoft.Storage/storageAccounts --query "id" --output tsv)
az tag list --resource-id $resource

若要查看资源组的标记,请使用:

group=$(az group show -n demoGroup --query id --output tsv)
az tag list --resource-id $group

若要查看订阅的标记,请使用:

sub=$(az account show --subscription "Demo Subscription" --query id --output tsv)
az tag list --resource-id /subscriptions/$sub

按标记列出

若要获取具有特定标记名称和值的资源,请使用:

az resource list --tag CostCenter=00123 --query [].name

若要获取具有特定标记名称和任意标记值的资源,请使用:

az resource list --tag Team --query [].name

若要获取具有特定标记名称和值的资源组,请使用:

az group list --tag Dept=Finance

删除标记

若要删除特定标记,请使用 az tag update,并将 --operation 设置为 Delete。 传递要删除的标记的资源 ID。

az tag update --resource-id $resource --operation Delete --tags Project=ECommerce Team=Web

已删除指定的标记。

"properties": {
  "tags": {
    "CostCenter": "00123"
  }
},

若要删除所有标记,请使用 az tag delete 命令。

az tag delete --resource-id $resource

处理空格

如果标记名称或值包含空格,请将它们括在引号中。

az tag update --resource-id $group --operation Merge --tags "Cost Center"=Finance-1222 Location="China North"

ARM 模板

可以在使用 ARM 模板进行部署期间标记资源、资源组和订阅。

注意

通过 ARM 模板或 Bicep 文件应用的标记会覆盖任何现有标记。

应用值

以下示例部署具有三个标记的存储帐户。 两个标记(DeptEnvironment)设置为文本值。 一个标记 (LastDeployed) 设置为默认值为当前日期的参数。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "utcShort": {
      "type": "string",
      "defaultValue": "[utcNow('d')]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "tags": {
        "Dept": "Finance",
        "Environment": "Production",
        "LastDeployed": "[parameters('utcShort')]"
      },
      "properties": {}
    }
  ]
}

应用对象

可以定义一个对象参数,用于存储多个标记,并将该对象应用于标记元素。 此方法比上一个示例更灵活,因为对象可以使用不同的属性。 对象中的每个属性会成为资源的单独标记。 以下示例有一个名为 tagValues 的参数,应用于标记元素。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "tagValues": {
      "type": "object",
      "defaultValue": {
        "Dept": "Finance",
        "Environment": "Production"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "tags": "[parameters('tagValues')]",
      "properties": {}
    }
  ]
}

应用 JSON 字符串

要将多个值存储在单个标记中,请应用表示这些值的 JSON 字符串。 整个 JSON 字符串存储为一个标记,该标记不能超过 256 个字符。 以下示例有一个名为 CostCenter 的标记,其中包含 JSON 字符串中的多个值:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "tags": {
        "CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
      },
      "properties": {}
    }
  ]
}

应用资源组中的标记

若要将资源组中的标记应用于资源,请使用 resourceGroup() 函数。 获取标记值时,请使用 tags[tag-name] 语法而不是 tags.tag-name 语法,因为有些字符在点表示法中无法正确解析。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "tags": {
        "Dept": "[resourceGroup().tags['Dept']]",
        "Environment": "[resourceGroup().tags['Environment']]"
      },
      "properties": {}
    }
  ]
}

将标记应用到多个资源组或订阅

可以通过部署 Microsoft.Resources/tags 资源类型,将标记添加到资源组或订阅。 可以将标记应用于要部署的目标资源组或订阅。 每次部署模板时,都会替换任何以前的标记。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "tagName": {
      "type": "string",
      "defaultValue": "TeamName"
    },
    "tagValue": {
      "type": "string",
      "defaultValue": "AppTeam1"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/tags",
      "name": "default",
      "apiVersion": "2021-04-01",
      "properties": {
        "tags": {
          "[parameters('tagName')]": "[parameters('tagValue')]"
        }
      }
    }
  ]
}

若要将标记应用到资源组,请使用 Azure PowerShell 或 Azure CLI。 部署到要标记的资源组。

New-AzResourceGroupDeployment -ResourceGroupName exampleGroup -TemplateFile https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
az deployment group create --resource-group exampleGroup --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json

若要将标记应用到订阅,请使用 PowerShell 或 Azure CLI。 部署到要标记的订阅。

New-AzSubscriptionDeployment -name tagresourcegroup -Location chinanorth2 -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
az deployment sub create --name tagresourcegroup --location chinanorth2 --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json

有关订阅部署的详细信息,请参阅在订阅级别创建资源组和资源

以下模板将对象中的标记添加到资源组或订阅。

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "tags": {
      "type": "object",
      "defaultValue": {
        "TeamName": "AppTeam1",
        "Dept": "Finance",
        "Environment": "Production"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/tags",
      "apiVersion": "2021-04-01",
      "name": "default",
      "properties": {
        "tags": "[parameters('tags')]"
      }
    }
  ]
}

门户

  1. 若要查看资源或资源组的标记,请在概述中查找现有标记。 如果以前未应用标记,则该列表为空。

    查看资源或资源组的标记

  2. 若要添加标记,请选择“单击此处以添加标记”

  3. 提供名称和值。 选择“”+以添加标记。

    添加标记

  4. 根据需要继续添加标记。 完成后,选择“保存”

    保存标记

  5. 标记现已显示在概述中。

    显示标记

  6. 若要添加或删除标记,请选择“更改”

  7. 若要删除标记,请选择回收站图标。 然后选择“保存”。

    删除标记

将标记批量分配到多个资源:

  1. 从任意资源列表中,选中想要分配标记的资源的复选框。

    选择多个资源

  2. 选择“分配标记”

    分配标记

  3. 在每个名称和值后,选择“”+。 完成后,选择“分配”

    选择“分配”

查看所有具有标记的资源:

  1. 在 Azure 门户菜单上,选择“所有服务”。 选择“常规”,然后选择“标记”

    按标记查找

  2. 选择用于查看资源的标记。

    选择标记

  3. 此时会显示所有具有该标记的资源。

    按标记查看资源

  4. 将视图固定到仪表板可实现快速访问。

    固定到仪表板

  5. 仪表板中提供该视图。

    仪表板

REST API

若要通过 Azure REST API 处理标记,请使用:

SDK

有关使用 SDK 应用标记的示例,请参阅:

继承标记

资源不会继承应用于资源组或订阅的标记。 若要将订阅或资源组中的标记应用到资源,请参阅 Azure 策略 - 标记

标记和计费

可使用标记对计费数据进行分组。 例如,如果针对不同组织运行多个 VM,可以使用标记根据成本中心对使用情况进行分组。 还可使用标记根据运行时环境对成本进行分类;例如,在生产环境中运行的虚拟机的计费使用情况。

可以通过从 Azure 门户下载可用的使用情况文件来检索有关标记的信息。

有关 REST API 操作,请参阅 Azure 计费 REST API 参考

限制

以下限制适用于标记:

  • 并非所有资源类型都支持标记。 若要确定是否可以将标记应用到资源类型,请参阅 Azure 资源的标记支持

  • 每个资源、资源组和订阅最多可以有 50 个标记名称/值对。 如果需要应用的标记超过最大允许数量,请使用 JSON 字符串作为标记值。 JSON 字符串可以包含多个应用于单个标记名称的值。 一个资源组或订阅可以包含多个资源,这些资源每个都有 50 个标记名称/值对。

  • 标记名称限制为 512 个字符,标记值限制为 256 个字符。 对于存储帐户,标记名称限制为 128 个字符,标记值限制为 256 个字符。

  • 云服务等经典资源不支持标记。

  • Azure IP 组和 Azure 防火墙策略不支持 PATCH 操作。 因此,PATCH API 方法操作无法通过门户更新标记。 可以对这些资源使用更新命令。 例如,可使用 az network ip-group update 命令更新 IP 组的标记。

  • 标记名称不能包含以下字符:<>%&\?/

    注意

    • Azure 域名系统 (DNS) 区域不支持在标记中使用空格,也不支持以数字开头的标记。 Azure DNS 标记名称不支持特殊字符和 unicode 字符。 该值可以包含所有字符。

    • 流量管理器不支持在标记名称中使用空格、#:。 标记名称不能以数字开头。

    • Azure Front Door 不支持在标记名称中使用 #:

    • 以下 Azure 资源仅支持 15 个标记:

      • Azure 自动化
      • Azure 内容分发网络 (CDN)
      • Azure DNS(区域和记录)

后续步骤

  • 并非所有资源类型都支持标记。 若要确定是否可以将标记应用到资源类型,请参阅 Azure 资源的标记支持