属性ベースのアクセス制御 (ABAC) は、セキュリティ プリンシパル、リソース、アクセス要求の環境に関連付けられている属性に基づいてアクセスを定義する認可システムです。 ABAC を使用すると、属性に基づいてリソースへのアクセス権をセキュリティ プリンシパルに付与できます。 Azure ABAC は、Azure 用の ABAC の実装を指します。
ロールの割り当て条件とは
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure リソースへのアクセス権を持つユーザー、それらのリソースに対して実行できること、アクセスできる領域を管理するのに役立つ承認システムです。 ほとんどの場合、Azure RBAC はロールの定義とロールの割り当てを使用して必要なアクセス管理を提供します。 ただし、場合によっては、よりきめ細かなアクセス管理を提供したり、数百のロール割り当ての管理を簡略化したりできます。
Azure ABAC は、Azure RBAC を基盤としたものであり、特定のアクションのコンテキストにおける属性に基づいたロールの割り当て条件を追加することにより構築されます。 ロールの割り当て条件は、必要に応じてロールの割り当てに追加して、よりきめ細かなアクセス制御を提供できる追加のチェックです。 条件は、ロール定義やロールの割り当てに含まれる権限をフィルターします。 たとえば、オブジェクトを読み取るために特定のタグを持っている必要があるという条件を追加できます。 条件を使用して特定のリソースに対するアクセスを明示的に拒否することはできません。
Azure RBAC と Azure ABAC を併用すると、両方のアクセス制御モデルの利点が統合されます。 Azure RBAC はビジネス ロジックと密接に連携しているため実装が簡単ですが、Azure ABAC では一部の主要なシナリオで柔軟性が向上します。 これら 2 つの方法を組み合わせることで、組織はより高度なレベルの承認を実現できます。
条件を使用する理由
ロールの割り当て条件を使用する主な利点は 3 つあります。
- よりきめ細かなアクセス制御を提供 する - ロールの割り当てでは、アクションとデータ アクションを含むロール定義を使用して、セキュリティ プリンシパルのアクセス許可を付与します。 これらのアクセス許可をフィルターで絞り込んで、よりきめ細かなアクセス制御を行う条件を記述できます。 特定のアクションに条件を追加することもできます。 たとえば、サブスクリプション内の BLOB に対する読み取りアクセス権を John に付与できるのは、BLOB が Project=Blue としてタグ付けされている場合のみです。
- ロールの割り当ての数を減らすのに役立ちます 。現在、各 Azure サブスクリプションにはロールの割り当ての制限があります。 何千ものロールの割り当てが必要になるシナリオがあります。 これらのロールの割り当ては、すべて管理する必要があります。 これらのシナリオでは、ロールの割り当てを大幅に減らすための条件を追加することができます。
- 特定のビジネス上の意味を持つ属性を使用 する - 条件を使用すると、アクセス制御で特定のビジネス上の意味を持つ属性を使用できます。 属性の例としては、プロジェクト名、ソフトウェア開発ステージ、分類レベルがあります。 これらのリソース属性の値は動的であり、ユーザーがチームやプロジェクト間を移動するにつれて変化します。
条件のシナリオ例
ロールの割り当てに条件を追加するシナリオがいくつかあります。 いくつかの例を次に示します。
- タグ Project=Cascade が設定されている BLOB に対する読み取りアクセス
- 新しい BLOB には、Project=Cascade タグを含める必要があります
- 既存の BLOB には、少なくとも 1 つのプロジェクト キーまたはプログラム キーでタグ付けする必要があります
- 既存の BLOB には、Project キーと Cascade、Baker、または Skagit の値でタグ付けする必要があります
- blobs-example-container という名前のコンテナー内の BLOB の読み取り、書き込み、または削除
- blobs-example-container という名前のコンテナーにあり、かつ readonly というパスの BLOB に対する読み取りアクセス
- uploads/contoso のパスを持つ Contosocorp という名前のコンテナー内の BLOB への書き込みアクセス
- タグ Program=Alpine と、logs というパスが設定されている BLOB に対する読み取りアクセス
- タグ Project=Baker が設定されていて、ユーザーが一致する属性 Project=Baker を持つ BLOB への読み取りアクセス
- 特定の日付または時間範囲での BLOB への読み取りアクセス。
- プライベート リンク経由または特定のサブネットからのみ BLOB へのアクセスを書き込みます。
これらの例を作成する方法の詳細については、「 Blob Storage の Azure ロール割り当て条件の例」を参照してください。
条件を追加できる場所
現時点では、 BLOB ストレージまたはキュー ストレージ データ アクションを持つ組み込みロールまたはカスタム ロールの割り当てに条件を追加できます。 条件は、ロールの割り当てと同じスコープで追加されます。 ロールの割り当てと同様に、条件を追加するには Microsoft.Authorization/roleAssignments/write
アクセス許可が必要です。
条件で使用できる BLOB ストレージ属性 の一部を次に示します。
- アカウント名
- BLOB インデックス タグ
- BLOB パス
- BLOB プレフィックス
- コンテナー名
- 暗号化スコープ名
- 現在のバージョンかどうか
- 階層型名前空間は有効か
- Is private link (プライベート リンクかどうか)
- スナップショット
- 現在の UTC (世界協定時刻の現在の日付と時刻)
- バージョン ID
条件はどのように表示されますか?
新規または既存のロールの割り当てに条件を追加できます。 リソース グループ スコープで Chandra という名前のユーザーに割り当てられている ストレージ BLOB データ閲覧者 ロールを次に示します。 また、Project=Cascade タグを持つ BLOB への読み取りアクセスのみを許可する条件も追加されました。
Chandra が Project=Cascade タグなしで BLOB を読み取ろうとした場合、アクセスは許可されません。
Azure portal での条件を次に示します。
コード内の条件を次に示します。
(
(
!(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 ロールの割り当て条件の形式と構文に関するページを参照してください。
条件機能の状態
次の表に、条件機能の状態を示します。
特徴 | ステータス | 日付 |
---|---|---|
条件で環境属性を使用する | ジョージア州 (GA) | 2024 年 4 月 |
Azure portal で条件エディターを使用して条件を追加する | ジョージア州 (GA) | 2022 年 10 月 |
Azure PowerShell、AzureCLI、または 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 の実装を参照します。 |
ロールの割り当て条件 | ロール割り当てに任意で追加することで、よりきめ細かなアクセス制御を提供するための追加チェックです。 |
属性 | このコンテキストでは、Project=Blue などのキーと値のペアです。Project は属性キー、青は属性値です。 属性とタグは、アクセス制御の目的で同義です。 |
式 (expression) | true または false と評価される条件のステートメント。 式の形式は、 <attribute><operator><value> です。 |
制限
条件の制限の一部を次に示します。
リソース | 極限 | 注記 |
---|---|---|
ビジュアル エディターを使用した条件ごとの式の数 | 5 | コード エディターを使用して、5 つ以上の式を追加できます |
既知の問題
条件に関する既知の問題を次に示します。
- Microsoft Entra Privileged Identity Management (PIM) と カスタム セキュリティ属性を使用している場合、条件を追加するときに プリンシパル は 属性ソース に表示されません。