С помощью PowerShell можно не только защитить конфиденциальные данные, но и использовать другие возможности командлетов, таких, как Invoke-Command или New-PSSession. Я покажу вам, насколько просто шифровать или дешифровать данные в PowerShell и как можно использовать зашифрованные данные для создания данных учетных записей.
В PowerShell командлеты ConvertTo-SecureString и ConvertFrom-SecureString можно использовать для шифрования и дешифрования стандартной строки System.String в System.Security.SecureString.
Вот пример, когда строка шифруется и сохраняется в переменной:
data = "This is some extremely important data"
$encryptedData = ConvertTo-SecureString -String $data -AsPlainText
Если мы введем имя переменной, содержащей зашифрованную строку, то увидим ее тип System.Security.SecureString
Мы также можем расшифровать данные, хранящиеся в объекте System.Security.SecureString, следующим образом:
ConvertFrom-SecureString -SecureString $encryptedData -AsPlainText
Командлеты, которые определяют параметр Credential, позволяют нам указать учетные данные, под которыми должен запускаться командлет. Значение, передаваемое параметру Credential, должно быть объектом PSCredential. И для того, чтобы мы могли создать объект PSCredential, нам нужны имя пользователя и пароль в виде защищенной строки, что означает, что нам нужно будет зашифровать пароль.
Чтобы надежно зашифровать строку, не рекомендуется указывать пароль в виде открытого текста в командной строке в качестве аргументов. Это связано с тем, что ведение журнала PowerShell или любое ведение журнала командной строки, которое включено, может регистрировать эти учетные данные в виде открытого текста, что есть нехорошо!
Поэтому вместо этого пароль следует считывать со стандартного потока stdn и сохранять в переменной. Командлет Read-Host, который позволяет считывать данные со стандартного потока, имеет параметр AsSecureString, который преобразует для нас данные, считанные со стандартного потока, в System.Security.SecureString.
С помощью следующего кода PowerShell можно считывать данные со стандартного ввода и сохранять их в переменной в виде защищенной строки:
$password = Read-Host -AsSecureString
Затем мы можем взять эту безопасную строку и создать требуемый объект PSCredential:
$Cred = New-Object System.Management.Automation.PSCredential("domain\user", $password)
Теперь мы можем использовать этот объект PSCredential с командлетами, позволяющими указать параметр Credential. Вот как я выполняю командлет Invoke-Command на удаленной машине с WinRM от имени другого пользователя, используя созданный нами PSCredential:
Invoke-Command -Credential $Cred -ScriptBlock { whoami } -ComputerName AlienHost
No comments:
Post a Comment
А что вы думаете по этому поводу?