【问题标题】:Creating an Azure Policy preventing internet access directly from subscription创建 Azure 策略以防止直接通过订阅访问 Internet
【发布时间】:2019-06-26 21:51:08
【问题描述】:

我想创建一个 Azure 订阅,其中无法创建可以直接访问 Internet 的资源,而是需要路由回本地设备。

我创建了以下策略并将其应用于订阅

 {
"if": {
  "anyOf": [
    {
      "source": "action",
      "like": "Microsoft.Network/publicIPAddresses/*"
    }
  ]
},
"then": {
  "effect": "deny"
}

但是,看起来仍然可以访问互联网。我们是否需要为所有子网创建自定义 UDR 以将所有 0.0.0.0/0 流量路由回本地?

顺便说一句,在 AWS 中创建类似的 SCP 相当简单: https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_example-scps.html#example_scp_5

【问题讨论】:

    标签: amazon-web-services azure-policy


    【解决方案1】:

    策略以别名为基础,因此您必须寻找有效的别名。 Microsoft.Network/publicIDaddress 不是一个。有关如何获取别名的信息,请参阅 here

    如果您正在寻找应用程序网关,则别名为 Microsoft.Network/applicationGateways/frontendIPConfigurations[*].publicIPAddress

    【讨论】:

    • 好的,然后我只需将 0.0.0.0 流量路由回 VPN?
    • 我意识到您的整体政策定义结构也是错误的。您可能想对字段和类型做一些事情,以便如果任何 applicationGateways 不等于 0.0.0.0 则拒绝。有关定义结构的更多信息,请查看此处:docs.microsoft.com/en-us/azure/governance/policy/concepts/…
    【解决方案2】:

    我遇到了同样的问题,我解决了如下:

    {
      "policyType": "Custom",
      "mode": "All",
      "displayName": "check_default_route_gateway_plus_default",
      "policyRule": {
        "if": {
          "count": {
            "field": "Microsoft.Network/routeTables/routes[*]",
            "where": {
              "allOf": [
                {
                  "field": "Microsoft.Network/routeTables/routes[*].nextHopIpAddress",
                  "equals": "[parameters('DefaultGW')]"
                },
                {
                  "field": "Microsoft.Network/routeTables/routes[*].name",
                  "equals": "DEFAULT"
                },
                {
                  "field": "Microsoft.Network/routeTables/routes[*].addressPrefix",
                  "equals": "0.0.0.0/0"
                }
              ]
            }
          },
          "notEquals": 1 
        },
        "then": {
          "effect": "deny"
        }
      },
      "parameters": {
        "DefaultGW": {
          "type": "String",
          "metadata": {
            "displayName": "Default Gateway IP",
            "description": "The default Gateway IP. It correspond to the Proxy IP"
          },
          "defaultValue": "PUT_HERE_THE_IP_OF_YOUR_APPLIANCE"
        }
      }
    }
    

    如果没有名为 DEFAULT 且地址前缀为 0.0.0.0/0 指向您的设备的默认路由,此策略将失败。

    我花了一些时间才想到它,因为逻辑与我的预期行为相反。 该策略在其表达式被评估为 true 时触发,而我认为它会触发然后评估为 false

    VSCode 插件Azure Policy 对实现它有很大帮助,您可以在其中交互式地测试您的策略,而无需等待云延迟。

    https://docs.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure 也有助于查看所有策略结构。

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2012-06-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多