Общая доступность федерации удостоверений рабочей нагрузки для подключений службы Azure Resource Manager

Мы рады сообщить, что федерация удостоверений рабочей нагрузки теперь общедоступна в Azure Pipelines! Вы можете воспользоваться упрощенным интерфейсом без необходимости управлять секретами и сертификатами в подключениях к службе Azure.

В этом обновлении мы также просматриваем новую функцию в рамках расширенной интеграции GitHub с Azure Boards. Теперь вы можете связаться непосредственно с запросами на вытягивание GitHub или фиксациями. Больше не переключаться между окнами или вставки и вставки. Просто выберите нужный репозиторий, найдите нужный запрос на вытягивание или фиксацию и свяжите его!

Ознакомьтесь с заметками о выпуске, чтобы узнать больше об этих функциях.

Общие

Расширенная безопасность GitHub для Azure DevOps

Azure Boards

Azure Pipelines

Azure Repos

Azure Artifacts

Общие

Окончательное уведомление об отмене альтернативных учетных данных

Альтернативные учетные данные официально устарели в марте 2020 года, но некоторые существующие пользователи были отложены с текущим использованием существующих альтернативных учетных данных. По состоянию на январь 2024 года мы полностью устарели все альтернативные учетные данные. Чтобы избежать возможных сбоев, переключитесь на один из доступных механизмов проверки подлинности, таких как личные маркеры доступа или управляемые удостоверения.

Смена секретов самостоятельного секрета Azure Devops OAuth

Каждые пять лет важно обновить секрет клиента для приложения OAuth Azure DevOps, чтобы обеспечить непрерывное создание маркеров доступа и обновления, необходимых для использования API Azure DevOps. Когда срок действия секрета клиента приближается к истечении срока действия, теперь вы можете самостоятельно создать новый, предоставляя команде свободу управления ею, не опираясь на поддержку клиентов. Такая гибкость при планировании смены секретов сводит к минимуму время сбоя для клиентов, ожидающих замены из-за истечения срока действия секрета.

Screenshot of Select a geography.

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

Расширенная безопасность GitHub для Azure DevOps

Фрагменты кода теперь доступны в представлении сведений об оповещении

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

Screenshot of case-sensitive middleware path.

Усеченные секреты, отображаемые в обзоре оповещений

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

Screenshot of secret alerts list.

Дополнительные уровни серьезности оповещений, добавленные для проверки кода оповещений

Новые уровни серьезности оповещений теперь существуют для результатов оповещений из запросов CodeQL quality как Error, Warningи Note серьезности. Каждый уровень серьезности оповещений качества имеет собственный значок и цвет для обозначения серьезности масштабирования. Вы также можете отфильтровать каждую из этих серьезностей, аналогичную lowcritical масштабу серьезности для оповещений системы безопасности.

Screenshot of code scanning alerts list and severity filter.

Связанная подписка Azure, необходимая для включения GitHub Advanced Security для Azure DevOps

Если вы ранее включили расширенную безопасность для репозиториев в организации Azure DevOps без связанной подписки Azure, вы можете заметить, что расширенная безопасность автоматически отключена в этих репозиториях. Чтобы повторно включить расширенную безопасность, добавьте связанную подписку Azure в организацию. Дополнительные сведения о том, как добавить или изменить подписку, см. в статье "Изменение подписки Azure".

Расширенные обновления API безопасности

Различные обновления недавно отправленных API безопасности расширенных API безопасности:

  • API оповещений GET теперь поддерживает новый параметр, ModifiedSinceчтобы вернуть добавочный список оповещений и возвращать только оповещения, которые были изменены с этой даты. Дополнительные сведения см. в разделе "Оповещения — список".
  • API GET SARIFs теперь возвращает определенные ошибки отправки, которые помогут устранить ошибки отправки SARIF. Дополнительные сведения см. в разделе SARIFs.
  • Существует две новые конечные точки для получения или обновления состояния расширенной безопасности организации или проекта. Обе конечные точки возвращают список репозиториев с включенной расширенной безопасностью. Дополнительные сведения см. в разделе "Организация — включение " или "Проект" — включение.
  • Существует две новые конечные точки для получения оценки количества активных фиксаций для организации или проекта, чтобы отразить предполагаемое использование счетчика расширенной безопасности. Дополнительные сведения см. в разделе "Оценка использования метрики организации" или "Оценка использования измерения проекта".

Расширенные разрешения безопасности теперь постоянно отображаются

В прошлом три бита разрешений расширенной безопасности будут присутствовать только в том случае, если включена расширенная безопасность в репозитории. Теперь эти разрешения доступны по умолчанию на панели разрешений безопасности репозиториев > и могут быть назначены без включения расширенной безопасности.

Screenshot of Advanced Security permissions.

Azure Boards

У вас есть два варианта подключения рабочего элемента к запросу на вытягивание или фиксацию GitHub. Вы можете использовать синтаксис AB# в запросе на вытягивание или связать его непосредственно с рабочего элемента. Сегодня процесс включает копирование URL-адреса запроса на вытягивание GitHub и вставка его при добавлении ссылки. Для этого требуется открытие нескольких окон и переключение между GitHub и Azure DevOps.

В этом спринте мы рады объявить расширенный интерфейс, включив функции поиска при связывании с запросом на вытягивание GitHub или фиксацией. Выполните поиск и выберите нужный репозиторий и выполните детализацию, чтобы найти и связать его с конкретным запросом на вытягивание или фиксацией. Больше нет необходимости в нескольких изменениях окна и копировании и вставки (хотя у вас по-прежнему есть этот параметр).

Gif to demo add link.

Примечание.

Эта функция доступна только в предварительной версии New Boards Hub.

Если вы хотите получить доступ к этой функции, отправьте нам сообщение электронной почты непосредственно с именем вашей организации (dev.azure.com/{название организации}).

Новые улучшения Центра Boards Hub

В этом выпуске мы введем ряд улучшений в предварительной версии New Boards Hub, фокусируясь на специальных возможностях и перетеках страниц.

Ниже приведен пример изменений перетека страницы, которые адаптивны до 400 % масштабирования.

Gif to demo new boards hub improvements.

Кроме того, мы развернули улучшения производительности в форме рабочего элемента, досках и страницах невыполненной работы. В этих изменениях можно ожидать, что новые доски соответствуют стандартам производительности, установленным со старыми досками.

Элементы управления разработкой и развертыванием

Теперь мы удаляем элементы управления "Разработка" и (или) "Развертывание" из рабочего элемента в зависимости от того, как настроен проект. Например, можно настроить параметры проекта, чтобы отключить репозитории и (или) конвейеры.

Screenshots of DevOps services.

При переходе к рабочему элементу соответствующие элементы управления разработки и развертывания будут скрыты из формы.

Screenshots of related work.

Если вы решите подключить репозиторий GitHub к Azure Boards, отобразится элемент управления разработки для репозиториев GitHub.

Screenshots of development control .

Azure Pipelines

Федерация удостоверений рабочей нагрузки для подключений к службе Azure Resource Manager теперь общедоступна

В сентябре мы объявили о возможности настройки подключений службы Azure без использования секрета. С тех пор многие клиенты приняли эту функцию, и мы рады объявить, что эта возможность теперь общедоступна.

Если вы еще не используете федерацию удостоверений рабочей нагрузки, вы можете воспользоваться преимуществами бесплатных подключений к службе Azure, у которых нет секретов с истекающим сроком действия, следующим образом:

Чтобы создать новое подключение службы Azure с помощью федерации удостоверений рабочей нагрузки, выберите федерацию удостоверений рабочей нагрузки (автоматически) в интерфейсе создания подключения службы Azure:

Screenshot of Workload identity federation (automatic).

Чтобы преобразовать ранее созданное подключение к службе Azure, выберите действие "Преобразовать" после выбора подключения:

Screenshot of Convert action.

Чтобы преобразовать несколько подключений к службе, можно использовать автоматизацию, например этот скрипт PowerShell:

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 
#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798"
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint
    
    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Дополнительные сведения см. в нашей документации.

Агент Pipelines показывает проблемы с использованием ресурсов более заметным образом

В октябре прошлого года мы добавили возможность отслеживать использование памяти и дискового пространства агентом Pipelines.

Чтобы пользователи знали, у них могут быть ограничения ресурсов, такие как ограничения памяти или дискового пространства на агенте, мы сделали ограничения ресурсов более видимыми:

Screenshot of Limited memory and disk space warning.

Если вы видите любое из указанных выше сообщений, это может быть вызвано задачей, использующими больше ресурсов, чем агент, для которого определяется, что может привести к тому, что агент не реагирует и не выполняет задание конвейера:

"Мы перестали слышать от агента"

В таких случаях включите подробные журналы , чтобы получить более подробные сообщения об использовании ресурсов и отслеживать, где у вашего агента не было ресурсов. Если вы используете автономный агент, убедитесь, что агент имеет достаточные ресурсы.

Внеполняя установка средства выполнения задач Node 6

Azure Pipelines предоставляет две версии пакетов агента:

  • Пакеты vsts-agent-* поддерживают задачи с помощью узла 6 для выполнения.
  • Пакеты pipelines-agent-* не поддерживают задачи, требующие выполнения узла 6.

Клиенты, создающие локальные агенты, могут скачать их на странице выпусков агента конвейера. Версии узла, включенные в агент, используются для выполнения задач. См . сведения о версиях runner узла.

После регистрации агента агенты, установленные из пакетов pipelines-agent-* теперь будут скачивать версии узлов, которые не включены в агент и не блокируются в разделе "Ограничения задач" в параметрах организации. Это позволяет клиентам использовать пакеты агента pipelines-agent-* и управлять установкой Node 6 с ограничениями задач в параметрах организации.

Отложенное утверждение

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

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

Screenshot of approve a pipeline run.

При выборе "Отложить утверждение" можно настроить время, когда утверждение станет эффективным.

Screenshot of Defer approval.

Screenshot of after_approval_deferred.

Утверждение отображается как отложенное на панели проверка. После отложенного времени утверждение действует.

Screenshot of approval is effective.

Последовательные утверждения и проверка

С помощью этого спринта вы можете указать порядок, в котором выполняются утверждения и проверка.

Утверждения и проверка позволяют управлять развертываниями в рабочей среде. Например, можно указать, что только конвейеры, выполняемые в main ветви репозитория, могут использовать подключение к рабочей службе ARM. Кроме того, вы можете требовать одобрения человека и что система передает проверка производительности.

До сегодняшнего дня все утверждения и проверка выполнялись параллельно, за исключением монопольной блокировки. Это означало, что если процесс развертывания требует передачи проверка производительности перед выполнением ручного утверждения, вы не могли применить это в Azure Pipelines. Вам пришлось полагаться на инструкции по утверждению и внутреннюю документацию по процессу.

С помощью этого спринта мы представляем секвенирование в Утверждения и проверках. Теперь существует пять категорий Утверждения и проверок:

  1. Статические проверка: элемент управления ветвью, обязательный шаблон и оценка артефакта
  2. Предварительное динамическое утверждение проверка
  3. Динамические проверка: утверждение, вызов функции Azure, вызов REST API, рабочие часы, запрос оповещений Azure Monitor
  4. Утверждение после динамического проверка
  5. Монопольная блокировка

Screenshot of add check.

Порядок также отображается на вкладке Утверждения и проверка.

Screenshot of approvals and checks tab.

В каждой категории проверка выполняются параллельно. То есть, если у вас есть функция Вызова Azure проверка и рабочих часов проверка, они выполняются одновременно.

Screenshot of checks for deploy.

Проверьте категории, выполняемые по одному, и если один завершается ошибкой, остальные проверка не выполняются. Это означает, что если у вас есть элемент управления Branch проверка и утверждение, если элемент управления Branch завершается ошибкой, утверждение также завершится ошибкой. Поэтому не нужно отправлять сообщения электронной почты.

Screenshot of checks for deploy fail.

Вы можете выйти из развертывания после выполнения всех динамических проверка, используя утверждение после динамического проверка или выполнить проверку вручную, прежде чем продолжить динамические проверка, используя предварительно динамическую проверка утверждения.

Проверка и сохранение по умолчанию при редактировании конвейеров YAML

Неправильный конвейер YAML может привести к трате времени и усилий. Чтобы повысить производительность редактирования конвейера, мы изменим кнопку "Сохранить " в редакторе, чтобы также выполнить проверку YAML.

Screenshot of new button.

Screenshot of validate and save.

Если конвейер имеет ошибки, вы по-прежнему сможете сохранить его.

Screenshot of pipeline is valid.

Screenshot of errors detected.

Мы также улучшили интерфейс проверки , чтобы увидеть ошибки в списке, который проще понять.

Screenshot of errors list.

Azure Repos

Предотвращение несанкционированного доступа пользователей к конвейеру в качестве политики сборки

Предотвращение несанкционированного доступа пользователей к конвейеру в качестве политики сборки

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

Теперь мы запрещаем пользователям делать это. Если пользователю запрещено создавать разрешения на сборку очереди для данного конвейера, этот конвейер будет отображаться как отключенный (серый) в раскрывающемся списке при добавлении новой политики сборки.

На рисунке ниже показан конвейер с именем Песочница с разрешением на сборку очередей .

Screenshot of permissions for Sandbox.

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

Screenshot of add build policy.

Когда политика сборки, настроенная для запуска конвейера с именем Песочница, уже существует, пользователь без разрешения на сборку очередей не сможет изменять или просматривать политику сборки . Этот случай показан на следующем рисунке.

Screenshot of build validation.

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

Screenshot of confirm deletion.

Эти изменения также применяются ко всем вызовам API, которые приводят к созданию или редактированию политики сборки. При выполнении любого из этих действий с использованием удостоверения пользователя без разрешения сборки очереди вызов завершится ошибкой, возвращая соответствующий код ошибки, и сообщение об ошибке, указывающее “TFS.WebApi.Exception: TF401027: , что для выполнения этого действия требуется разрешение QueueBuild на этом конвейере.

Удаление политики сборки, выполняемой с помощью API без user identityразрешения на сборку очередей , будет выполнено успешно, и не будет никаких предупреждений или предотвращения (никаких изменений в том, как выполняется удаление с помощью API).

Azure Artifacts

Общедоступная поддержка Rust Crates

Начиная с 16 февраля 2024 г. поддержка Rust Crates станет общедоступной функцией для артефактов Azure. Счетчики выставления счетов будут активированы с помощью той же модели ценообразования, которая применяется к другим поддерживаемым протоколам.

Поддержка аудита npm в Azure Artifacts

Теперь артефакты Azure поддерживают npm audit и npm audit fix команды. Эта функция позволяет пользователям анализировать и устранять уязвимости своего проекта путем автоматического обновления небезопасных версий пакетов. Чтобы узнать больше о посещении, используйте аудит npm для обнаружения и устранения уязвимостей пакетов.

Следующие шаги

Примечание.

Эти функции будут развернуты в течение следующих двух-трех недель.

Перейдите к Azure DevOps и посмотрите.

Отправка отзыва

Мы хотели бы услышать то, что вы думаете об этих функциях. Используйте меню справки, чтобы сообщить о проблеме или указать предложение.

Make a suggestion

Вы также можете получить советы и ваши вопросы, ответы сообщества на Stack Overflow.

Thanks,

Дэн Хеллем