繁体   English   中英

Azure 存储帐户防火墙规则阻止使用 azure devops 进行 terraform 部署

[英]Azure storage account firewall rule prevents terraform deployment with azure devops

我想使用 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”添加绕过规则不起作用。

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

有没有办法用 azure devops 处理存储帐户防火墙规则?

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

//编辑:

查看创建 Terraform 管道的一些新的最佳实践

您可以利用数据源在申请时动态检查您的代理 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或东西像这样

就像@a4c74356b41 所说的,您必须按照此处所述将我所在地区的代理的所有 ip 范围列入白名单。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM