「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Azure Subscriptionの管理@エンプラ]]
-[[戻る>Azure]]
--[[Azureのアクセス制御と権限]]
--[[Azure Resource Manager (ARM)]]

* 目次 [#ga39c47d]
#contents

*概要 [#g05b61f4]
-アクセス権は、

--Azure ポータル、
--Azure コマンドライン ツール、
--および Azure 管理 API

>を使用して割り当てる。

-Azure ポータルで RBAC を設定する場合、~
Access Control(IAM : Identity and Access Management)から行う。

-[[スコープ>#ae75b754]]に対する特定アクションにアクセスできるユーザを~
ロールベースのアクセス制御 (RBAC : Role Based Access Control)で制御できる。

-アクセス権を付与するには、
--ユーザ、グループ、[[サービス>#i74de7a8]]に[[ロール>#ea4f95c8]]を[[割り当て>#n913d126]]、
--それを、特定の[[スコープ>#ae75b754]]に[[関連付け>#z2c99ad1]]る。

*ロール [#ea4f95c8]

**ロールの定義 [#e76e3def]
アクセス権は、

-[[操作(主)>#n783488c]]
-[[データ操作(副)>#m4f4d382]]

のアクセス許可セット的なもの。

***操作(主) [#n783488c]
-Actions、NotActionsを定義して、AssignableScopesの[[スコープ>#ae75b754]]に関連付けるる。
-操作のアクセス権は、Actionsの操作からNotActionsの操作を差し引くことで算出される。

***データ操作(副) [#m4f4d382]
-DataActions、NotDataActionsを定義して、AssignableScopesの[[スコープ>#ae75b754]]に関連付ける。
-データ操作のアクセス権は、DataActionsの操作からNotDataActionsの操作を差し引くことで算出される。

※ ただし、対応リソースが少ない(通常データ・ストアに依存した機能を使用する)ため、あまり使用しない。

***定義の例 [#y22a4be5]
 {
   "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":  [
     "/"
   ]
 }

**ロールの種類 [#p2c79aeb]
ロールの種類には、
-[[組み込みロール>#j27599ed]]
-[[カスタム・ロール>#gc65de81]]

がある。

***組み込みロール [#j27599ed]
ユーザ、グループ、[[サービス>#i74de7a8]]に[[割り当て>#n913d126]]られる組み込みのロールが用意されている。~
ただし、説明文は的確ではない表現も多いため、必ず中身をしっかり確認すること。

-4つのプラットフォーム ロール
--所有者(Owner)~
「アクセス権の割当」を含め、全てを管理できる。
--共同作業者(Contributor)~
「アクセス権の割当」以外の、全てを管理できる。
--閲覧者(Reader)~
すべてを閲覧できるが、変更はできない。
--ユーザ・アクセス管理者(User Access Administrator)~
Azure リソースへのユーザ アクセスを管理できる。

-リソース固有ロール

--ネットワークの共同作業者~
他の「リソース固有ロール」に含まれない~
ネットワーク系の設定変更が可能となっている。
---すべてのネットワーク リソースを管理できるが、
---ネットワーク リソースのアクセス許可は設定できない。

--仮想マシンの共同作業者~
(Virtual Machine Contributor)
---仮想マシンを管理できるが、
---仮想マシンのアクセス許可は設定できない。
---接続先の[[仮想ネットワーク>Azureの仮想ネットワーク]]または[[ストレージ・アカウント>Azureのストレージ#t36c3007]]の管理はできない。

--[[ストレージ・アカウント>Azureのストレージ#t36c3007]]の共同作業者
---[[ストレージ・アカウント>Azureのストレージ#t36c3007]]を管理できるが、
---[[ストレージ・アカウント>Azureのストレージ#t36c3007]]のアクセス許可は設定できない。

--SQL Server の共同作業者~
(SQL Server Contributor)
---SQL サーバーおよびデータベースを管理できるが、
---そのセキュリティ関連ポリシーは設定できない。

--Web サイトの共同作業者~
(Web Site Contributor)
---Web サイトを管理できるが、
---接続されている Web プランは設定できない。

--, etc. (全部で70種類程ある)

***カスタム・ロール [#gc65de81]
組み込みのロールの中にアクセス権に関する特定の要件を満たすものがない場合、~
Azure のロールベースのアクセス制御 (RBAC) で[[カスタム・ロール>#nec899f1]]を作成する。

-ただし、極力、カスタム・ロールは作らないようにする。

-スコープをリソース・グループやリソース単位に絞って、~
共同作業者(Contributor)ロールを設定することで対応可能。

***参考 [#o740dd43]
-Microsoft Azure サポート チーム サイト
--Microsoft Azure の各種アカウント権限について~
https://blogs.msdn.microsoft.com/dsazurejp/2013/10/02/303/
--アカウント管理者・サービス管理者・共同管理者の変更方法について~
https://blogs.msdn.microsoft.com/dsazurejp/2013/10/02/293/

-Azure サブスクリプション管理者を追加または変更する~
https://docs.microsoft.com/ja-jp/azure/cost-management-billing/manage/add-change-subscription-administrator#types-of-azure-admin-accounts

*スコープ [#ae75b754]
[[ロール>#ea4f95c8]]に[[関連付け>#z2c99ad1]]るスコープ

**指定できるスコープ [#i040f172]
-サブスクリプション
-リソース・グループ
-または単独のリソース

**アクセス権の継承 [#q8598e80]
各[[スコープ>#ae75b754]]は、以下のようにRBACを継承する。

>サブスクリプション <--- [[リソース・グループ>Azure Subscriptionの管理手順@エンプラ#if3a99f1]] <--- リソース

-親スコープで[[ロール>#ea4f95c8]]が[[関連付け>#z2c99ad1]]られると、~
その親に含まれる子へのアクセス権も付与される。

-例えば、リソース・グループへのアクセス権を持つユーザは、~
Web サイト、仮想マシン、サブネットなど、~
リソース・グループに含まれるすべてのリソースを管理できる。

*アクセス権の割当 [#k1ba75af]
サブスクリプションの所有者は~

-他のユーザ・グループに詳細な[[ロール>#ea4f95c8]]を[[割り当て>#n913d126]]、
-上記を[[スコープ>#ae75b754]]に[[関連付け>#z2c99ad1]]

ると、当該リソースを管理できるようになる。

**割り当て [#n913d126]
管理機能を使用して、以下のように

>[[ロール>#ea4f95c8]] <--->(ユーザ <---> グループ) 

ユーザ・グループに詳細な[[ロール>#ea4f95c8]]を割り当てる。

**関連付け [#z2c99ad1]
管理機能を使用して、以下のように

>[[ロール>#ea4f95c8]] <--->(ユーザ <---> グループ)<---> [[スコープ>#ae75b754]]

[[上記>#n913d126]]を[[スコープ>#ae75b754]]に関連付ける。

*設定例 [#g03fbf16]

**組み込みロール [#j117f124]

***作業者用の組み込みロール [#tb97e0ed]
[[組み込みロール>#j27599ed]]を使用する。
-プラットフォーム ロール
-リソース固有ロール

***管理者用の組み込みロール [#kc0d5a6e]
[[組み込みロール>#j27599ed]]を使用する。
-プラットフォーム ロール
-リソース固有ロール

**カスタム・ロール [#nec899f1]

***作業者用カスタム・ロールの例 [#f47adf4e]
「DevTest Labs User」組込ロールを更に絞った、~
「仮想マシンの起動と停止」カスタム・ロールを作成。

-[[準備>Azure PowerShell#m3b29bfc]]

-カスタム・ロールを作成
 $role = Get-AzRoleDefinition "Virtual Machine Contributor"
 
 $role.Id = $Null
 $role.Name = "仮想マシンの起動と停止"
 $role.Description = "仮想マシンの起動と停止、再起動ができます"
 
 $role.Actions.Clear()

--最小限
 $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.Actions.Add("Microsoft.Compute/VirtualMachines/start/action")
 $role.Actions.Add("Microsoft.Compute/VirtualMachines/restart/action")
 $role.Actions.Add("Microsoft.Compute/VirtualMachines/deallocate/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

--以下は二者択一のオプション~
ユーザを指定する
 -ObjectId <objectId>
 -SignInName <emailOrUserprincipalname>
※ [[UPNの例>Azure Active Directory B2B collaboration#u93d3536]]

--以降のオプション
 -RoleDefinitionName "仮想マシンの起動と停止" `
 -Scope /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` <--- SubsctionId を指定。

-ロールの更新~
JSONを使ったGET&SETで更新する。

--GET
 >Get-AzRoleDefinition -Name "仮想マシンの起動と停止" `
  | ConvertTo-Json `
  | Out-File -FilePath "D:\custom_role.json"

--JSONをメンテ~

---自動シャットダウンを構成
 "Microsoft.DevTestLab/schedules/*",
 "Microsoft.Compute/virtualMachines/write",

---参考:azure - How to add Custom Role for “Virtual Machine operator” to set Auto-shut down - Stack Overflow~
https://stackoverflow.com/questions/57263562/how-to-add-custom-role-for-virtual-machine-operator-to-set-auto-shut-down

--SET
 >Set-AzRoleDefinition -InputFile "D:\custom_role.json"

--設定の反映には、アカウントの~
サインアウト → サインインが必要。

-参考:[[その他の定義方法>#l8d5f516]]~
既存ロールをJSON形式で参照し、そこからカスタマイズする方法が一般的らしい。
--[[Azure PowerShell]], [[Azure CLI]]
--[[Azure Resource Manager テンプレート]]
--[[AzureポータルやREST API>Azureの管理ポータルとARM API]]

***管理者用カスタム・ロールの例 [#ka8ea084]
-特定のリソース・グループに、
>仮想マシンの共同作業者~
(Virtual Machine Contributor)

>の権限だけ付与する。
 >New-AzRoleAssignment

--以下は二者択一のオプション~
ユーザを指定する
 -ObjectId <objectId>
 -SignInName <emailOrUserprincipalname>
※ [[UPNの例>Azure Active Directory B2B collaboration#u93d3536]]

--以降のオプション
 -RoleDefinitionName "Virtual Machine Contributor" `
 -ResourceGroupName [既存のRG名]

-VM作成の権限不足~
上記では権限が足りないのでポータルから追加してみる。

--対象のリソース・グループの[アクセス制御 (IAM)] で [追加]を押下し、~
ドロップダウンリストから[カスタム ロールの追加]を選択。
---[[前述>#f47adf4e]]のようなカスタム ロールの定義を入力していく。~
・カスタム ロールの名称と説明を入力~
・エラー メッセージを参考に権限(アクセス許可)を追加
---[確認と作成] → [作成]ボタンを押下する。

--対象のリソース・グループの[アクセス制御 (IAM)] で [追加]を押下し、~
ドロップダウンリストから[ロールの割り当ての追加]を選択。
---[役割]のドロップダウンリストから作成したカスタム ロールを選択。
---[選択]で対象となるユーザ(若しくはグループ)を選択する。
---[保存]ボタンを押下する(結果は[ロールの割り当て]タブから確認できる。

--更新は[役割]タブから行う(役割=ロールだよね...)。
---[種類]でソートして[CustomRole]から対象のモノを検索
---[...]から[編集]を選択して、JSONを編集して保存する。
---参考情報から、実際に追加が必要になるのは以下。
 "Microsoft.Network/networkSecurityGroups/read",
 "Microsoft.Network/networkSecurityGroups/write",
 "Microsoft.Network/publicIpAddresses/write",
 "Microsoft.Network/publicIpAddresses/read",
※ ただし、ここでは、PublicIP追加の権限は付与しない。

-参考
--Virtual Machine Contributor – Can’t create a VM with PublicIP or Network Security Group | Toggen Technology~
https://toggen.com.au/it-tips/virtual-machine-contributor-cant-create-a-vm/

**ロール作成と付与のポイント [#q378e6e0]
-参考
--Azure VM と JIT 操作だけを許可するロール付与方法~
http://www.vwnet.jp/Windows/Azure/2020081501/AzureVmJitRole.htm

***付与 [#f27d89ff]
-「サブスクリプション → リソース・グループ → リソース」の[[スコープ>#ae75b754]]がある。

-上位に付与した権限を下位で拒否できないので、~
最小限、許可するものダケを積み重ねていく。
--上位スコープには最小限の参照系の権限を付与し、
--下位スコープには具体的作業に必要な更新系の権限を付与する。

***作成 [#w14caa07]
カスタムロールに含めるロール・アクションの探し方
-trial and error的で非効率的だが、errorからたどるのが一番確実。
-ドキュメント系は、現時点では、まだ、完全に書かれたものは少ない。

*その他 [#u15d8b09]

**サービスの場合 [#i74de7a8]

***[[Azure サービス プリンシパル]] [#b53fec12]

***[[Azure Managed ID]] [#e6c5bf60]

**[[JITロール割り当て>Azureのアクセス制御と権限#p2148b0a]] [#xae55a5b]

*参考 [#z29ebd51]
-Azure Active Directory による Azure リソースへのアクセス管理~
https://docs.microsoft.com/ja-jp/azure/active-directory/manage-access-to-azure-resources
--RBAC を使用したアクセスとアクセス許可の管理 - Azure RBAC~
https://docs.microsoft.com/ja-jp/azure/active-directory/role-based-access-control-what-is

-Azure 管理者サブスクリプション ロールを追加または変更する~
https://docs.microsoft.com/ja-jp/azure/billing/billing-add-change-azure-subscription-administrator#types-of-azure-admin-accounts
**Microsoft Docs [#d3c11fe6]

***概要 [#zfa3b6eb]
-Azure ロールベースのアクセス制御 (Azure RBAC) とは~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/overview
-従来のサブスクリプション管理者ロール、Azure ロール、および Azure AD ロール~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/rbac-and-directory-admin-roles

***ロールの定義 [#l8d5f516]
-チュートリアル : ...を使用して Azure カスタム ロールを作成する~
--[[Azure PowerShell]]~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/tutorial-custom-role-powershell
--[[Azure CLI]]~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/tutorial-custom-role-cli

-Azure リソースのアクセス権の割り当ての確認~
https://docs.microsoft.com/ja-jp/azure/active-directory/role-based-access-control-manage-assignments

-Azure リソース プロバイダーの操作~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/resource-provider-operations

***ロールの種類 [#m78cd5ca]
-Azure RBAC
--Azure 組み込みロール~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles
--Azure カスタム ロール~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles

***ロールの割当 [#z1941e30]
-Azure RBAC

--チュートリアル:Azure portal を使用して Azure~
リソースへのアクセス権をユーザーに付与する~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/quickstart-assign-role-user-portal

--を使用して Azure ロールを割り当てる

---Azure portal~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-portal
---[[Azure PowerShell]]~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-powershell
---[[Azure CLI]]~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-cli
---REST API~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-rest
---Azure Resource Manager テンプレート~
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-template

***操作方法ガイド [#y8db04f4]
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-definitions-list

-ロール定義の一覧表示
-ロールの割り当ての一覧表示
-ロールを割り当てる
-条件を追加または編集する
-ロールの割り当てを削除する
-拒否割当を一覧表示する
-カスタム ロールを作成する
-アクティビティ ログを表示する
-アクセス権を昇格する
-従来の管理者
-サブスクリプションを別のディレクトリに譲渡する
-トラブルシューティング


**その他 [#l0030995]
-ロールベースのアクセス制御のカスタム ロールを作成して Azure の内部および外部ユーザーに割り当てる~
https://docs.microsoft.com/ja-jp/azure/active-directory/role-based-access-control-create-custom-roles-for-internal-external-users

-Azure リソースの RBAC でカスタムロールを作成する – Junichi Anno's blog~
https://blogs.technet.microsoft.com/junichia/2016/12/13/azure-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE-rbac-%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B/

----
Tags: [[:インフラストラクチャ]], [[:クラウド]], [[:Azure]]
Tags: [[:セキュリティ]], [[:アカウント]], [[:クラウド]], [[:認証基盤]], [[:Azure]], [[:Active Directory]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS