次の方法で共有


データ API ビルダーでのロールの継承

このセクションで説明する 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 は要求を評価するとき、有効なロールを決定し、その後、継承チェーンを辿ってアクセス許可ブロックを見つけます。

  1. DAB は、( X-MS-API-ROLE ヘッダー、トークン要求、または既定値を使用して) 要求から有効なロールを識別します。
  2. DAB は、有効なロールと一致する明示的なアクセス許可ブロックを entities.<name>.permissions で検索します。
  3. 一致するブロックが存在しない場合、DAB はチェーン ( authenticatedanonymous) をウォークアップします。
  4. 最初に見つかった一致するブロックは、要求のアクセス許可を提供します。
  5. チェーン内のロールに一致するブロックがない場合、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以外の名前付きロール (viewersupportなど) は、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より少ないアクセス権が必要です。 制限されたアクションを使用して名前付きロールを明示的に定義する
エンティティは完全にプライベートである必要があります 特定の名前付きロールのみを付与します。 authenticatedanonymous 未定義のままにする