已设use_msi=true,Terraform Azurerm后端仍尝试密钥认证访问Blob存储
问题诊断与解决方案
核心原因
Terraform 0.12内置的azurerm后端存在设计局限:即便启用了MSI认证,它仍会默认尝试调用storageAccounts/listKeys接口获取存储账户密钥,再通过密钥访问Blob存储。而你的存储账户已禁用密钥认证,因此触发403权限错误。
解决方案
方案1:升级Terraform版本(推荐)
Terraform 0.13及以上版本的azurerm后端新增了use_azuread_auth参数,启用后会直接通过Azure AD身份(包括MSI)访问Blob存储,不再依赖存储账户密钥。
修改后端配置示例:
terraform { backend "azurerm" { resource_group_name = "your-resource-group" storage_account_name = "your-storage-account" container_name = "tfstate" key = "terraform.tfstate" use_msi = true use_azuread_auth = true # 新增此参数 } }
完成配置修改后重新执行terraform init即可。
方案2:临时授权MSI访问密钥(不推荐)
若无法升级Terraform版本,需为MSI分配存储账户密钥操作员服务角色,使其有权限调用storageAccounts/listKeys接口。此方法会绕开你设置的"阻止共享密钥授权"策略,仅作为临时过渡方案。
内容的提问来源于stack exchange,提问作者Saketh Kollu
相关产品推荐
相关产品推荐

