Защита секретов в Azure PowerShell

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

Общие сведения о риске

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

Предупреждение

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

Отключение предупреждения

В следующем примере командлет Update-AzConfig используется для отключения предупреждающего сообщения.

Update-AzConfig -DisplaySecretsWarning $false

Можно также использовать $Env:AZURE_CLIENTS_SHOW_SECRETS_WARNING переменную среды для отключения предупреждения.

Set-Item -Path Env:\AZURE_CLIENTS_SHOW_SECRETS_WARNING -Value $false

Переход с строк на SecureStrings

Чтобы повысить безопасность и снизить риск утечки учетных данных, тип выходных данных по умолчанию командлета изменился с обычного текста String на SecureString, начиная с версии 5.0.0 Az.Accounts и версии 14.0.0 Az.

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

Если в вашем сценарии требуется токен в открытом виде, что настоятельно не рекомендуется, можно преобразовать его SecureString вручную. Инструкции см. в статье "Как преобразовать SecureString в обычный текст в PowerShell?".