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_id
和 client_id
,以及 client_secret
、client_cert_path
或 client_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_id
和 subscription_id
,这些信息可以通过运行 az account show
命令获取。