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 处理存储帐户防火墙规则?
就像@a4c74356b41 所说的那样,您必须按照 here.
所述将我所在地区的代理的所有 ip 范围列入白名单
不幸的是,大约有 160 个 ip 范围(你必须删除所有大于 .../29
的范围)+ 我自己的,但至少它现在可以工作了。
对于 Terraform,我建议 运行 拥有代理池。生产环境的代理池应与非生产环境分开,并且应位于单独的 vNet 中。
然后将网络规则添加到您的存储帐户以允许从代理池子网进行访问。
当您使用服务端点时,大多数服务也会发生同样的情况。
//编辑:
检查 some fresh best practices 以创建 Terraform 管道。
您可以利用数据源在应用时动态检查您的代理 IP time.The 结果如下所示:
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
我想使用 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 处理存储帐户防火墙规则?
就像@a4c74356b41 所说的那样,您必须按照 here.
所述将我所在地区的代理的所有 ip 范围列入白名单不幸的是,大约有 160 个 ip 范围(你必须删除所有大于 .../29
的范围)+ 我自己的,但至少它现在可以工作了。
对于 Terraform,我建议 运行 拥有代理池。生产环境的代理池应与非生产环境分开,并且应位于单独的 vNet 中。 然后将网络规则添加到您的存储帐户以允许从代理池子网进行访问。 当您使用服务端点时,大多数服务也会发生同样的情况。
//编辑:
检查 some fresh best practices 以创建 Terraform 管道。
您可以利用数据源在应用时动态检查您的代理 IP time.The 结果如下所示:
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