다음을 통해 공유


데이터 API 작성기에서 역할 상속

메모

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

역할 상속을 사용하면 더 광범위한 역할에 대한 권한을 한 번 정의하고 보다 구체적인 역할이 해당 액세스를 자동으로 상속할 수 있습니다. 역할 상속이 없으면 모든 엔터티의 모든 역할에 대해 동일한 권한 블록을 반복해야 합니다. 역할 상속을 사용하면 anonymous에서 한 번 액세스를 정의하고, 더 포괄적인 모든 역할에 동일한 액세스 권한이 부여됩니다.

상속 체인

상속 체인은 최소 권한에서 가장 권한이 있는 것으로 흐릅니다.

named-role → authenticated → anonymous
역할 상속받음 Notes
명명된 역할(예: 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는 요청당 정확히 하나의 유효 역할의 컨텍스트에서 사용 권한을 평가합니다. 역할 상속은 여러 역할의 권한을 결합하지 않습니다.

예제

최소 구성: 모든 역할에 대한 단일 권한

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으로부터 상속하고, supportauthenticated에 대한 액세스를 얻습니다. 예를 들어, read 또는 create.

상속 없음: 완전히 차단됨

사용 권한 블록이 없고 체인에 다른 역할이 없으면 anonymous 해당 엔터티에 대한 모든 요청이 거부됩니다.

{
  "entities": {
    "AuditLog": {
      "source": "dbo.audit_log",
      "permissions": [
        { "role": "admin", "actions": [ "read" ] }
      ]
    }
  }
}

이 구성에서 admin만이 AuditLog에 액세스할 수 있습니다. authenticatedanonymous에게는 상속할 블록이 없으므로 DAB는 403 Forbidden로부터 해당 역할의 요청을 거부합니다.

중요합니다

DAB는 authenticated 공급자가 활성 상태인 경우, 엔터티에 Unauthenticated 또는 명명된 역할이 구성되었을 때 시작할 때 경고를 내보냅니다. 활성 상태인 경우 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에 한 번 정의하면 모든 역할이 이를 상속하도록 설정합니다
인증된 사용자는 익명보다 더 많은 액세스 권한이 필요합니다. 정의 읽기anonymous, 추가authenticated 만들기/업데이트
명명된 역할에는 보다 광범위한 액세스가 필요합니다. authenticated 명명된 역할을 명시적으로 정의합니다. 다른 항목은 authenticated 에서 상속받습니다.
명명된 역할에는 보다 적은 액세스 권한이 필요합니다. authenticated 축소된 작업을 사용하여 명명된 역할을 명시적으로 정의합니다.
엔터티는 완전히 프라이빗이어야 합니다. authenticatedanonymous는 정의하지 않고 명시된 특정 역할만 부여하십시오.