Azure の属性ベースのアクセス制御 (Azure ABAC) とは

属性ベースのアクセス制御 (ABAC) は、セキュリティ プリンシパル、リソース、アクセス要求の環境に関連付けられている属性に基づいてアクセスを定義する認可システムです。 ABAC を使用すると、属性に基づいてセキュリティ プリンシパルにリソースへのアクセス権を付与できます。 Azure ABAC は、Azure 向けに実装された ABAC を指します。

ロールの割り当て条件とは

Azure のロールベースのアクセス制御 (Azure RBAC) は、Azure リソースにアクセスできるユーザー、そのユーザーがそれらのリソースに対して実行できること、そのユーザーがアクセスできる領域を管理するのに役立つ認可システムです。 ほとんどの場合、Azure RBAC でロールの定義とロールの割り当てを使用すれば、必要なアクセス管理を実現できます。 ただし、一部の例では、よりきめ細かいアクセス管理を提供したり、数百のロール割り当ての管理を簡略化したりするとよい場合があるでしょう。

Azure ABAC は、Azure RBAC を基盤としたものであり、特定のアクションのコンテキストにおける属性に基づいたロールの割り当て条件を追加することにより構築されます。 ロールの割り当て条件は、ロールの割り当てに追加することによってさらにきめ細かなアクセス制御を可能にする確認のしくみの 1 つです。 条件は、ロールの定義とロールの割り当ての一環として付与されたアクセス許可を絞り込むものです。 たとえば、特定のタグが設定されたオブジェクトしか読み取れない、という条件を設定できます。 条件を使用して特定のリソースに対するアクセスを明示的に拒否することはできません。

条件を使用する理由

ロールの割り当て条件を使用する利点は主に 3 つあります。

  • さらにきめ細かなアクセス制御を実現する - ロールの割り当てでは、アクションやデータ アクションを使ったロールの定義を使用して、セキュリティ プリンシパルにアクセス許可を付与します。 条件を使うと、このようなアクセス許可を絞り込み、さらにきめ細かなアクセス制御を実現できます。 このほか、特定のアクションに条件を追加することもできます。 たとえば、自分のサブスクリプションにある BLOB のうち、Project=Blue というタグが設定されているものだけについて、John という人物にアクセス権を付与することができます。
  • ロールの割り当ての件数を減らす - Azure サブスクリプションには、ロールの割り当ての上限が定められています。 シナリオによっては、ロールの割り当てが何千件も必要になることがあります。 そのようなロールの割り当てはいずれも、管理が必要です。 このようなシナリオでは、条件を追加することによって使用するロールの割り当てを大幅に減らせる可能性があります。
  • ビジネスにおいて特定の意味を持つ属性を使用する - 条件を使うと、ビジネスにおいて特定の意味を持つ属性をアクセス制御に利用できます。 属性の例としては、プロジェクト名、ソフトウェアの開発段階、分類レベルなどがあります。 これらのリソース属性の値は動的なものであり、ユーザーが所属するチームやプロジェクトが変わるのに応じて変化します。

条件のシナリオ例

ロールの割り当てに条件を追加するシナリオをいくつか紹介します。 次に例をいくつか示します。

  • タグ Project=Cascade が設定されている BLOB に対する読み取りアクセス
  • 新しい BLOB にタグ Project=Cascade を設定する必要がある
  • 既存の BLOB に、Project キーまたは Program キーのタグを少なくとも 1 つ設定しておく必要がある
  • 既存の BLOB に、Project キーのほかに Cascade、Baker、または Skagit の値のタグを設定しておく必要がある
  • blobs-example-container という名前のコンテナーにある BLOB の読み取り、書き込み、または削除
  • blobs-example-container という名前のコンテナーにあり、かつ readonly というパスの BLOB に対する読み取りアクセス
  • Contosocorp という名前のコンテナーにあり、かつ uploads/contoso というパスの BLOB に対する書き込みアクセス
  • タグ Program=Alpine と、logs というパスが設定されている BLOB に対する読み取りアクセス
  • タグ Project=Baker が設定されていて、ユーザーが一致する属性 Project=Baker を持つ BLOB への読み取りアクセス
  • 特定の日付または時間範囲での BLOB への読み取りアクセス。
  • プライベート リンク経由または特定のサブネットからのみの BLOB への書き込みアクセス。

ここに挙げた例の作成方法の詳細については、「Blob Storage の Azure ロールの割り当て条件の例」を参照してください。

条件を追加できる場所

現在条件を追加できるのは、BLOB ストレージまたはキュー ストレージ データ アクションがある、組み込みまたはカスタムのロール割り当てです。 条件が追加されるのは、ロールの割り当てと同じスコープです。 条件を追加するには、ロールの割り当てと同じく Microsoft.Authorization/roleAssignments/write のアクセス許可が必要です。

条件で使用できる Blob Storage の属性の例を次に示します。

  • アカウント名
  • BLOB インデックス タグ
  • BLOB パス
  • BLOB プレフィックス
  • コンテナー名
  • 暗号化スコープ名
  • 現在のバージョンかどうか
  • 階層型名前空間は有効か
  • プライベート リンクかどうか
  • スナップショット
  • 現在の UTC (協定世界時による現在の日付と時刻)
  • バージョン ID

条件の外観

条件は、新規または既存のロールの割り当てに追加できます。 ここでは、ストレージ BLOB データ閲覧者ロールが、リソース グループのスコープ内の Chandra というユーザーに割り当てられています。 また、タグ Project=Cascade が設定されている BLOB に対する読み取りアクセスのみを許可する条件が追加されています。

Diagram of role assignment with a condition.

Chandra が Project=Cascade タグの設定されていない BLOB を読み取ろうとしても、アクセスが許可されません。

Diagram of access is not allowed with a condition.

条件は、Azure portal で次のように表示されます。

Screenshot of condition editor in Azure portal showing build expression section with values for blob index tags.

条件をコードで示すと、次のようになります。

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
        AND NOT
        SubOperationMatches{'Blob.List'})
    )
    OR
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'
    )
)

条件の形式の詳細については、「Azure のロールの割り当て条件の形式と構文」を参照してください。

条件機能の状態

条件機能の一部はまだプレビュー段階です。 次の表に、条件機能の状態を示します。

機能 Status 日付
条件に環境属性を使用する プレビュー 2023 年 4 月
Azure portal の条件エディターを使用して条件を追加する GA 2022 年 10 月
Azure PowerShellAzure CLI、または REST API を使用して条件を追加する GA 2022 年 10 月
Azure ストレージ リソース、アクセス属性の種類、ストレージ アカウントのパフォーマンス レベルの特定の組み合わせには、リソース属性と要求属性を使用します。 詳細については、「Azure Storage の条件機能の状態」を参照してください。 GA 2022 年 10 月
条件のプリンシパルにカスタム セキュリティ属性を使用する GA 2023 年 11 月

条件と Microsoft Entra PIM

Azure リソースの Microsoft Entra Privileged Identity Management (Microsoft Entra PIM) を使用して、対象となるロールの割り当てに条件を追加することもできます。 Microsoft Entra PIM を使用する場合、エンド ユーザーは、対象となるロールの割り当てをアクティブ化して、特定のアクションを実行するためのアクセス許可を取得する必要があります。 Microsoft Entra PIM で条件を使用すると、詳細な条件を使用してリソースへのユーザーのアクセスを制限できるだけでなく、Microsoft Entra PIM を使用して、期限付きの設定、承認ワークフロー、監査証跡などでそれを保護することもできます。 詳細については、「Privileged Identity Management で Azure リソース ロールを割り当てる」を参照してください。

用語

用語の一覧です。Azure RBAC と Azure ABAC について理解を深めたいときは、適宜ここに戻って参照してください。

期間 定義
属性ベースのアクセス制御 (ABAC) セキュリティ プリンシパル、リソース、環境に関連付けられている属性に基づいてアクセスを定義する認可システムです。 ABAC を使用すると、属性に基づいてセキュリティ プリンシパルにリソースへのアクセス権を付与できます。
Azure ABAC Azure 向けに実装された ABAC を指します。
ロールの割り当て条件 ロールの割り当てに追加することによってさらにきめ細かなアクセス制御を可能にする確認のしくみの 1 つです。
属性 (attribute) このコンテキストでは、Project=Blue などのキーと値のペアです。Project が属性キー、Blue が属性値です。 属性とタグは、アクセス制御に関しては同義です。
expression 条件の中にあって true と false のいずれかの評価結果を出すステートメントです。 式の形式は、<属性><演算子><値> です。

制限

条件に関するいくつかの制限を次に示します。

リソース 制限 Notes
条件ごとの式の数 (ビジュアル エディター使用時) 5 5 つを超える式は、コード エディターを使用して追加できます

既知の問題

条件に関する既知の問題を次に示します。

  • Microsoft Entra Privileged Identity Management (PIM) とカスタム セキュリティ属性を使用している場合は、条件の追加時に [プリンシパル][属性ソース] に表示されません。

次のステップ