ロールベースのアクセス制御 (RBAC) の設定 - カスタムロールの使用
みなさんこんにちは。Azure サポートチームの小久保です。
Microsoft Azure ではロールベース アクセス制御 (以下 RBAC) という機能を使用して、アクセスできるリソースの種類を制限したり、そのリソースに対する操作を制限することが可能です。本記事では比較的お問い合わせとして多くご質問をいただく、RBAC の設定の仕方・例についてご紹介をいたします。
- Azure ポータルでのアクセス管理の概要
https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-control-what-is/
今回は、既に Azure 内に用意されている組み込みロールではなく、ユーザー独自に作成したカスタムロール作成し、ユーザーへ適用する方法についてご紹介します。組み込みロールについては、以下のドキュメントにも記載がありますのでご参照ください。
- RBAC: 組み込みのロール
https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-built-in-roles/
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
シナリオ
今回は、以下のシナリオの手順をご紹介いたします。
ユーザー X に対して、サブスクリプションのすべてのリソースへのアクセスは行わせたいが、ストレージアカウントの作成や変更は許可したくない。
作業の流れ
- カスタムロールを定義し .json 形式 のファイルとしてローカル PC に保存します。
- 作成したカスタムロール構成ファイルをサブスクリプションに登録します。
- 権限を付与したいリソースを選択します。複数のスコープレベルで構成可能です。
(サブスクリプションレベル、リソースグループレベル、各リソースレベルのいずれか) - 登録したカスタムロールを選択します。
- 権限を付与したいユーザーを選択します。
作業手順
1. カスタムロールを定義し .json 形式 のファイルとしてローカル PC に保存します。
今回のシナリオでは、ストレージ アカウントの作成や変更を制限したいという要望を実現する為、NotActions にストレージ アカウントの write のオペレーションを入れています。また、その他のオペレーションについては、すべて許可する為 * を指定しています。以下はサンプル構成ですが "< ~ >" をご利用の環境に合わせ、適切なものに書き換えてご使用ください。
{
"Name": "<カスタムロール名>",
"IsCustom": true,
"Description": "<ロールの説明>",
"Actions": [
"*"
],
"NotActions": [
"Microsoft.Storage/storageAccounts/write"
],
"AssignableScopes": [
"/subscriptions/<サブスクリプション ID>"
]
}
各項目の詳細な説明は、以下の公開情報をご参照ください。
- Azure RBAC のカスタム ロール
https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-control-custom-roles/
Action / NotAction に指定可能なオペレーションについては、以下の Azure PowerShell コマンドで確認が可能です。
Get-AzureRmProviderOperation *
サブスクリプション ID を確認する方法は、以下の公開情報をご参照ください。
- サブスクリプション ID とデプロイ ID を確認する方法について
https://blogs.msdn.microsoft.com/dsazurejp/2013/12/06/id-id/
2. 作成したカスタムロールをサブスクリプションに登録します。
以下のコマンドを実行し、ローカル PC に保存した カスタムロールの構成 (json ファイル) を Azure に新しいカスタムロールとして登録します。
# Login
Login-AzureRmAccount
# Select Subscription
Select-AzureRmSubscription -SubscriptionId <サブスクリプション ID>
# Create Custom Role
New-AzureRmRoleDefinition -InputFile <jsonファイルへのファイルパス>
3. 権限を付与したいリソースを選択します。
手順 1 の json ファイルの [AssignableScopes] に指定したリソースを開きます。今回のテストでは、サブスクリプションを指定している為、サブスクリプションを選択します。そうすると選択したサブスクリプションのブレードが開きます。(参考: ポータルで表示される 1画面のことを「ブレード」と言います)
[すべての設定] をクリック後、[設定] ブレードにて、[ユーザー] を選択します。 (リソースグループレベル、各リソースレベルで設定したい場合は、該当の項目を選択の上、[アクセス制御 (IAM)] を選択してください。)
4. 登録したカスタムロールを選択します。
[ユーザー] ブレードの画面上部の [追加] ボタンを押下し、下記の通り [役割を選択] ブレードにて、新しく追加したカスタムロール名 (json ファイル内の Name に指定したカスタムロール名) を選択します。
5. 権限を付与したいユーザーを選択します。
[ユーザーを追加] ブレードでは、選択したロールを割り当てたいアカウントを選択・追加します。以上で設定が終われば、カスタムロールを割り当てたユーザーの追加は終了です。実際に役割を割り当てたアカウントでログインをしてみて、制限が行われているか、ご確認ください。
注意 ・ 補足事項
- RBAC の機能は、新ポータル (https://portal.azure.com) から導入された新しい機能であり、 ARM デプロイモデルでのみ使用できる機能です。クラシックポータル(https://manage.windowsazure.com)へは、RBAC で権限を付与したユーザーでアクセスは行えないので、ご注意ください。クラシックポータルをご利用になりたい場合には、クラシックポータル内で、「共同管理者」の設定を行っていただく必要があります。
- ユーザーへアクセス権限を付与できる対象 (スコープ) は、以下のレベルで設定が可能です。
- 各リソースレベル ( e.g. 仮想マシン、仮想ネットワーク)
- リソース グループレベル (設定したリソースグループ内にあるリソースに対して、設定されたロールの権限を持ちます)
- サブスクリプションレベル (設定したサブスクリプション内にあるリソースグループ、リソースに対して、設定されたロールの権限を持ちます)
- 各リソース (e.g. 仮想マシン) と サブスクリプション の両方に対してアクセス権限を付与した場合には、サブスクリプションに対するアクセス権が優先されます。
参考情報
RBAC を Azure PowerShell を使用して管理する場合には、以下をご参照ください。
- Azure PowerShell を使用したロールベースのアクセス制御の管理
https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-control-manage-access-powershell/
RBAC で、Microsoft アカウントのユーザーを招待する場合には、下記の注意事項がありますのでご留意ください。
- ロールベースアクセス制御 (RBAC) 設定時の注意事項
https://blogs.technet.microsoft.com/jpaztech/2016/09/05/rbac-setting-caution/