Azure ポリシーを用いてリソースを作成できるリージョンを制限してみる
Azure ポリシーを用いてリソースを作成できるリージョンを制限する設定を試してみます。
Azure ポリシーには組み込みのポリシーとイニシアチブが複数あり、その中の「Allowed locations (許可されている場所) 」を利用することでリージョン制限ができます。
組み込みのポリシーとイニシアチブの一覧は次のドキュメントに掲載されています。イニシアチブはポリシー定義の集合です。
「許可されている場所」の設定
事前作成済みの管理グループに対して「許可されている場所」を設定(割り当て)してみます。
Policy メニューから「割り当て」を選択します。
「Assign policy」を選択します。
Basic タブにおいて、次の内容を設定してみます。他の設定はデフォルトのままです。
- Scope : 事前作成済みの管理グループ「mg-sandbox」を指定
- Policy definition : 「許可されている場所」を検索して指定
- 英語名で検索する場合は「Allowed locations」
- Assignment name : リージョン制限
- Policy enforcement : Enabled
次に Parameters タブにおいて、利用を許可するリージョンを選択します。今回は次の 2 つのリージョンを指定します。
- Japan East
- Japan West
Remediation (修復) 設定については、今回はスキップします。
Non-compliance messages タブでは、非準拠の場合のメッセージを指定できるため「リソースを作成できるリージョンは制限されています」を指定してみます。
最後にレビューを確認して作成を実行することで設定完了です。
Scope をポリシーを割り当てした管理グループに変更して確認してみたところ、ポリシーが反映されていることが確認できました。
なお、設定後には次のメッセージが表示され、反映には 5〜15 分程度必要なことがわかります。
Creating policy assignment 'リージョン制限' in 'mg-sandbox' was successful. Please note that the assignment takes around 5-15 minutes to take effect.
ポリシー設定時点において、許可していないリージョン(East US)で既に作成済みのリソースは非準拠リソースとなっていることも確認できました。
「許可さている場所」の設定後の確認
「許可さている場所」の設定後に、実際にリソースを作成できるリージョンが制限されているか確認してみます。
ポリシーを適用した管理グループ内のサブスクリプションにアクセスして確認してみます。
許可していないリージョンである US East を指定して Virtual Network を作成してみようとしたところ、「レビューと作成」において想定通りエラーが発生しました。理由欄には、Azure ポリシー設定の際に指定したメッセージが表示されていることも確認できました。
許可しているリージョンではエラーが発生せずにレビューされました。「作成」をクリックすることでリソース作成もできました。
「許可されている場所」の詳細
許可されている場所の詳細は Azure ポータルにサインインして下記の URL から確認できます。
ポリシーの定義を転記します。執筆時点では Version 1.0.0 です。location が parameters に含まれない場所やグローバルでない場合に Deny される内容となっていました。
{
"properties": {
"displayName": "許可されている場所",
"policyType": "BuiltIn",
"mode": "Indexed",
"description": "このポリシーでは、リソースをデプロイするときに組織が指定できる場所を制限できるようになります。geo コンプライアンス要件を適用するときに使用します。リソース グループ、Microsoft.AzureActiveDirectory/b2cDirectories、'グローバル' リージョンを使用するリソースは除外されます。",
"metadata": {
"version": "1.0.0",
"category": "General"
},
"version": "1.0.0",
"parameters": {
"listOfAllowedLocations": {
"type": "Array",
"metadata": {
"description": "リソースのデプロイ時に指定できる場所の一覧。",
"strongType": "location",
"displayName": "許可されている場所"
}
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "location",
"notIn": "[parameters('listOfAllowedLocations')]"
},
{
"field": "location",
"notEquals": "global"
},
{
"field": "type",
"notEquals": "Microsoft.AzureActiveDirectory/b2cDirectories"
}
]
},
"then": {
"effect": "deny"
}
},
"versions": ["1.0.0"]
},
"id": "/providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c",
"type": "Microsoft.Authorization/policyDefinitions",
"name": "e56962a6-4747-49cd-b67b-bf8b01975c4c"
}
以上、Azure ポリシーを用いたリージョン制限の設定でした。
さいごに
Azure ポリシーを用いて管理グループを対象にリソースを作成できるリージョンを制限する設定をしてみました。組み込みのポリシーで簡易に設定できる点が気に入っています。組み込みのポリシーやイニシアチブは他にも多数存在するため、機会があれば試してみたいと思いました。
以上、このブログがどなたかのご参考になれば幸いです。