ロールを使用したリソース アクセスの制御

完了

Azure リソースの組み込みロール (PowerShell を使用)

Azure AD には、最も一般的なセキュリティ シナリオに対応するために、いくつかの "組み込みロール" が用意されています。 ロールがどのように機能するかを理解するために、すべてのリソースの種類に適用される次の 3 つのロールを確認しましょう。

  • 所有者。他のユーザーにアクセス許可を委任する権限を含め、すべてのリソースへのフル アクセス権を持ちます。
  • 共同作成者。Azure リソースのすべてのタイプを作成および管理できますが、他のユーザーにアクセス許可を付与することはできません。
  • 閲覧者。既存の Azure リソースを表示できます。

ロールの定義

各ロールは、JavaScript Object Notation (JSON) ファイルに定義されるプロパティのセットです。 このロールの定義には、名前ID説明 が含まれます。 また、許可される権限 (Actions)、拒否される権限 (NotActions)、およびロールのスコープ (読み取りアクセスなど) も含まれます。

所有者ロールには、すべてのアクションを意味するアスタリスク (*) が示され、拒否されるアクションはありません。すべてのスコープであるスラッシュ (/) が示されます。

この情報は、PowerShell の Get-AzRoleDefinition Owner コマンドレットを使用して取得できます。

Get-AzRoleDefinition Owner

このコードにより、次の出力が生成されます。

Name             : Owner
Id               : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
IsCustom         : False
Description      : Lets you manage everything, including access to resources.
Actions          : {*}
NotActions       : {}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

共同作成者 ロールと 閲覧者 ロールにも同じ操作を実行し、許可および拒否されるアクションを確認します。

組み込みロールを確認する

次に、他の組み込みロールをいくつか確認しましょう。

  1. Azure portal を開きます。

  2. Azure portal の ホーム ページで、[移動] の下の [リソース グループ] を選択します。

  3. リソース グループを選択します。 [リソース グループ] ペインが表示されます。

  4. 左側のメニュー ペインで、[アクセス制御 (IAM)] を選択します。 リソース グループの [アクセス制御 (IAM)] ペインが表示されます。

  5. 内部メニュー バーで、次のように [ロール] タブを選択して、使用可能なロールの一覧を表示します。

    ポータルにロールが示されるスクリーンショット。

ロールの定義とは

ロールの定義はアクセス許可のコレクションです。 ロールの定義には、実行できる操作 (読み取り、書き込み、削除 など) を列挙します。 実行できない操作または基となるデータに関連する操作を列挙することもできます。

前述のとおり、ロールの定義は次のような構造になっています。

名前 説明
Id Azure によって割り当てられた、ロールの一意識別子。
IsCustom カスタム ロールの場合は True、組み込みロールの場合は False です。
Description ロールの理解しやすい説明。
Actions [] 許可されるアクセス許可。* はすべてを示します。
NotActions [] 拒否されるアクセス許可。
DataActions [] 特定の許可されるアクセス許可で、データに適用されます (たとえば、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read)
NotDataActions [] 特定の拒否されるアクセス許可で、データに適用されます。
AssignableScopes [] このロールが適用されるスコープ。 / はグローバルを示しますが、階層構造にすることができます。

この構造は、ロールベースのアクセス制御 (RBAC) または基になる API で使用される場合、JSON で表されます。 たとえば、JSON 形式の 共同作成者 ロールの定義を次に示します。

{
  "Name": "Contributor",
  "Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "IsCustom": false,
  "Description": "Lets you manage everything except access to resources.",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "Microsoft.Authorization/*/Delete",
    "Microsoft.Authorization/*/Write",
    "Microsoft.Authorization/elevateAccess/Action"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ]
}

Actions と NotActions

Actions プロパティと NotActions プロパティを調整して、必要なアクセス許可を付与および拒否することができます。 これらのプロパティは常に {Company}.{ProviderName}/{resourceType}/{action} の形式になります。

例として、先ほど確認した 3 つのロールのアクションを次に示します。

組み込みロール Actions NotActions
所有者 (すべてのアクションを許可) * -
共同作成者 (ロールの割り当ての書き込みまたは削除を除くすべての操作を許可) * Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/*/elevateAccess/Action
閲覧者 (すべての読み取り操作を許可) */read -

Actions の下のワイルドカード (*) 操作は、このロールに割り当てられたプリンシパルがすべてのアクションを実行できることを示しています。つまり、このロールは、Azure で新しいリソースの種類を追加する際、今後定義されるアクションを含め、すべてを管理できます。 閲覧者 ロールの場合は、read アクションのみが許可されます。

NotActions 以下の操作は、Actions から除かれます。 共同作成者 ロールの場合は、NotActions によって、このロールはリソースへのアクセスの管理ができなくなり、リソースへのアクセス割り当ても削除されます。

DataActions と NotDataActions

データ操作は DataActions プロパティおよび NotDataActions プロパティで指定されます。 データ操作は、管理操作とは別に指定できます。 この結果、ワイルドカード (*) を使用した現在のロールの割り当てによって、データに思いがけなくアクセスする動作が防止されます。 DataActions および NotDataActions で指定できるデータ操作の一部を次に示します。

  • コンテナーの BLOB の一覧の読み取り
  • コンテナーのストレージ BLOB の書き込み
  • キュー内のメッセージの削除

DataActions プロパティと NotDataActions プロパティに追加できるのはデータ操作のみです。 リソース プロバイダーでは、isDataAction プロパティを true に設定して、どの操作がデータ操作であるかを指定します。 データ操作のないロールでは、ロールの定義からこれらのプロパティを省略できます。

これらのアクションの動作は、管理の従兄弟にそっくりです。 許可するアクション (すべての場合は *) を指定し、NotDataActions コレクション内で削除する特定のアクションの一覧を指定します。 いくつかの例を次に示します。リソース プロバイダーのドキュメントでアクションとデータ アクションの完全な一覧を確認できます。

データ操作 説明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete BLOB データを削除する
Microsoft.Compute/virtualMachines/login/action 通常のユーザーとして VM にログインする
Microsoft.EventHub/namespaces/messages/send/action イベント ハブでメッセージを送信する
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read ファイル/フォルダーまたはファイル/フォルダーの一覧を返す
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read キューからメッセージを読み取る

割り当て可能なスコープ

ロールを完全に実装するには、Actions プロパティと NotActions プロパティを定義するだけでは不十分です。 さらに、ロールのスコープを適切に指定する必要があります。

ロールの AssignableScopes プロパティで、ロールが割り当てに使用できるスコープ (サブスクリプション、リソース グループ、またはリソース) を指定します。 カスタム ロールは、それを必要とするサブスクリプションまたはリソース グループに割り当てを限定することにより、それ以外のサブスクリプションまたはリソース グループについては元のユーザー エクスペリエンスを保ち、不要な混乱を避けることができます。

次に例をいくつか示します。

目的 スコープの使用
サブスクリプションに制限する。 "/subscriptions/{sub-id}"
特定のサブスクリプションで特定のリソース グループに制限する。 "/subscriptions/{sub-id}/resourceGroups/{rg-name}"
特定のリソースに制限する。 "/subscriptions/{sub-id}/resourceGroups/{rg-name}/{resource-name}"
2 つのサブスクリプションの割り当てにロールを使用可能にする。 "/subscriptions/{sub-id}", "/subscriptions/{sub-id}"

ロールを作成する

Azure AD には組み込みロールが用意されており、お客様が実行したいことの 99% は網羅されているはずです。 可能な場合は、組み込みロールを使用することをお勧めします。 しかしながら、必要に応じてカスタム ロールを作成することもできます。

注意

カスタム ロールの作成には Azure AD Premium P1 または P2 が必要であり、Free レベルでは実行できません。

新しいロールの作成には、次のいくつかのメカニズムを使用できます。

  • Azure Portal。 Azure portal を使用して、[Azure Active Directory] > [ロールと管理者] > [新しいカスタム ロール] を選択して、カスタム ロールを作成できます。

  • Azure PowerShellNew-AzADMSRoleDefinition コマンドレットを使用して、新しいロールを定義できます。

  • Azure AD Graph API。 プログラムで Graph API の REST 呼び出しを使用して、新しいロールを作成できます。

まとめに、3 つのすべての方法に関するドキュメントへのリンクがあります。

自分の知識をチェックする

1.

ロール定義の Action では、何の情報が提供されますか。

2.

ロールの "スコープ" がリソース グループ myResourceGroup に設定されるのは、次のうちどれですか。

3.

NotActions はロールの定義でどのように使用されますか。