既存のSubscriptionに対し、すべてのリソースを作成できなくしたい

このエントリは2022/11/24現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容からの乖離が発生する可能性があります。

先日、あるお問い合わせをもらった。

とある管理グループ配下のすべてのAzure Subscriptionに対し、新規でAzureリソースを作成できなくしたい。カスタムロールを作ってRBACすることでもできそうではあるが、すでに運用中のSubscriptionなので、ロールの付け替えはできるだけ避けたい。何かよい方法はないだろうか?

どうやら、Subscription ownerであっても新規でリソースを作成できなくしたい、とのことらしい。問い合わせ主の言うように、カスタムロールを作って制限をかけることもできるが、全くの新規ではなく、すでに利用しているSubscriptionが存在していると、既存のSubscription ownerロールを付け替えるなど、非常に面倒な操作が必要になるのは確か。

解決策

リソース作成を許可しないAzure Policyを作成する。具体的にはdenyポリシーを使う。ご存知の方にとっては簡単過ぎる内容かもしれない。

拒否 / Deny
https://learn.microsoft.com/azure/governance/policy/concepts/effects#deny

方法

ビルトインポリシーで「許可されていないリソースの種類(英語では、 Not allowed resource types)」があるので、これを複製し、すべてのリソース作成を許可しないようなポリシーを新規作成する。

「許可されていないリソースの種類(英語では、 Not allowed resource types)」でポリシーを検索すると、上記のように1件ビルトインポリシーが出てくるので、このポリシーの右にある・・・をクリックし、【定義を複製する / Duplicate definition】を選択する。

オリジナルのポリシーでは、パラメータとして渡されたリソースの作成を許可しない構成になっているが、今回は全リソースの作成を許可したくないので、実のところパラメータは必要ない。そのため、以下のように書き換えてもかまわない。

  • policyRule
    • parameters('listOfResourceTypesNotAllowed') は、Microsoft.* に変更
    • effectのparameters('effect')は、denyに変更
  • parameters
    • parameters.listOfResourceTypesNotAllowedを削除。
    • parameters.effectを削除。

もちろん、parametersを残して、その中に記載してもかまわない。以下はパラメータを削除した例。

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "in": "Microsoft.*"
        },
        {
          "value": "[field('type')]",
          "exists": true
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  }
}

新規で作成したポリシーに名前を付けて、ポリシーを割り当てたら、作業は終了。

管理グループのアクセス権の確認

ポリシー自体は上記の設定で問題ないが、管理グループの設定変更ができてしまうとポリシーの適用を除外されてしまう。そのため、管理グループ配下のSubscription ownerに割り当てられているユーザーの中で、管理グループの変更権限を有しているものがあれば、その権限を剥奪しておく。

対策後

問い合わせ主からは、希望通りの挙動をした、との連絡をもらった。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中