练习 - 创建服务主体和密钥

已完成

重要

需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户

在为玩具公司的网站创建部署管道之前,需要创建服务主体并授予其访问 Azure 环境的权限。 在此练习中,你将创建用于部署管道的服务主体。

在此过程中,你将:

  • 在单个操作中创建应用程序、服务主体和密钥。
  • 安全地处理密钥。
  • 使用服务主体的凭据登录 Azure,验证该服务主体是否正常工作。

要完成此练习,需要具有在 Microsoft Entra 目录中创建应用程序和服务主体的权限。 如果你当前的 Azure 帐户无法满足此要求,可获取免费试用版,并创建新的 Azure 订阅和租户。 或者,你也可以跳过此练习。

登录 Azure

要在 Azure 中使用服务主体,需要从 Visual Studio Code 终端登录到 Azure 帐户。

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

  2. 默认 shell 通常是 pwsh,如终端窗口右侧所示。

    Screenshot of the Visual Studio Code terminal window, with p w s h shown as the shell option.

  3. 选择 shell 下拉列表,然后选择“Azure Cloud Shell (bash)”。

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown shown and Azure Cloud Shell (bash) selected.

  4. 会打开一个新 shell。

使用 Azure CLI 登录到 Azure

  1. 在 Visual Studio Code 终端中,运行以下命令登录到 Azure:

    az login
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

若要将此模板部署到 Azure,需要从 Visual Studio Code 终端登录到 Azure 帐户。

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

  2. 默认 shell 通常是 pwsh,如终端窗口右侧所示。

    Screenshot of the Visual Studio Code terminal window, with p w s h shown as the shell option.

  3. 选择 shell 下拉列表,然后选择“Azure Cloud Shell (PowerShell)”。

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown shown and Azure Cloud Shell (PowerShell) selected.

  4. 会打开一个新 shell。

使用 Azure PowerShell 登录到 Azure

  1. 在 Visual Studio Code 终端中,运行以下命令登录到 Azure:

    Connect-AzAccount
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

创建服务主体和密钥

  1. 在 Visual Studio Code 终端中运行此 Azure CLI 命令,创建一个服务主体:

    az ad sp create-for-rbac --name ToyWebsitePipeline
    

    如果 Azure CLI 提示了一个错误,指示其他应用程序具有相同的显示名称,则说明有其他使用 Microsoft Entra 租户的用户已创建具有相同名称的服务主体。 将 --name 值更改为唯一值。 它不会影响你完成剩余练习的方式。

  2. 查看上一个命令的 JSON 输出。 它包括以下属性:

    • appId:服务主体的应用程序 ID。
    • password:服务主体的密钥。
    • tenant:你的 Microsoft Entra 租户 ID。

    将这些值复制到安全位置。 稍后将会用到。

  1. 在 Visual Studio Code 终端中运行这些 Azure PowerShell 命令,创建一个服务主体:

    $servicePrincipal = New-AzADServicePrincipal `
      -DisplayName ToyWebsitePipeline
    
  2. 运行以下命令以获取服务主体的密钥:

    $servicePrincipalKey = $servicePrincipal.PasswordCredentials.SecretText
    
  3. 运行以下命令,来显示服务主体的应用程序 ID、密钥和 Microsoft Entra 租户 ID:

    Write-Output "Service principal application ID: $($servicePrincipal.AppId)"
    Write-Output "Service principal key: $servicePrincipalKey"
    Write-Output "Your Azure AD tenant ID: $((Get-AzContext).Tenant.Id)"
    

    将这些值复制到安全位置。 稍后将会用到。

警告

上述命令的输出包含服务主体的密钥。 请注意运行这些命令的位置。 例如,请勿在其他人可能能够查看到的环境中运行它们。

测试服务主体

现在服务主体已创建,可以使用其凭据进行登录,以验证其是否已成功创建。

  1. 在 Visual Studio Code 终端中运行此 Azure CLI 命令,使用服务主体的凭据进行登录。 将占位符替换为你在上一步中复制的值。

    az login --service-principal \
      --username APPLICATION_ID \
      --password PASSWORD \
      --tenant TENANT_ID \
      --allow-no-subscriptions
    

    请注意,包含了 --allow-no-subscriptions 参数。 通常,运行命令 az login 时,Azure CLI 会查找你可访问的 Azure 订阅。 尚未向服务主体授予对任何内容的访问权限,因此使用 --allow-no-subscriptions 参数来防止 Azure CLI 检查订阅列表并显示错误。

  2. 检查上一命令的输出是否为 JSON 对象,该对象包含带有服务主体的应用程序 ID 的 user 属性。 此信息指示服务主体已成功登录。

  3. 使用以下命令注销服务主体的帐户:

    az logout
    
  1. 在 Visual Studio Code 终端中运行此 Azure PowerShell 命令,以安全地提示你输入服务主体的凭据。 使用上一步骤中的服务主体的应用程序 ID 和密钥分别作为用户名和密码。

    $credential = Get-Credential
    
  2. 在 Visual Studio Code 终端中运行此 Azure PowerShell 命令,使用服务主体的凭据进行登录。

    Connect-AzAccount -ServicePrincipal `
      -Credential $credential `
      -Tenant TENANT_ID
    
  3. 检查上一命令的输出是否包含带有服务主体的应用程序 ID 的 Account 属性和一个空白的 SubscriptionName 值。 此信息指示服务主体已成功登录。

  4. 使用以下命令注销服务主体的帐户:

    Logout-AzAccount
    

现在,你拥有一个正常运行的服务主体,可进入下一阶段:授权它访问你的 Azure 环境。