👨💼
IT部門が管理するAzure Virtual Networkに 各部署のVMを所属させて職務分掌を行う方法
モチベ
下記のようなシナリオを実現する方法を確認したい
- IT部門がAzure環境を運営しており、その他各部署はそこから払い出されている環境を利用する
- 各部署はネットワーク構成の変更はできないようにする必要がある
- 各部署に専用のリソースグループを用意するところまではIT部門側で実施
- 各部署はそれぞれ自由にVMを立てたりしながらAzure環境を利用
- VMはIT部門が管理するVNETのサブネットに所属
- IT部門は月次で各部署にそれぞれの利用額を請求
想定Azure環境
- Networkリソースグループ:IT部門で管理
- VMリソースグループ:各部署が利用。今回はIaaS環境のみの利用を想定。
構成方法
- 結局のところRBACロールを各部署のユーザorグループにどのように割り当てるか、というだけの話
各部署のユーザに割り当てるロール
-
Networkリソースグループで
閲覧者
を割り当てる- VMの所属するVNETリソースが見えるようにするため
-
VMリソースグループで
仮想マシン共同作成者
を割り当てる -
ただ、仮想マシン共同作成者ロールだけでは、VMのNICを対象のサブネットに所属させる権限が足りない
※部署ユーザ側での作成画面
-
“Microsoft.Network/virtualNetworks/subnets/join/action”権限が必要
- この権限を内包したカスタムロールを作成し、Networkリソースグループで割り当てる
カスタムロールの作成
-
Networkリソースグループで
アクセス制御(IAM)
からカスタムロールを作成
-
最初から始める、を選択
-
上記の権限を検索し、アクセス許可を追加
-
あとは画面に従って、カスタムロールを作成し、ユーザに付与する
-
ロール付与完了後、エラーが消える
※部署ユーザ側での作成画面
-
また、仮想マシン共同作成者ロールにはパブリックIP作成権限もないため、上記の画面のように勧めていくとバリデーションエラーになる
- ネットワークをIT部門が管理しているなら作成できなくて正解ではある
※部署ユーザ側での作成画面
- ネットワークをIT部門が管理しているなら作成できなくて正解ではある
{"code":"InvalidTemplateDeployment","message":"The template deployment failed with error: 'Authorization failed for template resource 'demovm-ip' of type 'Microsoft.Network/publicIpAddresses'. The client 'demo@msext.net' with object id '0884995c-d3bb-4b43-a362-ba0445929d7c' does not have permission to perform action 'Microsoft.Network/publicIpAddresses/write' at scope '/subscriptions/42edd95d-ae8d-41c1-ac55-40bf336687b4/resourceGroups/20230404-rg-vm/providers/Microsoft.Network/publicIpAddresses/demovm-ip'.'."}
-
パブリックIPを
なし
にして作成すると、通る
※部署ユーザ側での作成画面
-
と思ったら、デプロイ時にエラーが発生
- IT部門側で用意しているNSGにNICをJoinする権限がない(先にValidationしてほしい、、、)
※部署ユーザ側での作成画面
- IT部門側で用意しているNSGにNICをJoinする権限がない(先にValidationしてほしい、、、)
{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.","details":[{"code":"LinkedAuthorizationFailed","message":"オブジェクト ID '0884995c-d3bb-4b43-a362-ba0445929d7c' のクライアント 'demo@msext.net' には、スコープ '/subscriptions/42edd95d-ae8d-41c1-ac55-40bf336687b4/resourcegroups/20230404-rg-vm/providers/Microsoft.Network/networkInterfaces/demovm139' でアクション 'Microsoft.Network/networkInterfaces/write' を実行するアクセス許可がありますが、リンクされたスコープ '/subscriptions/42edd95d-ae8d-41c1-ac55-40bf336687b4/resourceGroups/20230404-rg-networking/providers/Microsoft.Network/networkSecurityGroups/rg-networking-nsg' でアクション 'Microsoft.Network/networkSecurityGroups/join/action' を実行するアクセス許可がないか、リンクされたスコープが無効です。"}]}
- メッセージの通り、不足している'Microsoft.Network/networkSecurityGroups/join/action' これを追加する
- もしくはNICレベルでのNSGの付与をしない方針にする
- VMが所属する先のサブネットにはNSGがあるからいいよね、という考え方
- パブリックIPとNICをどちらも無しにすると、作成できる
※部署ユーザ側での作成画面
※部署ユーザ側での作成画面
おわり
まとめると、部署ユーザに下記ロールを割り当てることで実現できる
- VM作成用リソースグループでの
仮想マシン共同作成者
- Networkリソースグループでの“Microsoft.Network/virtualNetworks/subnets/join/action”権限を持つカスタムロール
GitHubで編集を提案
Discussion