Packer ARM Builder访问Keyvault遭第一方服务拒绝问题咨询
Packer Azure KeyVault 网络限制访问问题
我使用自定义KeyVault(通过build_key_vault_name配置),该KeyVault设置了网络限制,仅允许我的VNet内私有网络访问,但Packer在部署过程中出现访问被拒绝的错误,从日志来看是Azure Compute使用微软公网IP尝试获取密钥导致的。
Packer 日志
azure-arm: output will be in this color. 11:52:45 11:52:45 ==> azure-arm: Running builder ... 11:52:45 ==> azure-arm: Getting tokens using client secret 11:52:45 ==> azure-arm: Getting tokens using client secret 11:52:45 azure-arm: Creating Azure Resource Manager (ARM) client ... 11:52:45 ==> azure-arm: Using existing resource group ... 11:52:45 ==> azure-arm: -> ResourceGroupName : 'images-storage-rg-01' 11:52:45 ==> azure-arm: -> Location : 'eastus2' 11:52:45 ==> azure-arm: Setting the certificate in the KeyVault... 11:52:45 ==> azure-arm: Getting the certificate's URL ... 11:52:45 ==> azure-arm: -> Key Vault Name : 'packer-kv-01' 11:52:45 ==> azure-arm: -> Key Vault Secret Name : 'packerKeyVaultSecret' 11:52:45 ==> azure-arm: -> Certificate URL : 'https://packer-kv-01.vault.azure.net/secrets/packerKeyVaultSecret/0899826f9b724a84af004756f9545236' 11:52:45 ==> azure-arm: Setting the certificate's URL ... 11:52:45 ==> azure-arm: Validating deployment template ... 11:52:45 ==> azure-arm: -> ResourceGroupName : 'images-storage-rg-01' 11:52:45 ==> azure-arm: -> DeploymentName : 'pkrdpz90dt1tlc0' 11:52:45 ==> azure-arm: Deploying deployment template ... 11:52:45 ==> azure-arm: -> ResourceGroupName : 'images-storage-rg-01' 11:52:45 ==> azure-arm: -> DeploymentName : 'pkrdpz90dt1tlc0' 11:52:45 ==> azure-arm: ERROR: -> DeploymentFailed : At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details. 11:52:45 ==> azure-arm: ERROR: -> Conflict 11:52:45 ==> azure-arm: ERROR: -> ResourceDeploymentFailure : The resource write operation failed to complete successfully, because it reached terminal provisioning state 'Failed'. 11:52:45 ==> azure-arm: ERROR: -> KeyVaultAccessForbidden : Key Vault https://packer-kv-01.vault.azure.net/secrets/packerKeyVaultSecret/0899826f9b724a84af004756f9545236 either has not been enabled for deployment or the vault id provided, /subscriptions/****/resourceGroups/images-storage-rg-01/providers/Microsoft.KeyVault/vaults/packer-kv-01, does not match the Key Vault's true resource id. 11:52:45 ==> azure-arm: 11:52:45 ==> azure-arm: Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details." Details=[{"code":"Conflict","message":"{\r\n \"status\": \"Failed\",\r\n \"error\": {\r\n \"code\": \"ResourceDeploymentFailure\",\r\n \"message\": \"The resource write operation failed to complete successfully, because it reached terminal provisioning state 'Failed'.\",\r\n \"details\": [\r\n {\r\n \"code\": \"KeyVaultAccessForbidden\",\r\n \"message\": \"Key Vault https://packer-kv-01.vault.azure.net/secrets/packerKeyVaultSecret/0899826f9b724a84af004756f9545236 either has not been enabled for deployment or the vault id provided, /subscriptions/****/resourceGroups/images-storage-rg-01/providers/Microsoft.KeyVault/vaults/packer-kv-01, does not match the Key Vault's true resource id.\"\r\n }\r\n ]\r\n }\r\n}"}] 11:52:45 ==> azure-arm: 11:52:45 ==> azure-arm: The resource group was not created by Packer, deleting individual resources ... 11:52:45 ==> azure-arm: Removing the created Deployment object: 'pkrdpz90dt1tlc0' 11:52:45 ==> azure-arm: 11:52:45 ==> azure-arm: The resource group was not created by Packer, not deleting ... 11:52:45 Build 'azure-arm' errored after 1 minute 17 seconds: unexpected EOF
KeyVault 审计日志
Access denied to first party service. Caller: name=Compute;tid=f8cdef31-a31e-4b4a-93e4-5f571e91255a;appid=579d9c9d-4c83-4efc-8124-7eba65ed3356;oid=9486e527-3706-4e7b-8295-613aac964938;iss=https://sts.windows.net/f8cdef31-a31e-4b4a-93e4-5f571e91255a/ Vault:packer-kv-01;location=eastus2
补充信息
- 发起请求的公网IP:
52.136.29.5 - 操作类型:
SecretGet
问题解答
Object ID
9486e527-3706-4e7b-8295-613aac964938对应实体
这个Object ID属于Azure Compute服务的微软托管第一方服务主体,是Azure Compute资源提供者的系统身份,用于在VM部署等后台操作中访问KeyVault等资源。为何使用微软托管SPN而非自定义SPN
你的自定义SPN仅用于Packer工具本身与Azure ARM API的交互(比如创建资源组、提交部署模板等)。而当ARM部署模板执行到VM配置阶段时,需要从KeyVault拉取证书/密钥来配置VM(如RDP/SSH认证),这个操作是由Azure Compute服务自身的托管身份发起的,而非你的自定义SPN——这是Azure资源部署的内置流程,服务需要直接访问KeyVault完成VM初始化。为何从公网IP发起SecretGet操作
Azure Compute的第一方服务主体目前不支持通过VNet私有IP访问KeyVault,即使KeyVault配置了VNet白名单。这类微软托管服务默认使用公共IP池中的地址发起跨服务请求,因此会被你配置的KeyVault网络限制规则拦截。
内容的提问来源于stack exchange,提问作者Jayendran
相关产品推荐
相关产品推荐

