このエントリは2022/03/10現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。
先日以下のようなエントリを書いた。
先日のエントリではビルトインポリシーを使うことで賄える(ものもある)という内容だったが、ビルトインポリシーで賄えない場合、カスタムで作成する必要がある。それに関連して、前回登場したとある人からこんな問い合わせをもらった。
App ServiceやFunctionsで、アクセス制限をしたい。具体的にはFirewallを通過したものだけ着信を許可したいのだが、どのように構成すればよいか。以前カスタムでポリシーを作成したときには、アクセス制限がOffの場合には検知できなかったので、いい方法があればいいのだが。。
受信トラフィックのアクセス制限
ここで言っているアクセス制限とは、Azure Portalにおける設定>ネットワークにある、受信トラフィックのアクセス制限のこと。

このアクセス制限を開くと、Offの場合はデフォルトで任意の送信元からのアクセスを許可している。

これにアクセス制限(例えばFirewallのIPアドレスが192.168.120.10とする)を追加すると、以下のように変わる。

ARMテンプレートをエクスポートして、上記制限部分を確認すると、以下のよう(Microsoft.Web/sites/config
以下を参照)。
"ipSecurityRestrictions": [
{
"ipAddress": "192.168.120.10/32",
"action": "Allow",
"tag": "Default",
"priority": 300,
"name": "Firewall",
"description": "via Firewall "
},
{
"ipAddress": "Any",
"action": "Deny",
"priority": 2147483647,
"name": "Deny all",
"description": "Deny all access"
}
]
これらから、
- アクセス制限がOffの場合はipSecurityRestrictionsルールが1個のみ
- Onの場合はipSecurityRestrictionsルールが複数存在
であることがわかる。この情報を考慮してポリシーを作成すれば、アクセス制限がOffのものも検知できる。例えば以下だと、Firewallの定義が少なくとも入っていて、個数が2個以上、という感じ。
{
"allOf": [
{
"field": "Microsoft.Web/sites/config/ipSecurityRestrictions[*].ipAddress",
"in": [
"192.168.120.10/32",
"Any"
]
},
{
"count": {
"field": "Microsoft.Web/sites/config/ipSecurityRestrictions[*]"
},
"greaterOrEquals": 2
}
]
}
ここで、Any
も条件に含まれているが、これはDeny Allのルールで使っているため。なお、「Any
を使ったAllowルールを作成したらどうなるの?」という疑問も出てくるが、このアクセス制限では、以下の理由でAny
を使ったカスタムルールを設定できないので、考慮する必要がない。
Any
を使ってAllowルールを作成できるのは制限Offのときのみ- アクセス制限Onの場合、
Any
を使うのはDeny Allのみ - カスタムルールでは、IPアドレスやサービスタグを明示的に指定しなければならない
それゆえ、Any
があっても誤検知することはない。