Azure Policy イニシアチブ定義 を使って、環境内でパブリックアクセス可能なリソースを検出しつつ、新規でパブリックアクセス可能なDBの作成は拒否してみる
はじめに
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
この記事では特に重要なデータが保管されることの多い、各種DBに対してはDeny、それ以外のリソースに対してはAuditを設定していきたいと思います。
やってみる
この検証では以下の管理グループ、サブスクリプションを使用します。
- Tenant Root Group
- wada-management-group ←ここにイニシアチブを割り当て
- sandbox-01
- sandbox-02
- wada-management-group ←ここにイニシアチブを割り当て
イニシアチブ定義の割り当て
管理グループに対してイニシアチブ定義を割り当てを行います。
主要なパラメータは以下の通り設定します。
項目 | 設定値 | 備考 |
---|---|---|
スコープ | wada-management-group | 割り当てる管理グループ,サブスクリプション,リソースグループを指定可能 |
除外 | - | 割り当てから除外するリソースを定義できる |
ポリシー定義 | パブリック ネットワーク アクセスの監査 | イニシアチブの一覧から選択 |
割り当て名 | パブリック ネットワーク アクセスの監査(DBは拒否) | 任意の割り当て名を指定できる |
ポリシーの適用 | 有効 | |
マネージド ID を作成します | - | 修復アクションを実行するロールを作成する |
マネージド ID の種類 | - | |
システム割り当て ID の場所 | - | |
コンプライアンス非対応のメッセージ | 社内ポリシーで制限しています | Azure ポリシーによってアクションが拒否された時のメッセージを指定 |
Azure ポータルからポリシーのページを開きます。
サイドタブから「割り当て」をクリックします。
「イニシアティブの割り当て」をクリックします。
スコープの「・・・」をクリックし、割り当て先を選択します。
今回は「wada-management-group」の管理グループを選択し、「Select」をクリックします。
イニシアティブ定義の「・・・」をクリックし、割り当てたいポリシーを選択します。
「Audit Public Network Access」を検索・選択し「追加」をクリックします。
割り当て名に任意の文字列を入力し、設定を確認し「次へ」をクリックします。
今回はパブリックアクセス可能なDBは拒否し、その他は監査に設定するので、それがわかる割り当て名にしてみます。
このイニシアチブの効果はデフォルトでAuditが選択されていますが、今回はDBリソースに対してはDenyを設定してきます。
この記事では以下のリソースに対する効果をDenyに設定し「次へ」をクリックします。
- Microsoft.DBforMariaDB/servers の効果
- DBforMySQL/flexibleServers の効果
- DBforMySQL/servers の効果
- DBforPostgreSQL/flexibleServers の効果
- DBforPostgreSQL/servers の効果
- Microsoft.SQL/servers の効果
リソースに対して修正アクションは実行しないので、何も選択しないで「次へ」をクリックします。
既定のコンプライアンス非対応のメッセージに任意の文字列を入力し「次へ」をクリックします。
※ここでは、ポリシーによってアクションが拒否(Deny)された時に表示されるメッセージを定義できます。
イニシアチブ定義の場合はポリシーのそれぞれに対して設定できるようですが、この記事では一律で「社内ポリシーで制限しています」と設定していきます。
設定値を確認して「作成」をクリックします。
動作確認(既存リソースの確認)
Azure Policyの割り当ての画面から、先ほど実施した割り当てをクリックします。
管理グループの配下にパブリックアクセス可能なリソースが5つ存在することがわかりました。
必要に応じて確認・修正を行いましょう。
動作確認(DBの新規作成)
Azureポータルから「Azure Database for PostgreSQL」を開きます。
「作成」をクリックします。
「高度な作成」をクリックし設定を行っていきます。
ネットワーク設定で「パブリック アクセス (許可された IP アドレス) とプライベート エンドポイント」をオンにして「確認および作成」をクリックします。
リソースの作成が拒否されました。
最後に
この記事ではAudit Public Network Accessという組み込みのイニシアチブを使って、環境内でパブリックアクセス可能なリソースを検出しつつ、新規でパブリックアクセス可能なDBの作成は拒否してみました。
これらを一括で設定できるためイニシアチブ定義は便利ですね。