2024-05-02

日: 2024-05-01 | 2024-05-03
週: 2024-04-25 | 2024-05-09
月: 2024-04-02 | 2024-06-02
年: 2023-05-02 | 2025-05-02

  • 09:35 M365管理センターのCloudShell。手軽で便利だな。どこのストレージアカウントを使っているのか不明だが・・・。
  • Azure のEventGridとAzurePolicyを使って「NSGでFromがAnyのルールが作成されたらそれをコンプライアンス違反として検知し、強制的に削除する」という仕組みを過去作った。それを別のサブスクリプションに移植する。
  • まず存在しているのはポリシー下記のようにルールが書かれている。
{

  "properties": {

    "displayName": "Deny NSG Inbound Allow All",

    "policyType": "Custom",

    "mode": "All",

    "description": "NSGのルールで接続元を*で許可するルールを拒否します。",

    "metadata": {

      "category": "Network",

      "createdBy": "b24f43a8-6b37-488f-b581-92008c8ef458",

      "createdOn": "2024-03-07T00:27:40.8856144Z",

      "updatedBy": "b24f43a8-6b37-488f-b581-92008c8ef458",

      "updatedOn": "2024-03-07T00:49:38.9547298Z"

    },

    "version": "1.0.0",

    "parameters": {},

    "policyRule": {

      "if": {

        "allOf": [

          {

            "field": "type",

            "equals": "Microsoft.Network/networkSecurityGroups/securityRules"

          },

          {

            "allOf": [

              {

                "field": "Microsoft.Network/networkSecurityGroups/securityRules/access",

                "equals": "Allow"

              },

              {

                "field": "Microsoft.Network/networkSecurityGroups/securityRules/direction",

                "equals": "Inbound"

              },

              {

                "anyOf": [

                  {

                    "field": "Microsoft.Network/networkSecurityGroups/securityRules/sourceAddressPrefix",

                    "in": [

                      "*",

                      "Internet"

                    ]

                  },

                  {

                    "not": {

                      "field": "Microsoft.Network/networkSecurityGroups/securityRules/sourceAddressPrefixes[*]",

                      "notIn": [

                        "*",

                        "Internet"

                      ]

                    }

                  }

                ]

              }

            ]

          }

        ]

      },

      "then": {

        "effect": "deny"

      }

    },

    "versions": [

      "1.0.0"

    ]

  },

  "id": "/subscriptions/8b5d30f0-08a4-4994-ae9d-2b4e9805a1e5/providers/Microsoft.Authorization/policyDefinitions/d99b8b09-81cd-43c9-ae8c-0f70656909c6",

  "type": "Microsoft.Authorization/policyDefinitions",

  "name": "d99b8b09-81cd-43c9-ae8c-0f70656909c6",

  "systemData": {

    "createdBy": "ebibibi@gmail.com",

    "createdByType": "User",

    "createdAt": "2024-03-07T00:27:40.8408326Z",

    "lastModifiedBy": "ebibibi@gmail.com",

    "lastModifiedByType": "User",

    "lastModifiedAt": "2024-03-07T00:49:38.9292894Z"

  }

}
  • 当初単一のサブスクリプションしか利用しない想定だったので管理グループを使っていなかったが、管理グループを作成し、その配下に新旧のサブスクリプションを移動する
  • 既存のポリシーの「定義を複製する」を使って管理グループを対象にポリシーを定義する。
  • 管理グループにポリシーを作成しても見えてくるまでには結構時間がかかるのでのんびりと待つ。
  • 複製して作成したポリシーを同様に管理グループに割り当てる。
  • 次にポリシーの状態変更イベントをEvent Gridで受取り、そのイベントをLogic Appsに引き渡すようにする。
  • チュートリアル: Azure CLI を使用してポリシー状態変更イベントを Event Grid にルーティングする - Azure Policy | Microsoft Learn
  • 管理グループのスコープでリソースプロバイダーを登録する
az provider register --namespace Microsoft.PolicyInsights -m jazb-subscriptions-for-users
az provider register --namespace Microsoft.EventGrid -m jazb-subscriptions-for-users
  • EventGridのシステムトピックを作成する
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/tenants/<tenantID>/providers/Microsoft.Management/managementGroups/<management_group_name>" --resource-group "<resource_group_name>"
  • あとは、logicappsなりなんなりで処理を作成しておき、そこに対してイベントサブスクリプションをセットする。
  • あとは、サブスクリプションが変更になっているので新しいサブスクリプションで作成したオブジェクトのマネージドIDを作成したり、管理グループにRBACで権限を与えたりなど…。
  • 18:52 Flux CDについて調べる