Azure Policy イニシアチブ定義 を使って環境内でパブリックアクセス可能なリソースを検出する
はじめに
Azureにおいて各リソースのパブリックアクセスは基本的に推奨されません。
この記事ではAzure Policyをグループ化したイニシアチブ定義を使って、環境内に存在するパブリックアクセス可能なリソースを「コンプライアンス非対応」として検出してみます。
Azure Policy とは
Azure Policyは、Azureリソースの統制・管理を行うサービスです。
Policyを管理グループ、サブスクリプション、リソースグループに適用することができ、その効果は下位の管理グループ、サブスクリプション、リソースグループに継承されます。
Azure Policyの効果 (effect) は下記の通りです。
- addToNetworkGroup
- append
- audit
- auditIfNotExists
- deny
- denyAction
- deployIfNotExists
- disabled
- manual
- modify
- mutate
Azure Policyはカスタムで作成することもできますが、すでに用意された組み込みポリシーを使うこともできます。
イニシアチブ定義とは
Azureでは、複数のAzure Policyをグループ化し、1つのイニシアチブ定義として作成・管理できます。
イニシアチブ定義もAzure Policyと同様に、カスタムで作成することもできますがすでに用意された組み込みのイニシアチブ定義を使うこともできます。
組み込みのイニシアチブ定義を使うことで、個別にAzure Policyを作成する場合に比べて実装・管理の工数の削減が見込めます。
Audit Public Network Access
この記事ではAudit Public Network Accessという組み込みのイニシアチブを使って、環境内でパブリックアクセス可能なリソースを検出します。
このイニシアチブでは以下のリソースに対してAudit,Denyの設定が可能です。
- Microsoft.Automation/automationAccounts
- Microsoft.Batch/batchAccounts
- Microsoft.BotService/botServices
- Microsoft.Cache/Redis
- Microsoft.CognitiveServices/accounts
- Microsoft.Compute/disks
- Microsoft.ContainerRegistry/registries
- Microsoft.DataFactory/factories
- Microsoft.DBforMariaDB/servers
- Microsoft.DBforMySQL/flexibleServers
- Microsoft.DBforMySQL/servers
- Microsoft.DBforPostgreSQL/flexibleServers
- Microsoft.DBforPostgreSQL/servers
- Microsoft.Databricks/workspaces
- Microsoft.Devices/IotHubs
- Microsoft.Devices/provisioningServices
- Microsoft.KeyVault/vaults
- Microsoft.DocumentDB/databaseAccounts
- Microsoft.EventGrid/domains
- Microsoft.EventGrid/topics
- Microsoft.HybridCompute/privateLinkScopes
- Microsoft.Insights/components
- Microsoft.Insights/privateLinkScopes
- Microsoft.MachineLearningServices/workspaces
- Microsoft.Media/mediaservices
- Microsoft.OperationalInsights/workspaces
- Microsoft.Search/searchServices
- Microsoft.ServiceBus/namespaces
- Microsoft.SignalRService/SignalR
- Microsoft.SignalRService/webPubSub
- Microsoft.SQL/servers
- Microsoft.Storage/storageAccounts
- Microsoft.Synapse/workspaces
- Microsoft.AppConfiguration/configurationStores
- Microsoft.Web/hostingEnvironments
- Microsoft.Attestation/attestationProviders
やってみる
この検証では以下の管理グループ、サブスクリプションを使用します。
- Tenant Root Group
- wada-management-group ←ここにイニシアチブを割り当て
- sandbox-01
- sandbox-02
- wada-management-group ←ここにイニシアチブを割り当て
イニシアチブ定義の割り当て
管理グループに対してイニシアチブ定義を割り当てを行います。
主要なパラメータは以下の通り設定します。
項目 | 設定値 | 備考 |
---|---|---|
スコープ | wada-management-group | 割り当てる管理グループ,サブスクリプション,リソースグループを指定可能 |
除外 | - | 割り当てから除外するリソースを定義できる |
ポリシー定義 | パブリック ネットワーク アクセスの監査 | |
割り当て名 | パブリック ネットワーク アクセスの監査 | |
ポリシーの適用 | 有効 | |
マネージド ID を作成します | - | 修復アクションを実行するロールを作成する |
マネージド ID の種類 | - | |
システム割り当て ID の場所 | - | |
コンプライアンス非対応のメッセージ | - | Azure ポリシーによってアクションが拒否された時のメッセージを指定 |
Azure ポータルからポリシーのページを開きます。
サイドタブから「割り当て」をクリックします。
「イニシアティブの割り当て」をクリックします。
スコープの「・・・」をクリックし、割り当て先を選択します。
今回は「wada-management-group」の管理グループを選択し、「Select」をクリックします。
イニシアティブ定義の「・・・」をクリックし、割り当てたいポリシーを選択します。
「Audit Public Network Access」を検索・選択し「追加」をクリックします。
設定を確認し「次へ」をクリックします。
パラメータはAudit,Deny,Disabledが選べますが、今回はデフォルトのAuditのままで「次へ」をクリックします。
リソースに対して修正アクションは実行しないので、何も選択しないで「次へ」をクリックします。
コンプライアンス非対応は何も設定せず「次へ」をクリックします。
※ここでは、ポリシーによってアクションが拒否(Deny)された時に表示されるメッセージを定義できます
設定値を確認して「作成」をクリックします。
これでイニシアチブの割り当ては完了です。
ポップの通り、検証は15分ほど時間をおいてから行うことを推奨します。
リソースの確認
Azure Policyの割り当ての画面から、先ほど実施した割り当てをクリックします。
管理グループの配下にパブリックアクセス可能なリソースが5つ存在することがわかりました。
必要に応じて確認・修正を行いましょう。
最後に
この記事ではAudit Public Network Accessという組み込みのイニシアチブを使って、環境内でパブリックアクセス可能なリソースを検出してみました。
どなたかの参考になればと思います。