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