Azure 虚拟机镜像构建器

原文


Packer 可以通过多种方式创建 Azure 虚拟机镜像,具体取决于要用于构建镜像的策略。 本手册目前仅翻译以下构建器:

  • azure-arm - 使用 Azure 资源管理器 (ARM) 启动虚拟机 (VM),配置后生成新镜像。如有疑问,请使用此构建器,它是最容易上手的构建器。

Azure 身份认证

Packer Azure 构建器提供了以下几种与 Azure 进行身份验证的方法:

  • Azure Active Directory 交互式登录。交互式登录仅适用于公共云和美国政府云。
  • Azure 托管身份(Managed Identity)
  • Azure Active Directory 服务主体(Service Principal)
  • Azure CLI

如果您不知道该使用哪种身份验证方法,可以使用交互式登录来试用构建器。如果您需要在自动化环境中使用 Packer,请使用服务主体或托管身份。

无论您选择哪种方法,您使用的身份都需要对 Azure 资源具有适当的权限,Packer 才能运行。最小权限集高度依赖于构建器及其配置。一种简单的入门方法是在订阅级别为身份分配 Contributor 角色。

Azure Active Directory 交互式登录

如果您的组织允许,您可以使用基于 oAuth 的 "device code flow" 的命令行交互式登录方法。当您仅在构建器配置中指定 use_interactive_auth 时,Packer 将选择该方法。当您运行 Packer 时,它会要求您访问一个网站并输入一个代码。然后,该网站将对您进行身份验证,使用您的组织可能配置的双因素身份验证策略进行验证。令牌缓存在您的主目录中的 .azure/packer 目录下,如果它们在后续运行中仍然有效,将被重复使用。

请注意,交互式登录仅适用于 Azure 公共云,不适用于主权/政府云。

Azure 托管身份

Azure 可以将身份分配给虚拟机(Azure 文档)。Packer 可以使用系统为运行 Packer 的 VM 分配的身份来调用 Azure API。这是默认行为,不需要设置任何配置属性。但是,这需要您在 Azure VM 上运行 Packer。

要启用此方法,让 Azure 为您的 VM 分配一个系统分配的身份。然后,授予您的 VM 访问适当资源的权限。如果 Azure VM 分配了多个托管身份(例如,系统分配的身份和用户分配的身份),则可以指定 client_id 配置参数以选择要使用的适当的托管身份。

source "azure-arm" "basic-example" {
  client_id = "fe354398-d7sf-4dc9-87fd-c432cd8a7e09"
  resource_group_name = "packerdemo"
  storage_account = "virtualmachines"

  capture_container_name = "images"
  capture_name_prefix = "packer"

  os_type = "Linux"
  image_publisher = "Canonical"
  image_offer = "UbuntuServer"
  image_sku = "14.04.4-LTS"

  location = "West US"
  vm_size = "Standard_A2"
}

首先,尝试将 Subscription 级别的 Contributor 角色分配给您的 VM。然后,根据实际需求适当地将权限范围缩小或将 Packer 构建隔离在单独的订阅中。

Azure Active Directory 服务主体

Azure Active Directory 设计了名为“服务主体”(Service Principal) 对象的服务账号。SP 表示访问 Azure 资源的应用程序。它由 Client ID(又名 Application ID)标识,可以使用密码或证书进行身份验证。要使用服务主体,请指定 subscription_idclient_id,以及 client_secretclient_cert_pathclient_jwt。后三个参数中的每一个都代表一种不同的方式来向 AAD 验证 SP:

  • client_secret - 用户可以设置 AAD SP 注册时配置的密码/机密。
  • client_cert_path - 可以设置证书作为指定的 AAD SP 身份验证凭据。
  • client_cert_token_timeout - 设置使用 client_cert_path 时创建的令牌的过期时间。
  • client_jwt - 当用户无法向 Packer 提供完整证书的时候,他们可以为客户端身份验证提供 JWT 令牌(RFC 7523,第 2.2 节)。这些令牌是使用在 AAD 中注册的证书创建和签名的,并且具有用户设置的到期时间,从而限制令牌的有效性。使用 client_cert_path 作为身份验证时的也可以使用相同的底层机制。
  • 要创建服务主体,您可以按照有关此主题的 Azure 文档进行操作。

Azure CLI

使用该方法将跳过提供的所有其他选项,并且仅使用 az cli 用于进行身份验证的凭据。可适用于普通用户 (az login) 和服务主体 (az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID)。

要启用 az cli 身份验证,请使用以下命令:

  • use_azure_cli_auth : true

此模式将使用当前活动 az 会话中的 tenant_idsubscription_id,这些信息可以通过运行 az account show 命令获取。

results matching ""

    No results matching ""