В этом посте я расскажу о файле настроек публикации для Windows Azure и о том, как вы можете создать свой собственный файл настроек публикации.
Опубликовать файл настроек
В этом разделе мы поговорим о публикации файла настроек, о том, как он работает, и о некоторых наблюдениях по использованию этого файла. Если вам известно об этом, пожалуйста, не стесняйтесь пропустить этот раздел.
Что это такое?
Файл настроек публикации — это файл XML, который содержит информацию о вашей подписке. Он содержит информацию обо всех подписках, связанных с Live Id пользователя (т. Е. Обо всех подписках, для которых пользователь является либо администратором, либо со-администратором). Он также содержит сертификат управления, который можно использовать для проверки подлинности запросов API управления службами Windows Azure. Обычно файл настроек публикации выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?> <PublishData> <PublishProfile PublishMethod="AzureServiceManagementAPI" Url="https://management.core.windows.net/" ManagementCertificate="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"> <Subscription Id="d11fff51-e7c1-49ef-b833-f9204c337943" Name="My Awesome Subscription" /> </PublishProfile> </PublishData>
Он облегчает процесс развертывания с помощью Visual Studio или других инструментов, которые его поддерживают. Чтобы объяснить это, рассмотрим, как все было сделано до введения этой функциональности. Нужно пройти через следующие шаги:
- Создайте самозаверяющий сертификат, используя IIS или утилиту makecert.
- Импортируйте этот сертификат в ваше локальное хранилище сертификатов.
- Экспортируйте этот сертификат в формат файла .cer и загрузите этот сертификат в портал Windows Azure.
- Теперь используйте этот сертификат в Visual Studio или любом другом инструменте, который использует Windows Azure Service Management API. Вам нужно будет указать свой идентификатор подписки (то есть другую поездку на портал) для каждой подписки, которую вы хотите использовать.
При публикации файла профиля можно выполнить следующие шаги:
- Перейдите по ссылке (см. Ниже — Как это получить) и загрузите файл. Возможно, вам придется подписать, используя свой Live Id.
- Используйте этот файл в инструментах, которые его поддерживают, таких как Visual Studio или Инструменты управления Azure в Cerebrata .
- Все ваши подписки будут успешно импортированы.
Как получить его?
Чтобы получить его, перейдите по следующей ссылке: https://windows.azure.com/download/publishprofile.aspx
Вам может потребоваться войти в систему с помощью Live Id. Если процесс прошел успешно, вам будет предложено сохранить файл с расширением « publishsettings ». Вы можете открыть его в блокноте или любом текстовом редакторе, чтобы увидеть его содержимое.
Как это работает?
Поэтому, когда вы запрашиваете файл настроек публикации по ссылке выше, Windows Azure делает то, что он создает новый сертификат управления и прикрепляет этот сертификат ко всем вашим подпискам. Файл настроек публикации содержит необработанные данные этого сертификата и всех ваших подписок. Любой инструмент, поддерживающий эту функцию, просто проанализирует этот XML-файл, прочитает данные сертификата и установит этот сертификат в локальном хранилище сертификатов (обычно это текущий пользователь / личный (или мой) ). Поскольку API управления службами Windows Azure использует проверку подлинности на основе сертификатов, и один и тот же сертификат присутствует как в разделе «Сертификаты управления Windows Azure» для вашей подписки, так и в хранилище сертификатов на локальном компьютере, проверка подлинности работает по-своему.
Некоторые комментарии
Вот несколько комментариев об использовании этого файла:
- Несомненно, это отличный способ получить все ваши подписки в инструментах, использующих Windows Azure Service Management API .
- Поскольку это текстовый файл, содержащий не только ваши подписки, но и сертификат управления, необходимый для управления этими подписками, необходимо соблюдать крайнюю осторожность для защиты этого файла . Любой, кто имеет доступ к этому файлу, имеет полный доступ к вашим подпискам. Если вы считаете, что этот файл скомпрометирован, вы должны удалить сертификат из раздела сертификатов управления на портале Windows Azure, чтобы предотвратить любое злоупотребление .
- В настоящее время существует ограничение в 10 сертификатов на одну подписку . Как упоминалось выше, процесс создания файла настроек публикации всегда создает новый сертификат и связывается со всеми подписками, связанными с вашим Live Id. Если вы попытаетесь сгенерировать файл настроек публикации более, чем это, вы получите ошибку.
- В настоящее время процесс создания файла профиля публикации не позволяет вам выбрать, для какой подписки вы хотите создать этот файл . Он автоматически создает этот файл и помещает все ваши подписки в этот файл. Это может создать некоторые проблемы в определенных сценариях:
Например, рассмотрим сценарий, в котором вы являетесь консультантом, работающим для разных клиентов, и являетесь администратором / соадминистратором по подпискам для этих клиентов. Когда вы генерируете этот файл, он не только попытается создать сертификаты управления в каждой подписке вашего клиента, но также включит все эти идентификаторы подписки в этот файл. Это затруднит обмен этим файлом с коллегами в одном месте клиента.
В еще одном сценарии представьте, что вы являетесь администратором подписок Windows Azure своей компании и хотите использовать этот файл, однако вы хотите ограничить доступ к этим подпискам. Например, у вас может быть подписка только для ваших сред обеспечения качества, а другая — только для ваших производственных сред. Используя эту функцию при создании файла, вы не можете указать, что хотите создавать только для своей подписки среды QA.
Мы попытаемся решить эти проблемы в следующем разделе, где мы создадим файл параметров публикации для подписки с использованием существующего сертификата управления.
Создание собственного файла настроек публикации
Мы все понимаем, что публикация файла настроек значительно облегчает управление вашими подписками. Действительно, у него есть свои недостатки, но фактор легкости явно перевешивает недостатки.
На самом деле я помогал кому-то на форумах MSDN, где он писал об этих недостатках. Вы можете прочитать эту ветку здесь: http://social.msdn.microsoft.com/Forums/en-US/windowsazuretrou устранение неисправностей/ thread/ 5054447c-b04a-4a69-bf89-d17c441b1c73/ . Это дало мне представление о создании небольшой утилиты, которую вы можете использовать для создания собственного файла настроек публикации. В этом разделе я собираюсь описать это.
Код
Я создал простое консольное приложение, которое создает этот файл настроек публикации. Исходный код приложения указан ниже. Не стесняйтесь использовать код как есть или изменять его в соответствии с вашими потребностями.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Security.Cryptography.X509Certificates; using System.IO; namespace CreatePublishSettingsFile { class Program { private static string subscriptionId = "[your subscription id]"; private static string subscriptionName = "My Awesome Subscription"; private static string certificateThumbprint = "[certificate thumbprint. the certificate must have private key]"; private static StoreLocation certificateStoreLocation = StoreLocation.CurrentUser; private static StoreName certificateStoreName = StoreName.My; private static string publishFileFormat = @"<?xml version=""1.0"" encoding=""utf-8""?> <PublishData> <PublishProfile PublishMethod=""AzureServiceManagementAPI"" Url=""https://management.core.windows.net/"" ManagementCertificate=""{0}""> <Subscription Id=""{1}"" Name=""{2}"" /> </PublishProfile> </PublishData>"; static void Main(string[] args) { X509Store certificateStore = new X509Store(certificateStoreName, certificateStoreLocation); certificateStore.Open(OpenFlags.ReadOnly); X509Certificate2Collection certificates = certificateStore.Certificates; var matchingCertificates = certificates.Find(X509FindType.FindByThumbprint, certificateThumbprint, false); if (matchingCertificates.Count == 0) { Console.WriteLine("No matching certificate found. Please ensure that proper values are specified for Certificate Store Name, Location and Thumbprint"); } else { var certificate = matchingCertificates[0]; var certificateData = Convert.ToBase64String(certificate.Export(X509ContentType.Pkcs12, string.Empty)); if (string.IsNullOrWhiteSpace(subscriptionName)) { subscriptionName = subscriptionId; } string publishSettingsFileData = string.Format(publishFileFormat, certificateData, subscriptionId, subscriptionName); string fileName = Path.GetTempPath() + subscriptionId + ".publishsettings"; File.WriteAllBytes(fileName, Encoding.UTF8.GetBytes(publishSettingsFileData)); Console.WriteLine("Publish settings file written successfully at: " + fileName); } Console.WriteLine("Press any key to terminate the program."); Console.ReadLine(); } } }
Как это работает
По сути, это приложение читает данные для сертификата (вы указываете отпечаток и местоположение сертификата), преобразует его в строку формата Base64 и записывает эти данные в файл XML вместе с идентификатором подписки. Довольно просто!
Создав этот файл, вы можете поделиться им с членами своей команды, и они смогут использовать его с Visual Studio или другими инструментами для управления своими подписками.
Некоторые соображения
Есть несколько вещей, которые вы должны иметь в виду:
- Сертификат вы используете должен иметь закрытый ключ , связанный с ним . Чтобы проверить, имеет ли используемый вами сертификат закрытый ключ, просто посмотрите на значок рядом с этим сертификатом. Это должно показать небольшой «ключ» в этом, как показано на рисунке ниже. Несмотря на то, что приведенный выше пример приложения будет работать идеально, он создаст файл, однако, когда вы попытаетесь пройти аутентификацию с использованием этого сертификата, вы получите ошибку 403.
- Сертификат, который помещается в этот файл, имеет формат Pkcs12 (Pfx) с паролем в виде пустой строки . Это похоже на способ размещения сертификата в файле настроек публикации, сгенерированном Windows Azure.
Как бы я использовать его?
На вашем месте я бы использовал эту утилиту следующим образом:
- Создайте новый сертификат с помощью IIS или утилиты makecert.
- Установите этот сертификат в моем хранилище сертификатов.
- Экспортируйте этот сертификат из хранилища сертификатов в формате cer, загрузите его на портал Windows Azure и свяжите с моими подписками.
- Затем я запустил бы эту утилиту, чтобы создать новый файл настроек публикации и распространить его (и, конечно, протестировать перед распространением).
Резюме
В этом посте мы узнали (надеюсь) о публикации файла настроек, и, несмотря на его недостатки, он очень полезен. Мы также увидели, как мы можем создать наш собственный файл настроек публикации.
Я надеюсь, что вы нашли эту информацию полезной. Как всегда, если вы заметили что-то неправильное, пожалуйста, дайте мне знать как можно скорее, и я исправлю это.
Ой, просто подожди!
Я только что понял, что это мой первый пост без смайликов . Черт, вот оно!
Наслаждайтесь . Так долго и следите за обновлениями!