注
このセクションで説明する Data API Builder 2.0 の機能は現在プレビュー段階であり、一般公開前に変更される可能性があります。 詳細については、「 バージョン 2.0 の新機能」を参照してください。
ロールの継承を使用すると、より広範なロールに対してアクセス許可を 1 回定義し、より具体的なロールでそのアクセスを自動的に継承できます。 ロールの継承がない場合は、すべてのエンティティのすべてのロールに対して同じアクセス許可ブロックを繰り返す必要があります。 ロールの継承では、 anonymous に対するアクセスを 1 回定義し、より広範なロールごとに同じアクセス権を取得します。
継承チェーン
継承チェーンは、最小特権から最も特権の高い順に継承されます。
named-role → authenticated → anonymous
| 役割 | から継承する | メモ |
|---|---|---|
名前付きロール (たとえば、 editor) |
authenticated |
または、anonymousが構成されていない場合はauthenticatedから |
authenticated |
anonymous |
明示的な authenticated ブロックが存在しない場合に適用されます |
anonymous |
(なし) | チェーンの基盤、代替なし |
チェーンは次のことを意味します。
-
名前付きロールにアクセス許可ブロックがない場合、DAB は
authenticatedブロックを検索します。 存在しない場合は、anonymousにフォールバックします。 -
authenticatedにアクセス許可ブロックがない場合、DAB はanonymousブロックを使用します。 -
anonymousにアクセス許可ブロックがない場合、要求は403 Forbiddenで拒否されます。
継承の解決方法
DAB は要求を評価するとき、有効なロールを決定し、その後、継承チェーンを辿ってアクセス許可ブロックを見つけます。
- DAB は、(
X-MS-API-ROLEヘッダー、トークン要求、または既定値を使用して) 要求から有効なロールを識別します。 - DAB は、有効なロールと一致する明示的なアクセス許可ブロックを
entities.<name>.permissionsで検索します。 - 一致するブロックが存在しない場合、DAB はチェーン (
authenticated→anonymous) をウォークアップします。 - 最初に見つかった一致するブロックは、要求のアクセス許可を提供します。
- チェーン内のロールに一致するブロックがない場合、DAB は
403 Forbiddenを返します。
注
DAB は、要求ごとに 1 つの有効なロールのコンテキストでアクセス許可を評価します。 ロールの継承では、複数のロールからのアクセス許可は結合されません。
例示
最小構成: すべてのロールに対する単一のアクセス許可
readに対するanonymous権限を定義します。 すべてのロール (authenticated および任意の名前付きロール) は、そのアクセス権を継承します。
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
この構成に対する有効なアクセス許可:
Entity: Book
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles | Inherit from: anonymous
階層化された構成: ロールごとに異なるアクセス
ロールごとに異なるアクセス レベルが必要な場合は、それぞれを明示的に定義します。 あなたが構成していないロールは継承によって補完されます。
{
"entities": {
"Order": {
"source": "dbo.orders",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] },
{ "role": "authenticated", "actions": [ "read", "create" ] },
{ "role": "admin", "actions": [ "*" ] }
]
}
}
}
この構成に対する有効なアクセス許可:
Entity: Order
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read, Create
Role: admin | Actions: Create, Read, Update, Delete
Unconfigured roles | Inherit from: authenticated
admin以外の名前付きロール (viewerやsupportなど) は、authenticatedから継承され、readおよびcreateアクセスを取得します。
継承なし: 完全にブロック
anonymousにアクセス許可ブロックがなく、チェーン内の他のロールに 1 つもない場合、そのエンティティに対するすべての要求は拒否されます。
{
"entities": {
"AuditLog": {
"source": "dbo.audit_log",
"permissions": [
{ "role": "admin", "actions": [ "read" ] }
]
}
}
}
この構成では、 admin のみが AuditLogにアクセスできます。
authenticated
anonymous継承するブロックがないため、DAB は、403 Forbiddenを持つこれらのロールからの要求を拒否します。
Important
authenticated または名前付きロールがエンティティで構成されており、Unauthenticated プロバイダーがアクティブな場合、DAB は起動時に警告を出力します。
Unauthenticatedがアクティブな場合、それらのロールはアクティブになりません。 詳細については、「 認証されていないプロバイダーの構成」を参照してください。
有効なアクセス許可を表示する
dab configure --show-effective-permissions を使用して、各エンティティの解決済みのアクセス許可を表示します。これには、どのロールがどのロールから継承されたかも含まれます。 このコマンドは、エンジンを実行せずに継承が期待どおりに動作していることを確認する最速の方法です。
dab configure --show-effective-permissions
特定の構成ファイルを対象にすることもできます。
dab configure --show-effective-permissions --config my-config.json
出力例:
Entity: Book
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles inherit from: anonymous
Entity: Order
Role: admin | Actions: Create, Read, Update, Delete
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles inherit from: authenticated
完全なオプションについては、 --show-effective-permissionsを参照してください。
継承と明示的なアクセス許可
| シナリオ | レコメンデーション |
|---|---|
| すべてのロールが同じアクセス権を持つ必要がある |
anonymousで 1 回定義し、すべてのロールを継承させる |
| 認証されたユーザーには、匿名よりも多くのアクセス権が必要です | 読み取り anonymous 定義し、作成/更新 authenticated 追加する |
名前が付けられたロールには、authenticated よりも広範なアクセス権が必要です。 |
名前付きロールを明示的に定義します。他のロールはauthenticatedから継承します。 |
名前付きロールはauthenticatedより少ないアクセス権が必要です。 |
制限されたアクションを使用して名前付きロールを明示的に定義する |
| エンティティは完全にプライベートである必要があります | 特定の名前付きロールのみを付与します。 authenticated と anonymous 未定義のままにする |