「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- Azure ポータル、
- Azure コマンドライン ツール、
- および Azure 管理 API
を使用して割り当てる。
- Azure ポータルで RBAC を設定する場合、
Access Control(IAM : Identity and Access Management)から行う。
- スコープに対する特定アクションにアクセスできるユーザを
ロールベースのアクセス制御 (RBAC : Role Based Access Control)で制御できる。
ロール †
ロールの定義 †
アクセス権は、
のアクセス許可セット的なもの。
操作(主) †
- Actions、NotActions?を定義して、AssignableScopes?のスコープに関連付けるる。
- 操作のアクセス権は、Actionsの操作からNotActions?の操作を差し引くことで算出される。
データ操作(副) †
- DataActions?、NotDataActions?を定義して、AssignableScopes?のスコープに関連付ける。
- データ操作のアクセス権は、DataActions?の操作からNotDataActions?の操作を差し引くことで算出される。
※ ただし、対応リソースが少ない(通常データ・ストアに依存した機能を使用する)ため、あまり使用しない。
定義の例 †
{
"Name": "Storage Blob Data Reader (Preview)",
"Id": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"IsCustom": false,
"Description": "Allows for read access to Azure Storage blob containers and data",
"Actions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/read"
],
"NotActions": [],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"NotDataActions": [],
"AssignableScopes": [
"/"
]
}
ロールの種類 †
ロールの種類には、
がある。
組み込みロール †
ユーザ、グループ、サービスに割り当てられる組み込みのロールが用意されている。
ただし、説明文は的確ではない表現も多いため、必ず中身をしっかり確認すること。
- 4つのプラットフォーム ロール
- 所有者(Owner)
「アクセス権の割当」を含め、全てを管理できる。
- 共同作業者(Contributor)
「アクセス権の割当」以外の、全てを管理できる。
- 閲覧者(Reader)
すべてを閲覧できるが、変更はできない。
- ユーザ・アクセス管理者(User Access Administrator)
Azure リソースへのユーザ アクセスを管理できる。
- ネットワークの共同作業者
他の「リソース固有ロール」に含まれない
ネットワーク系の設定変更が可能となっている。
- すべてのネットワーク リソースを管理できるが、
- ネットワーク リソースのアクセス許可は設定できない。
- 仮想マシンの共同作業者
(Virtual Machine Contributor)
- SQL Server の共同作業者
(SQL Server Contributor)
- SQL サーバーおよびデータベースを管理できるが、
- そのセキュリティ関連ポリシーは設定できない。
- Web サイトの共同作業者
(Web Site Contributor)
- Web サイトを管理できるが、
- 接続されている Web プランは設定できない。
カスタム・ロール †
組み込みのロールの中にアクセス権に関する特定の要件を満たすものがない場合、
Azure のロールベースのアクセス制御 (RBAC) でカスタム・ロールを作成する。
- ただし、極力、カスタム・ロールは作らないようにする。
- スコープをリソース・グループやリソース単位に絞って、
共同作業者(Contributor)ロールを設定することで対応可能。
参考 †
- Microsoft Azure サポート チーム サイト
スコープ †
ロールに関連付けるスコープ
指定できるスコープ †
- サブスクリプション
- リソース・グループ
- または単独のリソース
アクセス権の継承 †
各スコープは、以下のようにRBACを継承する。
サブスクリプション <--- リソース・グループ <--- リソース
- 親スコープでロールが関連付けられると、
その親に含まれる子へのアクセス権も付与される。
- 例えば、リソース・グループへのアクセス権を持つユーザは、
Web サイト、仮想マシン、サブネットなど、
リソース・グループに含まれるすべてのリソースを管理できる。
アクセス権の割当 †
サブスクリプションの所有者は
ると、当該リソースを管理できるようになる。
割り当て †
管理機能を使用して、以下のように
ロール <--->(ユーザ <---> グループ)
ユーザ・グループに詳細なロールを割り当てる。
関連付け †
管理機能を使用して、以下のように
ロール <--->(ユーザ <---> グループ)<---> スコープ
上記をスコープに関連付ける。
設定例 †
組み込みロール †
作業者用の組み込みロール †
組み込みロールを使用する。
管理者用の組み込みロール †
組み込みロールを使用する。
カスタム・ロール †
作業者用カスタム・ロールの例 †
「DevTest? Labs User」組込ロールを更に絞った、
「仮想マシンの起動と停止」カスタム・ロールを作成。
- 最小限
$role.Actions.Add("Microsoft.Compute/VirtualMachines/start/action")
$role.Actions.Add("Microsoft.Compute/VirtualMachines/restart/action")
$role.Actions.Add("Microsoft.Compute/VirtualMachines/read")
$role.Actions.Add("Microsoft.Compute/virtualMachines//read")
$role.Actions.Add("Microsoft.Compute/VirtualMachines/deallocate/action")
- Doscの例
$role.Actions.Add("Microsoft.Compute/virtualMachines/start/action")
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action")
$role.Actions.Add("Microsoft.Storage/*/read")
$role.Actions.Add("Microsoft.Network/*/read")
$role.Actions.Add("Microsoft.Compute/*/read")
$role.Actions.Add("Microsoft.Authorization/*/read")
$role.Actions.Add("Microsoft.Resources/subscriptions/resourceGroups/read")
$role.Actions.Add("Microsoft.ResourceHealth/availabilityStatuses/read")
$role.Actions.Add("Microsoft.Insights/alertRules/*")
$role.Actions.Add("Microsoft.Support/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") <--- SubsctionId を指定。
New-AzRoleDefinition -Role $role
- ロールをサブスクリプション・スコープに適用
>New-AzRoleAssignment
- ロールの更新
JSONを使ったGET&SETで更新する。
- 設定の反映には、アカウントの
サインアウト → サインインが必要。
- 参考:その他の定義方法
既存ロールをJSON形式で参照し、そこからカスタマイズする方法が一般的らしい。
管理者用カスタム・ロールの例 †
- 特定のリソース・グループに、
仮想マシンの共同作業者
(Virtual Machine Contributor)
の権限だけ付与する。
>New-AzRoleAssignment
- VM作成の権限不足
上記では権限が足りないのでポータルから追加してみる。
- 対象のリソース・グループの[アクセス制御 (IAM)] で [追加]を押下し、
ドロップダウンリストから[カスタム ロールの追加]を選択。
- 前述のようなカスタム ロールの定義を入力していく。
・カスタム ロールの名称と説明を入力
・エラー メッセージを参考に権限(アクセス許可)を追加
- [確認と作成] → [作成]ボタンを押下する。
- 対象のリソース・グループの[アクセス制御 (IAM)] で [追加]を押下し、
ドロップダウンリストから[ロールの割り当ての追加]を選択。
- [役割]のドロップダウンリストから作成したカスタム ロールを選択。
- [選択]で対象となるユーザ(若しくはグループ)を選択する。
- [保存]ボタンを押下する(結果は[ロールの割り当て]タブから確認できる。
- 更新は[役割]タブから行う(役割=ロールだよね...)。
- [種類]でソートして[CustomRole?]から対象のモノを検索
- [...]から[編集]を選択して、JSONを編集して保存する。
- 参考情報から、実際に追加が必要になるのは以下。
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/publicIpAddresses/write",
"Microsoft.Network/publicIpAddresses/read",
※ ただし、ここでは、PublicIP追加の権限は付与しない。
ロール作成と付与のポイント †
付与 †
- 「サブスクリプション → リソース・グループ → リソース」のスコープがある。
- 上位に付与した権限を下位で拒否できないので、
最小限、許可するものダケを積み重ねていく。
- 上位スコープには最小限の参照系の権限を付与し、
- 下位スコープには具体的作業に必要な更新系の権限を付与する。
作成 †
カスタムロールに含めるロール・アクションの探し方
- trial and error的で非効率的だが、errorからたどるのが一番確実。
- ドキュメント系は、現時点では、まだ、完全に書かれたものは少ない。
その他 †
サービスの場合 †
参考 †
Microsoft Docs †
概要 †
ロールの定義 †
- チュートリアル : ...を使用して Azure カスタム ロールを作成する
ロールの種類 †
ロールの割当 †
操作方法ガイド †
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-definitions-list
- ロール定義の一覧表示
- ロールの割り当ての一覧表示
- ロールを割り当てる
- 条件を追加または編集する
- ロールの割り当てを削除する
- 拒否割当を一覧表示する
- カスタム ロールを作成する
- アクティビティ ログを表示する
- アクセス権を昇格する
- 従来の管理者
- サブスクリプションを別のディレクトリに譲渡する
- トラブルシューティング
その他 †
Tags: :セキュリティ, :アカウント, :クラウド, :認証基盤, :Azure, :Active Directory