Azure の管理アカウントをカスタムロールで権限設定する

Azure

今回は、Microsoft Azure の管理アカウントに対しての権限設定について書いてみようと思います。

Microsoft Azure の管理アカウント権限

Microsoft Azure には、組み込みロールという権限のテンプレートが作成されています。

こんな感じですね。アイコンで青いのが組み込みロールで、オレンジ色のが自分で作ったカスタムロールです。

 

所有者が一番色々権限を持っているロールで、共同作成者はロールの追加・削除や、ユーザとロールの紐づけの変更ができないみたいな感じです。

組み込みロールとロールについての権限については、以下のドキュメントにすんごい詳しく書いてあります。

Azure ロールベースのアクセス制御の組み込みロール

 

カスタムロールの作り方

MS 安納さんの記事がとても分かりやすいです。
Azure リソースの RBAC でカスタムロールを作成する

要約しちゃうと、こんな感じ

# ベースとなる組み込みロールの設定の読み込み
$role = Get-AzureRmRoleDefinition "[組み込みロール名]"

# IDと名称、説明の初期化
$role.id = $Null
$role.Name = "[カスタムロール名]"
$role.Description = "[カスタムロールの説明]"

#権限の変更
$role.Actions.Add("[追加する許可する権限]")
$role.Actions.Remove("[削除する許可する権限]")
$role.NotActions.Add("[追加する禁止する権限]")
$role.NotActions.Remove("[削除する禁止する権限]")

#サブスクリプションID都の紐づけ
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/" + [サブスクリプションID])

#設定した権限でカスタムロールを作成
New-AzureRmRoleDefinition -Role $role

 

 

やってみて気づいたこと

* で設定すると、その項目を全部登録した場合に動作の違い

権限設定は、以下の2項目で行っていきます。

  • Actions : 許可する権限
  • NotActions : 禁止する権限

 

権限の設定ポリシーとしては、以下の2つがあると思います。

  • Actions に * を設定して、すべての権限を許可してから、NotActions で禁止をする
  • Actions に許可する権限をすべて積んでいく

 

で、この時に、* で設定した場合と、Actions にすべての権限を追加した場合とで、若干動作が異なる場合があります。
多分、表示上、見えてない権限があるのだと思います。

ですので、明示的に与えたい権限がある場合は、Actions に権限を積んでいくというのがいいと思います。
(逆に、NotActions で制限しきれない部分もある感じです。今だけの問題だといいんですが。。。)

 

Actions と NotActions に同じ権限詰んだらどうなる??

Actions と NotActions に VM を作成できる権限をつけたとします。
この場合は、NotActions が勝つので、VM は作成できないです。

 

1つのアカウントに複数のロールをぶら下げ気た場合どうなる??

1つのアカウントに複数のロールをぶら下げた場合はどうなるかってことですが、

例えば、 VM を管理できるロールと、App Service を管理できるロール の二つのロールをぶら下げた場合、
VM も App Service も管理できるロールとなります。

 

割と当たり前のことを書いてる感じですが、

例えば、VM を管理できるロールを
Actions は「*」、NotActions は VMを管理する権限以外すべて(App Service を管理する権限を含む) と設定したとします。

App Service を管理できるロールは
ActionsにApp Service を管理できる権限 という設定とします。

この2つのロールを1つのアカウントにぶら下げても同じ結果となります。

 

ロールが適用されているユーザの確認

以下のコマンドで確認できます。

Get-AzureRmRoleAssignment -IncludeClassicAdministrators

 

結果のサンプルはこんな感じ

RoleAssignmentId : /subscriptions/45454582-4309-419e-aa39-94f8c7510a6d/providers/Microsoft.Authorization/roleAssignments/45f5be9a-a644-479c-b388-af8a81229c4e
Scope : /subscriptions/45454582-4309-419e-aa39-94f8c7510a6d
DisplayName : testuser01
SignInName : testuser01@[ドメイン]
RoleDefinitionName : Owner
RoleDefinitionId : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
ObjectId : aefcbf81-5a59-4356-a244-a84a54d8484e
ObjectType : User

RoleAssignmentId : /subscriptions/45454582-4309-419e-aa39-94f8c7510a6d/providers/Microsoft.Authorization/roleAssignments/632b2524-533e-4e46-8617-525b497ec340
Scope : /subscriptions/45454582-4309-419e-aa39-94f8c7510a6d
DisplayName : testuser02
SignInName : testuser02@[ドメイン]
RoleDefinitionName :
RoleDefinitionId : dae7505b-017f-40d3-ad5e-479050cd2021
ObjectId : 4b348a0b-5e38-4965-a18d-0df91afef334
ObjectType : User

 

カスタムドメインの時ってロール名が取れないんですよねー。

ロールの定義内容は以下のコマンドで取得できます。


Get-AzureRmRoleDefinition

 

こいつらを使って、アカウントとロール名を出すのは以下のようにします。


$RoleAssignment = Get-AzureRmRoleAssignment | Select-Object SignInName,RoleDefinitionId
$RoleDefinition = Get-AzureRmRoleDefinition | Select-Object Id,Name

$JoinForHash = @{}
foreach($n in $RoleDefinition){$JoinForHash[$n.ID] = $n.Name}

$RoleAssignment | % {[PSCustomObject]@{ SignInName = $_.SignInName; RoleName = $($JoinForHash[$_.RoleDefinitionId])}}

 

結果はこんな感じ


SignInName RoleName
---------- --------
testuser01@[ドメイン] Owner
testuser02@[ドメイン] OwnerTest

まとめ

Azure を適切に管理するために、ユーザに与える権限は適切な権限を与えましょう。

 

コメント

  1. […] RBAC での設定については、以前に「Azure の管理アカウントをカスタムロールで権限設定する」という記事を書いていますので、そちらをご覧ください。 […]

タイトルとURLをコピーしました