你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用标记对 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="West US"

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 westus2 -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
az deployment sub create --name tagresourcegroup --location westus2 --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')]"
      }
    }
  ]
}

门户

如果用户没有应用标记所需的访问权限,你可以向该用户分配“标记参与者”角色。 有关详细信息,请参阅教程:使用 RBAC 和 Azure 门户授予用户对 Azure 资源的访问权限

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

    View tags for resource or resource group

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

  3. 提供名称和值。

    Add tag

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

    Save tags

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

    Show tags

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

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

    Delete tag

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

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

    Select multiple resources

  2. 添加名称和值。 完成后,选择“保存”

    Select assign

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

  1. 在 Azure 门户菜单上,搜索“标记”。 从可用选项中选择它。

    Find by tag

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

    Select tag

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

    View resources by tag

REST API

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

SDK

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

继承标记

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

标记和计费

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

可以通过从 Azure 门户下载可用的使用情况文件来检索有关标记的信息。 有关详细信息,请参阅下载或查看 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(区域和记录)

后续步骤