我正在创建一个将调用PowerShell脚本的Azure函数。为了做到这一点,我需要让PS脚本进行无人值守的登录。所以我创建了一个应用程序和服务主体,如下所示:
# Create an Azure Active Directory Application that will be used for authentication in Powershell Automation scripts.
$Password = ConvertTo-SecureString '<MyPassword>' -AsPlainText -Force
$AzureAdApplication = New-AzureRmADApplication -DisplayName "PowerShellAdminApp" -Password $Password -HomePage "https://www.phoenix.com" -IdentifierUris "https://www.phoenix.com"
# Create the Service Principal
New-AzureRmADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId
# Add permissions to the Server Principal
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureAdApplication.ApplicationId.Guid
这一切都正常。
然后,在我的PS脚本中,我将以无人值守的方式登录,如下所示:
$Username = "https://www.phoenix.com"
$Password = ConvertTo-SecureString "<MyPassword>" -AsPlainText -Force
$Credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $Username, $Password
Login-AzureRmAccount -ServicePrincipal -Credential $Credential -TenantId '<MyTenantId'
这也有效。但是,我觉得我不理解某些东西或者我错过了什么。这根本不安全。如果我必须在我的所有PS脚本中都有此登录代码,那么基本上让任何有权访问这些脚本的人都可以看到租户ID和应用程序的密码。然后,他们可以执行应用程序可以执行的任何活动。
我这样做是正确还是不理解?
答案 0 :(得分:0)
您可以使用“应用程序设置”定义环境变量并在其中存储密码,并在您的代码中读取它们:
$username = $env:username
$password = ConvertTo-SecureString $env:password -AsPlainText -Force