Terraform 后端无法连接到存储帐户

时间:2021-01-19 09:35:33

标签: azure-devops terraform terraform-provider-azure

这是我来自 terraform.tf

terraform {
    backend "azurerm" {
        resource_group_name = "tstate"
        storage_account_name = "strorageaccount1"
        container_name = "terraform.tfstate"
        access_key = "asdfg45454..."
    }
}

当我的存储帐户不在“所有网络”时,这会失败。我的存储帐户网络设置如下。 Blob 存储私有或公共它都可以工作,所以没有问题。但是必须启用“所有网络”才能使其工作。如何使其在禁用“所有网络”的情况下工作?我得到的错误如下:

<块引用>

错误:无法获取现有工作区:存储:服务返回 错误:StatusCode=403,ErrorCode=AuthorizationFailure, ErrorMessage=此请求无权执行此操作。

不需要 IP 或 Vnet,因为 Azure 默认代理正在运行 DevOps 管道。并且 SPN 拥有订阅的所有者访问权限。我错过了什么?

enter image description here

1 个答案:

答案 0 :(得分:2)

好吧,您明确禁止几乎所有服务(或服务器)访问您的存储帐户。除了“trusted Microsoft services”。但是,您的 Azure DevOps 构建代理不属于该类别。

因此,您需要先将构建代理列入白名单。有两种方法可以做到这一点:

  • 使用在 VNET 中运行的自托管代理。然后在存储帐户的防火墙规则中允许来自该 VNET 的访问
  • 如果您想坚持使用托管构建代理:首先运行 AZ CLI 或 Azure Powershell 脚本,这会获取构建代理 (https://api.ipify.org) 和 add that to your firewall 的公共 IP。 terraform 完成后,使用另一个脚本再次删除该 IP 异常。
相关问题