如何在 Powershell Core 中连接 AzAccount(没有提示)?
How to Connect-AzAccount in Powershell Core (without prompt)?
我确实看到了这个 q/a:
但是当我尝试接受的答案时,出现以下错误:
[6/12/2020 12:36:20 AM] ERROR: Connect-AzAccount : Username + Password authentication is not supported in PowerShell Core. Please use device code authentication for interactive log in, or Service Principal authentication for script log in.
所以我转到了 Connect-AzAccount 文档的 example 3,其中指定了 "Service Principal" 身份验证方法,所以我将两者混合使用,因为建议的 vanilla Get-Credential
会触发另一个交互式会话。现在是脚本:
$User = "myemail@gmail.com"
$PWord = ConvertTo-SecureString -String "**********" -AsPlainText -Force
$tenant = "f*********************************"
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
# $Credential = Get-Credential
Connect-AzAccount -Credential $Credential -Tenant $tenant -ServicePrincipal
这会带来我的下一个错误:[6/12/2020 12:45:45 AM] ERROR: Connect-AzAccount : AADSTS700016: Application with identifier 'myemail' was not found in the directory 'f*********************************'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.
此时我真的很困惑,因为此时我在 Azure 中所做的一切是:
- 创建一个新的 Azure 帐户
- 通过 UI 配置 Azure API 管理实例(顺便说一句,大约需要 20 分钟)
- 尝试使用上述代码在本地 Powershell Azure 函数内连接到 Azure。
我认为我提供的信息或我的配置方式有问题。
$User
是我用来注册 Azure 的电子邮件。
$PWord
是我的 Azure 密码
$tenant
是我打开Azure AD看到的第一个东西:
我尝试通过 Powershell Core 连接到 Azure 的方式有什么问题?
基于示例 3,它要求输入您的应用程序 ID 作为用户名和服务主体密码作为密码。
所以你首先需要create a service principal。然后使用其应用程序 ID 和客户端密码作为凭据。
$User = "{application id}"
$PWord = ConvertTo-SecureString -String "{client secret}" -AsPlainText -Force
我不喜欢 Azure 文档。它散发出与 GCP 截然不同的氛围,并且对初学者的感觉要差得多。
话虽如此,他们确实有某种 write-up 可以解决我创建服务主体并使用它进行身份验证的问题。
实际上我最终只是找到了 a video(而且我从来没有这样做过)因为我想跳过所有技术术语并只创建该死的服务主体。
它甚至不直观 - 就像 Microsoft 可以 在 AZ AD 或 IAM 中添加一个按钮,上面写着 "Create Service Principal" 但 没有 ,您必须转到一堆其他页面,这些页面对服务主体只字未提。你会看到:
在 Azure 门户中,导航到 Azure Active Directory 中的 App Registrations 页面。 "app registration" 与服务主体有什么关系,我无法告诉您。我也无法告诉您服务主体是什么,但我想它与服务帐户有关。
进行新注册并为其命名以描述该服务主体的范围。就像正常的服务帐户命名约定一样。我认为帐户类型并不重要,但我选择了 Multitenant。 Redirect URL 与服务主体无关,老实说让它变得更加混乱。我永远不会将服务帐户与任何类型的重定向相关联 url,但我们在这里。
您将到达一个带有 显示名称(您在第 2 步中提供的服务主体的名称)的页面,Application (client) ID(这实际上是您的服务帐户用户名,这是不直观的),以及 Object ID(我不知道这是什么但我从来不需要使用它。
猜猜看,您只创建了服务帐户的 1/3。它甚至还没有密码。在您创建的应用程序注册中,有一个 Certificates & Secrets 页面。在该页面上,您想要添加一个新的客户端密码。对于我的描述,我只输入了我的服务主体 "display name"。我不认为这是必要的,因为这个客户端秘密在应用程序注册的范围内,所以即使我将它命名为 "poop" 我也可以合理地假设它的用途。 Azure 将生成一个细微的客户端密码并显示它,但不会警告您这是您唯一能够看到密钥的时间。复制它。在普通人看来,这是您的服务主体密码。
最后一步需要脱离闪避,我是说Azure AD。导航至您的 订阅 页面并点击您的有效订阅。出于某种原因 IAM 在这里,所以点击它。此时,您的服务主体拥有用户名和密码,但没有实际权限 - 您也必须手动配置。单击添加 -> 添加角色分配。对于角色,你应该做你的研究,但如果它不严重,贡献者 可能是一个安全的选择。它有 read/write,但不会取代 Owner。确保您正在分配对服务主体的访问权限,并搜索其显示名称。 保存.
完成所有这些后,Connect-AzAccount
终于成功了。
我确实看到了这个 q/a:
但是当我尝试接受的答案时,出现以下错误:
[6/12/2020 12:36:20 AM] ERROR: Connect-AzAccount : Username + Password authentication is not supported in PowerShell Core. Please use device code authentication for interactive log in, or Service Principal authentication for script log in.
所以我转到了 Connect-AzAccount 文档的 example 3,其中指定了 "Service Principal" 身份验证方法,所以我将两者混合使用,因为建议的 vanilla Get-Credential
会触发另一个交互式会话。现在是脚本:
$User = "myemail@gmail.com"
$PWord = ConvertTo-SecureString -String "**********" -AsPlainText -Force
$tenant = "f*********************************"
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
# $Credential = Get-Credential
Connect-AzAccount -Credential $Credential -Tenant $tenant -ServicePrincipal
这会带来我的下一个错误:[6/12/2020 12:45:45 AM] ERROR: Connect-AzAccount : AADSTS700016: Application with identifier 'myemail' was not found in the directory 'f*********************************'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.
此时我真的很困惑,因为此时我在 Azure 中所做的一切是:
- 创建一个新的 Azure 帐户
- 通过 UI 配置 Azure API 管理实例(顺便说一句,大约需要 20 分钟)
- 尝试使用上述代码在本地 Powershell Azure 函数内连接到 Azure。
我认为我提供的信息或我的配置方式有问题。
$User
是我用来注册 Azure 的电子邮件。
$PWord
是我的 Azure 密码
$tenant
是我打开Azure AD看到的第一个东西:
我尝试通过 Powershell Core 连接到 Azure 的方式有什么问题?
基于示例 3,它要求输入您的应用程序 ID 作为用户名和服务主体密码作为密码。
所以你首先需要create a service principal。然后使用其应用程序 ID 和客户端密码作为凭据。
$User = "{application id}"
$PWord = ConvertTo-SecureString -String "{client secret}" -AsPlainText -Force
我不喜欢 Azure 文档。它散发出与 GCP 截然不同的氛围,并且对初学者的感觉要差得多。
话虽如此,他们确实有某种 write-up 可以解决我创建服务主体并使用它进行身份验证的问题。
实际上我最终只是找到了 a video(而且我从来没有这样做过)因为我想跳过所有技术术语并只创建该死的服务主体。
它甚至不直观 - 就像 Microsoft 可以 在 AZ AD 或 IAM 中添加一个按钮,上面写着 "Create Service Principal" 但 没有 ,您必须转到一堆其他页面,这些页面对服务主体只字未提。你会看到:
在 Azure 门户中,导航到 Azure Active Directory 中的 App Registrations 页面。 "app registration" 与服务主体有什么关系,我无法告诉您。我也无法告诉您服务主体是什么,但我想它与服务帐户有关。
进行新注册并为其命名以描述该服务主体的范围。就像正常的服务帐户命名约定一样。我认为帐户类型并不重要,但我选择了 Multitenant。 Redirect URL 与服务主体无关,老实说让它变得更加混乱。我永远不会将服务帐户与任何类型的重定向相关联 url,但我们在这里。
您将到达一个带有 显示名称(您在第 2 步中提供的服务主体的名称)的页面,Application (client) ID(这实际上是您的服务帐户用户名,这是不直观的),以及 Object ID(我不知道这是什么但我从来不需要使用它。
猜猜看,您只创建了服务帐户的 1/3。它甚至还没有密码。在您创建的应用程序注册中,有一个 Certificates & Secrets 页面。在该页面上,您想要添加一个新的客户端密码。对于我的描述,我只输入了我的服务主体 "display name"。我不认为这是必要的,因为这个客户端秘密在应用程序注册的范围内,所以即使我将它命名为 "poop" 我也可以合理地假设它的用途。 Azure 将生成一个细微的客户端密码并显示它,但不会警告您这是您唯一能够看到密钥的时间。复制它。在普通人看来,这是您的服务主体密码。
最后一步需要脱离闪避,我是说Azure AD。导航至您的 订阅 页面并点击您的有效订阅。出于某种原因 IAM 在这里,所以点击它。此时,您的服务主体拥有用户名和密码,但没有实际权限 - 您也必须手动配置。单击添加 -> 添加角色分配。对于角色,你应该做你的研究,但如果它不严重,贡献者 可能是一个安全的选择。它有 read/write,但不会取代 Owner。确保您正在分配对服务主体的访问权限,并搜索其显示名称。 保存.
完成所有这些后,Connect-AzAccount
终于成功了。