Новость из категории: Информация

IT: на наши вопросы отвечает Джон Сэвилл. Часть VI

Содержание:
1. Часть I;
2. Часть II ;
3. Часть III;
4. Часть IV ;
5. Часть V (Вы читаете данный раздел).
IT: на наши вопросы отвечает Джон Сэвилл. Часть VI

Какой существует самый лучший способ управлять паролем для набора идентификационных данных Azure Automation?
При работе с Azure Automation часто бывает нужно подсоединяться к подпискам Azure, что требует использования идентификационных данных службы каталогов Azure AD. Эти идентификационные данные должны быть предназначены для использования при автоматизации, аналогично тому, как служебные учетные записи применяются в локальной службе каталогов Active Directory, однако по умолчанию пароли для учетных записей Azure AD должны меняться каждые 90 дней. Существует ряд способов для решения этой проблемы.

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

Другой способ предполагает реализацию процесса для автоматического обновления пароля и идентификационных данных учетной записи Azure AD аналогично управляемым служебным учетным записям Managed Service Accounts в службе каталогов Active Directory. Сперва я создал некий код, запускавшийся локально, для подготовки процесса, который будет работать с Azure Automation. Этот подготовительный процесс использовал команды Azure AD и помощника для регистрации в системе, как будет показано ниже. Обратите внимание, что важно избежать необходимости ввода идентификационных данных. Код хранит действующий пароль в незашифрованном виде, что нежелательно, но мое намерение состояло в том, чтобы сделать пароль зашифрованным, когда я перемещу процесс в Azure Automation. Еще имейте в виду, что должен существовать набор переменных, содержащий имя подписки (SubName), набор идентификационных данных (MyCred), которые будут обновляться, и незашифрованный строковый набор, для того чтобы сохранить пароль (MyCredPassword).
#The automation account is a co-admin and a global admin of the AD so it can change password. Could limit
$AutomationAccountName = 'SavAutomationEastUS2'
$SubName = Get-AzureAutomationVariable -AutomationAccountName $AutomationAccountName -Name 'SubName'

$AutoCred = Get-AzureAutomationCredential -AutomationAccountName $AutomationAccountName -Name MyCred

#Generate a new password
$randomObj = New-Object System.Random
$NewPassword=""
1..16 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) }
$NewPassword

#Create credential to connected to Azure AD
$user = $autocred.UserName
$pworig = (Get-AzureAutomationVariable -Name MyCredPassword -AutomationAccountName $AutomationAccountName).Value
$pw = ConvertTo-SecureString $pworig -AsPlainText -Force
$AzureADCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $user, $pw

Connect-MsolService -Credential $AzureADCredential

Set-MsolUserPassword –UserPrincipalName automation@savilltech.net –NewPassword $NewPassword -ForceChangePassword $false

$user = $autocred.UserName
$pw = ConvertTo-SecureString $NewPassword -AsPlainText -Force
$cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $user, $pw

Set-AzureAutomationCredential -Value $cred -Name $AutoCred.Name -AutomationAccountName $AutoCred.AutomationAccountName

#Save password right now in case we need it. What about encrypt. Assume will decrypt
Set-AzureAutomationVariable -AutomationAccountName $AutomationAccountName -Name MyCredPassword -Value $NewPassword -Encrypted $false

Чтобы перенести код в Azure Automation, мне пришлось внести изменение, поскольку помощник по регистрации в системе недоступен, а он нужен для использования команд Azure AD. Поэтому я изменил код для использования команд, которые управляют Graph API. Кроме того, код для создания случайного пароля был модифицирован, так как существующий код для случайного пароля не работал в Azure Automation. Далее приведу код для Azure Automation, который я создал и который вы можете впоследствии настроить на еженедельный запуск. Таким образом, каждую неделю он будет создавать новый пароль. Кроме того, пароль, который требуется для вызова Graph API, сохраняется зашифрованным:
workflow UpdateAutomationAccount
{
    #The automation account is a co-admin and a global admin of the AD so it can change password. Could limit
    $AutomationAccountName = 'SavAutomationEastUS2'
    # Azure AD domain to authenticate against
    $AzureADDomain = Get-AutomationVariable -Name 'AzureADDomain'
    
    #Get the subscription name
    $SubName = Get-AutomationVariable -Name 'SubName'
    $MyCred = Get-AutomationPSCredential -Name 'MyCred'
    $pworig = $MyCred.GetNetworkCredential().Password
    
    Add-AzureAccount -Credential $MyCred
    
    Select-AzureSubscription -SubscriptionName $SubName
    
    $AutoCred = Get-AzureAutomationCredential -AutomationAccountName $AutomationAccountName -Name 'MyCred'
    $AutoUser = $AutoCred.UserName
    
    #Generate a new password that is 16 characters with at least 2 special
    $NewPassword = InlineScript {
    #Load "System.Web" assembly in PowerShell console 
    Add-Type -AssemblyName System.Web
    #Calling GeneratePassword Method 
    [System.Web.Security.Membership]::GeneratePassword(16,2)
    }

    #Get string ready for JSON which fixes certain characters
    $JSONNewPassword = ConvertTo-Json $NewPassword

    #Connect using Graph API which needs modules from https://github.com/tiander/OMSsearchAPI
    $APIVersion = "1.5"
    $AppIdURI = "https://graph.windows.net"
     
    # Set up connection object to pass into Invoke-AzureADMethod
    $ADConnection = @{"Username"=$AutoUser;"AzureADDomain"=$AzureADDomain;"Password"=$pworig;"APPIdURI"=$AppIdURI;"APIVersion"=$APIVersion}
    $URI = "https://graph.windows.net/$AzureADDomain/users/$AutoUser" 
    $Body =  @"
{
  "passwordProfile": {
    "password": $JSONNewPassword,
    "forceChangePasswordNextLogin": false
  }
}
"@ 
    
    #Update the Azure AD account password
    $UserUpdate = Invoke-AzureADMethod -URI $URI -Connection $ADConnection -Body $Body -Method PATCH
    
    #Create updated credential object for account with new password
    $NewSecurePassword = ConvertTo-SecureString $NewPassword -AsPlainText -Force
    $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $AutoUser, $NewSecurePassword
    
    #Update the automation credential object with new password
    Set-AzureAutomationCredential -Value $cred -Name $AutoCred.Name -AutomationAccountName $AutoCred.AutomationAccountName    
}

Чтобы использовать этот код, необходимо сделать следующее:
1. Импортируйте два модуля Graph API по ссылке https://github.com/tiander/OMSsearchAPI в учетную запись Automation;
IT: на наши вопросы отвечает Джон Сэвилл. Часть VI
Наборы данных для автоматизации

2. Вам нужны следующие наборы, созданные в учетной записи автоматизации (см. скриншот выше):
• MyCred — набор идентификационных данных, который настроен с помощью текущих имени пользователя и пароля учетной записи автоматизации. Этот набор является учетной записью, пароль которой обновляется.
• SubName — строковый набор, содержащий имя подписки Azure.
• AzureADDomain — строковый набор, содержащий имя экземпляра Azure AD, которой принадлежит учетная запись.
3. Учетная запись автоматизации, вероятно, должна быть административной, для того чтобы иметь разрешение на изменение паролей в Azure AD.
4. Вставьте указанный выше код в набор заданий и измените имя учетной записи автоматизации в начале сценария. Код также можно загрузить из TechNet Gallery (https://gallery.technet.microsoft.com/Automation-to-automatically-326aa3ed). Там я храню его обновленным.
5. Протестируйте набор заданий, запустив его в тестовом режиме.
6. Настройте набор заданий на еженедельный запуск.


Обязательно приступите к поиску способа управления паролем для набора идентификационных данных Azure Automation, но только после того, как выясните, что же это за такая автомобильная марка Ravon? Узнать ответ вы сможете здесь (http://auto.ironhorse.ru/ravon-matiz_11508.html). Ну а самым нетерпеливым скажу, что Ravon - это ребрендинг знаменитой марки UZ-Daewoo.

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Перевести статью:

Похожие новости

Комментарии

Информация

^ Наверх