Azure存储帐户防火墙规则使用Azureure Devops防止Terraform部署

时间:2020-03-02 10:24:48

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

我想使用Azure DevOps管道部署我的Terraform基础结构,但是我遇到了存储帐户防火墙问题。以下是存储帐户的示例:

resource "azurerm_storage_account" "storage_account" {
  name                              = "mystorageaccount"
  resource_group_name               = "myresourcegroup"
...
  network_rules {
      default_action             = "Deny"
      bypass                     = ["AzureServices", "Logging"]
      ip_rules                   = ["192.1.1.1"]
  }
}

存储帐户的初始创建成功,但是由于防火墙规则,所有其他操作(例如添加容器)都会失败,并出现未经授权的异常。

很遗憾,为“ AzureServices”添加绕过规则无效。

我必须添加防火墙规则的原因是由于公司安全准则,所以我不能仅仅删除它。

有没有一种方法可以使用Azureure来处理存储帐户防火墙规则?

3 个答案:

答案 0 :(得分:1)

对于Terraform,我建议运行自己的代理程序池。生产环境的代理程序池应与非生产环境分开,并应位于单独的vNet中。 然后将网络规则添加到Storage Acconut,以允许从代理程序池子网进行访问。 当您使用服务端点时,大多数服务也会发生同样的情况。

//编辑:

检查some fresh best practices以创建Terraform管道。

答案 1 :(得分:1)

您可以利用数据源在申请时动态检查您的代理 IP。结果如下所示:

data "http" "myip" {
  url = "https://ipv4.icanhazip.com"
}

resource "azurerm_storage_account_network_rules" "sample" {
  resource_group_name  = azurerm_resource_group.rg.name
  storage_account_name = zurerm_storage_account.storage.name

  default_action             = "Deny"
  virtual_network_subnet_ids = [azurerm_subnet.subnet.id]
  bypass                     = ["AzureServices", "Logging", "Metrics"]
  ip_rules = [chomp(data.http.myip.body)]
}

然后,您需要确保在完成后删除了 IP,为此我通常只使用 Remove-AzStorageAccountNetworkRule 或作为某种东西 like this

答案 2 :(得分:0)

就像@ a4c74356b41一样,您必须按照here的描述,将我所在地区的特工的所有IP地址范围列入白名单。

不幸的是,大约有160个ip范围(您必须删除所有大于.../29的范围)+我自己的范围,但至少现在可以使用。