セキュリティ管理者はファイアウォールを管理し、オンプレミスおよびクラウドの導入におけるコンプライアンスを確保する必要があります。 重要な要素は、アプリケーションチームがCI/CDパイプラインを自動化してファイアウォールルールを作成する柔軟性を提供できる能力です。
Azure Firewallポリシーは、ルール階層を定義し、準拠を強制することを可能にします:
- 子アプリケーションチームポリシーの上に中央の基本ポリシーを重ねる階層構造を提供します。 ベースポリシーから継承されたルールコレクションは、同じルールタイプの子ポリシーで定義されたルールコレクションよりも優先されます。 Azure Firewallは継承に関わらず、アプリケーションルールコレクションよりもネットワークルールコレクションを処理します。 詳細については、Azure Firewall Manager rules processingをご覧ください。
- Azureのカスタムロール定義を使って、意図しない基本ポリシーの削除を防ぎ、サブスクリプションやリソースグループ内のルールコレクショングループに選択的アクセスを提供します。
ソリューションの概要
この例の大まかなステップは以下の通りです:
- セキュリティチームのリソースグループで基本的なファイアウォールポリシーを作成します。
- 基本ポリシーでITセキュリティ固有のルールを定義してください。 これにより、通行の許可・拒否に関する共通ルールが追加されます。
- 基本ポリシーを継承するアプリケーションチームポリシーを作成します。
- ポリシー内でアプリケーションチーム固有のルールを定義してください。 既存のファイアウォールからルールを移行することも可能です。
- Microsoft Entraのカスタムロールを作成し、ルールコレクショングループへの細かなアクセスを提供し、ファイアウォールポリシーの範囲でロールを追加します。 以下の例では、営業チームのメンバーがSalesチームのファイアウォールポリシーのルールコレクショングループを編集できます。 データベースチームやエンジニアリングチームにも同じことが言えます。
- ポリシーを対応するファイアウォールに関連付けます。 Azureファイアウォールは割り当てられたポリシーを1つしか持てません。 そのため、各アプリケーションチームが独自のファイアウォールを持つ必要があります。
ファイアウォールポリシーを作成します
- 基本的なファイアウォールポリシーです。
各アプリケーションチームごとにポリシーを作成しましょう:
- セールスファイアウォールポリシー。 Salesファイアウォールポリシーは基本ファイアウォールポリシーを引き継ぎます。
- データベースファイアウォールポリシー。 データベースファイアウォールポリシーは基本ファイアウォールポリシーを継承します。
- エンジニアリングファイアウォールポリシー。 エンジニアリングファイアウォールポリシーは、基本的なファイアウォールポリシーも継承します。
ルールコレクショングループにアクセスするためのカスタムロールを作成する
各アプリケーションチームごとにカスタムロールが定義されています。 この役割は業務範囲を定義します。 アプリケーションチームはそれぞれのアプリケーションごとにルール収集グループを編集することが許可されています。
カスタムロールを定義するには、以下の高水準手順を用いてください:
購読を始めましょう。
Select-AzSubscription -SubscriptionId xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx次のコマンドを実行します。
Get-AzProviderOperation "Microsoft.Support/*" | FT Operation, Description -AutoSizeGet-AzRoleDefinition コマンドを使ってReaderの役割をJSON形式で出力してください。
Get-AzRoleDefinition -Name "Reader" | ConvertTo-Json | Out-File C:\CustomRoles\ReaderSupportRole.jsonエディタで ReaderSupportRole.json ファイルを開いてください。
こちらがJSONの出力です。 各種のプロパティについては、Azure カスタム ロールに関するページを参照してください。
{
"Name": "Reader",
"Id": "acdd72a7-3385-48ef-bd42-f606fba81ae7",
"IsCustom": false,
"Description": "Lets you view everything, but not make any changes.",
"Actions": [
"*/read"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/"
]
}
JSONファイルを編集して
*/read", "Microsoft.Network/*/read", "Microsoft.Network/firewallPolicies/ruleCollectionGroups/writeアクション プロパティの 操作。 読み出し操作の後には必ずコンマを入れてください。 この操作により、ユーザーはルールコレクショングループの作成および更新が可能になります。
AssignableScopesで、以下の形式でサブスクリプションIDを追加してください。
/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx明示的なサブスクリプションIDを追加する必要があります。 そうでなければ、その役割をサブスクリプションにインポートすることはできません。
Idプロパティラインを削除し、IsCustomプロパティをtrueに変更します。
名前と説明プロパティをAZFMルールコレクショングループに変更してください。この役割のユーザーはファイアウォールポリシーのルールコレクショングループを編集できます
JSON ファイルは次の例のようになります。
{
"Name": "AZFM Rule Collection Group Author",
"IsCustom": true,
"Description": "Users in this role can edit Firewall Policy rule collection groups",
"Actions": [
"*/read",
"Microsoft.Network/*/read",
"Microsoft.Network/firewallPolicies/ruleCollectionGroups/write"
],
"NotActions": [
],
"DataActions": [
],
"NotDataActions": [
],
"AssignableScopes": [
"/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"]
}
新しいカスタムロールを作成するには、New-AzRoleDefinition コマンドを使い、JSONロール定義ファイルを指定してください。
New-AzRoleDefinition -InputFile "C:\CustomRoles\RuleCollectionGroupRole.json
カスタム ロールを一覧表示する
すべてのカスタムロールを一覧表示するには、Get-AzRoleDefinition コマンドを使えます:
Get-AzRoleDefinition | ? {$_.IsCustom -eq $true} | FT Name, IsCustom
カスタムロールはAzureポータルでも確認できます。 購読先に行き、アクセス制御(IAM)、ロールを選択します。
詳細については、チュートリアル:Azure PowerShell を使って Create an Azure custom role をご参照ください。
ユーザーをカスタムロールに追加
ポータル上で、ユーザーをAZFMルールコレクショングループの作成者ロールに追加し、ファイアウォールポリシーへのアクセスを提供できます。
- ポータルからアプリケーションチームのファイアウォールポリシー(例:SalesAppPolicy)を選択します。
- [Access Control] を選択します。
- [ロールの割り当ての追加] を選択します。
- ユーザーやユーザーグループ(例えば営業チーム)をロールに追加します。
この手順を他のファイアウォールポリシーにも繰り返します。
まとめ
カスタムロールを持つファイアウォールポリシーは、ファイアウォールポリシーのルール収集グループへの選択的アクセスを提供します。
ユーザーは以下の権限を持ちません:
- Azure Firewallまたはファイアウォールポリシーを削除してください。
- ファイアウォールポリシーの階層やDNS設定、脅威インテリジェンスを更新してください。
- ファイアウォールポリシーをAZFMルールコレクショングループの作成者グループのメンバーでない場所で更新してください。
セキュリティ管理者は、企業の要件に応じてガードレールを強制し、特定の種類のトラフィック(例えばICMP)をブロックするために基本ポリシーを使用できます。