Использование тегов для упорядочивания ресурсов Azure и создания иерархии управления

К ресурсам Azure, группам ресурсов и подпискам можно применять теги, чтобы логически классифицировать их на основе метаданных. Каждый тег состоит из пары "имя — значение". Например, имя Environment и значение Production можно применить ко всем ресурсам в рабочей среде.

Рекомендации по реализации стратегии присвоения тегов см. в разделе Руководство по принятию решений о присвоении имен и тегов для ресурсов.

Важно!

Для операций регистр в именах тегов не учитывается. Тег обновляется, или извлекается тег по имени тега, независимо от регистра. Однако поставщик ресурса может сохранить регистр, заданный для имени тега. Этот регистр будет отображаться в отчетах о затратах.

Значения тегов чувствительны к регистру.

Примечание

В этой статье приведены пошаговые инструкции по удалению персональных данных с устройства или из службы. Эти сведения можно использовать для соблюдения обязательств согласно Общему регламенту по защите данных (GDPR). Общие сведения о GDPR см. в разделе, посвященном GDPR, в Центре управления безопасностью Майкрософт и на портале Service Trust Portal.

Требуемый доступ

Есть два варианта доступа к ресурсам тегов.

  • Можно иметь доступ для записи к типу ресурса Microsoft. Resources/Tags. Этот доступ дает возможность отметить тегом любой ресурс, даже если нет доступа к самому ресурсу. Роль участника тега предоставляет такой доступ. На сегодняшний день роль участника тега не имеет возможности применять теги к ресурсам или к группам ресурсов через портал. У нее есть возможность применять теги к подпискам через портал. Она поддерживает все операции с тегами посредством PowerShell и REST API.

  • Можно иметь доступ для записи непосредственно к ресурсу. Роль участника предоставляет доступ, требуемый для применения тегов к любой сущности. Чтобы применить теги только к одному типу ресурсов, используйте роль участника для этого ресурса. Например, чтобы применить теги к виртуальным машинам, используйте Участник виртуальных машин.

PowerShell

Применить теги

Azure PowerShell предлагает две команды применения тегов: New-AzTag и Update-AzTag. Требуется модуль Az.Resources 1.12.0 или последующей версии. Проверить версию можно с помощью Get-Module Az.Resources. Можно установить этот модуль или Azure PowerShell 3.6.1 или последующей версии.

Команда New-AzTag заменяет все теги в ресурсе, группе ресурсов или подписке. При вызове команды укажите идентификатор ресурса той сущности, которой нужно присвоить тег.

В следующем примере набор тегов присваивается учетной записи хранения.

$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 значение Слияние.

$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 задается значение Замена, существующие теги заменяются новым набором тегов.

$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 и укажите идентификатор ресурса для сущности.

Чтобы просмотреть теги ресурса, используйте:

$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 значение Удалить. Укажите теги, которые нужно удалить.

$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 Create и AZ Tag Update. Требуется Azure CLI 2.10.0 или более поздней версии. Проверить версию можно с помощью az version. См. инструкции по обновлению и установке в статье Установка Azure CLI.

Команда AZ Tag Create заменяет все теги в ресурсе, группе ресурсов или подписке. При вызове команды укажите идентификатор ресурса той сущности, которой нужно присвоить тег.

В следующем примере набор тегов присваивается учетной записи хранения.

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 и укажите идентификатор ресурса для сущности.

Чтобы просмотреть теги ресурса, используйте:

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. Укажите теги, которые нужно удалить.

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

Тегами можно отмечать ресурсы, группы ресурсов и подписки во время развертывания, используя шаблон Azure Resource Manager (ARM).

Примечание

Теги, назначаемые посредством шаблона ARM, перезапишут любые существующие теги.

Применить значения

В следующем примере показано развертывание учетной записи хранения с тремя тегами. Двум тегам (Dept и Environment) присваиваются литеральные значения. Одному тегу (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": [
        {
            "apiVersion": "2019-04-01",
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[concat('storage', uniqueString(resourceGroup().id))]",
            "location": "[parameters('location')]",
            "tags": {
                "Dept": "Finance",
                "Environment": "Production",
                "LastDeployed": "[parameters('utcShort')]"
            },
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "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": [
        {
            "apiVersion": "2019-04-01",
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[concat('storage', uniqueString(resourceGroup().id))]",
            "location": "[parameters('location')]",
            "tags": "[parameters('tagValues')]",
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "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": [
        {
            "apiVersion": "2019-04-01",
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[concat('storage', uniqueString(resourceGroup().id))]",
            "location": "[parameters('location')]",
            "tags": {
                "CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
            },
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "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": [
        {
            "apiVersion": "2019-04-01",
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[concat('storage', uniqueString(resourceGroup().id))]",
            "location": "[parameters('location')]",
            "tags": {
                "Dept": "[resourceGroup().tags['Dept']]",
                "Environment": "[resourceGroup().tags['Environment']]"
            },
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "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"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/tags",
            "name": "default",
            "apiVersion": "2019-10-01",
            "dependsOn": [],
            "properties": {
                "tags": {
                    "[parameters('tagName')]": "[parameters('tagValue')]"
                }
            }
        }
    ]
}

Чтобы применить теги к группе ресурсов, используйте 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"
            }
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/tags",
            "name": "default",
            "apiVersion": "2019-10-01",
            "dependsOn": [],
            "properties": {
                "tags": "[parameters('tags')]"
            }
        }
    ]
}

Портал

Если у пользователя нет необходимых прав доступа для применения тегов, можно назначить ему роль Участник по тегам. Дополнительные сведения см. в статье Учебник. Предоставление доступа пользователю с помощью RBAC и портала Azure.

  1. Чтобы просмотреть теги для ресурса или группы ресурсов, ищите существующие теги в обзоре. Если теги ранее не применялись, то список будет пустым.

    Просмотр тегов для ресурса или группы ресурсов

  2. Чтобы добавить тег, выберите Click here to add tags (Щелкните здесь, чтобы добавить теги).

  3. Укажите имя и значение.

    Добавление тега

  4. При необходимости продолжайте добавлять теги. Затем нажмите кнопку Сохранить.

    Сохранение тегов

  5. Теперь теги отображаются в обзоре.

    Отображение тегов

  6. Чтобы добавить или удалить тег, выберите Изменить.

  7. Чтобы удалить тег, щелкните значок корзины. Затем нажмите кнопку Сохранить.

    Удаление тега

Вот как можно выполнить пакетное назначение тегов нескольким ресурсам.

  1. В любом списке ресурсов установите флажки для ресурсов, которым требуется назначить тег. Затем выберите команду Назначить теги.

    Выбор нескольких ресурсов

  2. Добавьте имена и значения. Затем нажмите кнопку Сохранить.

    Выбор элемента "Назначить"

Чтобы просмотреть все ресурсы с тегом, сделайте следующее.

  1. В меню портала Azure выполните поиск по слову теги. Выберите подходящий вариант из предложенных.

    Поиск по тегу

  2. Выберите тег для просмотра ресурсов.

    Выбор тега

  3. Будут отображены все ресурсы с этим тегом.

    Просмотр ресурсов по тегу

REST API

Для работы с тегами через REST API Azure используйте:

Унаследовать теги

Теги, примененные к группе ресурсов или подписке, не наследуются ресурсами. Чтобы применить теги из подписки или группы ресурсов к ресурсам, изучите раздел Политики Azure — Теги.

Теги и выставление счетов

С помощью тегов можно группировать данные о выставлении счетов. Например, если у вас работает несколько виртуальных машин для разных организаций, то с помощью тегов можно группировать сведения об использовании по месту возникновения затрат. Кроме того, теги можно использовать для группирования затрат по среде выполнения (например, сведения о выставленных счетах за виртуальные машины, запущенные в рабочей среде).

Сведения о тегах можно получить, загрузив файл использования. Это файл данных с разделителями-запятыми (CSV), доступный на портале Azure. Дополнительные сведения см. в статье Скачивание или просмотр счета на оплату и данных о ежедневном использовании в Azure. При скачивании файла сведений об использовании из Центра управления учетной записью Azure выберите Версия 2. Для служб, поддерживающих теги выставления счетов, эти теги отображаются в столбце Теги.

Подробнее об операциях REST API см. в справочнике по REST API для выставления счетов Azure.

Ограничения

Действительны следующие ограничения для тегов.

  • Не все типы ресурсов поддерживают теги. Сведения о возможности применения тегов к типу ресурса см. в статье о поддержке тегов ресурсами Azure.

  • Каждый ресурс, группа ресурсов и подписка может иметь не более 50 пар "имя — значение" для тегов. Если необходимо применить больше тегов, чем максимально допустимо, используйте строку JSON для значения тега. Строка JSON может содержать много значений, применяемых к одному имени тега. Группа ресурсов или подписка может включать разные ресурсы, каждый из которых содержит 50 пар "имя — значение" для тегов.

  • Имя тега ограничено 512 символами, а значение тега — 256 символами. Для учетных записей хранения имя тега ограничено 128 символами, а значение тега — 256 символами.

  • Теги нельзя применять к классическим ресурсам, например к облачным службам Microsoft Azure.

  • Имена тегов не могут содержать следующие символы: <, >, %, &, \, ?, /

    Примечание

    На сегодняшний день зоны Azure DNS и службы Диспетчера трафика также не разрешают использовать пробелы в теге.

    Azure Front Door не поддерживает использование # в имени тега.

    Служба автоматизации Azure и Azure CDN поддерживают только 15 тегов для ресурсов.

Дальнейшие действия