Power BI Embedded를 사용하는 행 수준 보안Row-level security with Power BI Embedded

RLS(행 수준 보안) 를 사용하여 대시보드, 타일, 보고서 및 데이터 세트 내 데이터에 대한 사용자 액세스를 제한할 수 있습니다.Row-level security (RLS) can be used to restrict user access to data within dashboards, tiles, reports, and datasets. 여러 사용자가 다른 데이터를 보면서 동일한 아티팩트로 작업할 수 있습니다.Different users can work with those same artifacts all while seeing different data. RLS 포함이 지원됩니다.Embedding supports RLS.

일반적으로 ISV 시나리오인 Power BI 비사용자(앱 소유 데이터)에 포함되는 경우 이 문서를 참조하세요.If you're embedding for non-Power BI users (app owns data), which is typically an ISV scenario, then this article is for you! 사용자 및 역할을 설명하기 위해 포함 토큰을 구성합니다.Configure the embed token to account for the user and role.

조직 내에서 Power BI 사용자(사용자 소유 데이터)에 포함되는 경우 RLS는 Power BI 서비스 내에서와 마찬가지로 직접 작동합니다.If you're embedding to Power BI users (user owns data), within your organization, RLS works the same as it does within the Power BI service directly. 애플리케이션에서 추가로 수행해야 하는 작업은 없습니다.There's nothing more you need to do in your application. 자세한 내용은 Power BI에서 RLS(행 수준 보안)를 참조하세요.For more information, see Row-Level security (RLS) with Power BI.

행 수준 보안과 관련된 항목입니다.

RLS를 활용하려면 세 가지 주요 개념인 사용자, 역할 및 규칙을 이해해야 합니다.To take advantage of RLS, it's important you understand three main concepts; Users, Roles, and Rules. 해당 개념에 대해 더 자세히 살펴보겠습니다.Let's take a closer look at these concepts:

사용자 – 아티팩트(대시보드, 타일, 보고서 또는 데이터 세트)를 보는 최종 사용자입니다.Users – End users viewing the artifact (dashboard, tile, report, or dataset). 사용자는 Power BI Embedded에서 포함된 토큰에 있는 사용자 이름 속성에 의해 식별됩니다.In Power BI Embedded, users are identified by the username property in an embed token.

역할 - 사용자 역할에 속합니다.Roles – Users belong to roles. 역할은 규칙에 대한 컨테이너로써 판매 관리자 또는 영업 담당자와 같은 이름을 지정할 수 있습니다. Power BI Desktop 내에서 역할을 만듭니다.A role is a container for rules and can be named something like Sales Manager or Sales Rep. You create roles within Power BI Desktop. 자세한 내용은 Power BI Desktop에서 RLS(행 수준 보안)을 참조하세요.For more information, see Row-level security (RLS) with Power BI Desktop.

규칙 – 역할에는 규칙이 있고 이러한 규칙은 데이터에 적용되는 실제 필터입니다.Rules – Roles have rules, and those rules are the actual filters that are going to be applied to the data. 규칙은 “국가 = 미국”처럼 간단하거나 훨씬 동적일 수 있습니다.The rules could be as simple as "Country = USA" or something much more dynamic. 이 문서의 나머지 부분에는 RLS를 작성하고 포함된 애플리케이션 내에서 사용하는 예제가 있습니다.For the rest of this article, there's an example of authoring RLS, and then consuming that within an embedded application. 예제에서는 소매점 분석 샘플 PBIX 파일을 사용합니다.Our example uses the Retail Analysis Sample PBIX file.

보고서 예제

Power BI Desktop에서 규칙 추가Adding roles with Power BI Desktop

소매점 분석 샘플에서는 소매 체인에 있는 모든 상점의 판매량을 보여줍니다.Our Retail Analysis sample shows sales for all the stores in a retail chain. RLS를 사용하지 않으면 어떤 구역 관리자가 로그인하고 보고서를 보는지에 상관없이 동일한 데이터가 표시됩니다.Without RLS, no matter which district manager signs in and views the report, they all see the same data. 고위 경영진은 각 지역 관리자가 자신이 관리하는 매장의 매출만 볼 수 있어야 한다고 결정했습니다.Senior management has determined each district manager should only see the sales for the stores they manage. 고위 경영진은 RLS를 사용하여 지역 관리자를 기준으로 데이터를 제한할 수 있습니다.Using RLS allows Senior management to restrict data based on a district manager.

RLS는 Power BI Desktop에서 작성됩니다.RLS is authored in Power BI Desktop. 데이터 세트 및 보고서를 열 때 스키마를 보려면 다이어그램 뷰로 전환할 수 있습니다.When the dataset and report are opened, we can switch to diagram view to see the schema:

Power BI Desktop 내에서 다이어그램 보기

이 스키마에서 기억해야 할 몇 가지 사항은 다음과 같습입니다.Here are a few things to notice with this schema:

  • Total Sales과 같은 모든 측정값 Sales 팩트 테이블에 저장됩니다.All measures, like Total Sales, are stored in the Sales fact table.

  • 관련 추가 차원 테이블에는 Item, Time, StoreDistrict이라는 네 가지 항목이 있습니다.There are four additional related dimension tables: Item, Time, Store, and District.

  • 관계선의 화살표는 필터가 테이블 간에 이동할 수 있는 방식을 나타냅니다.The arrows on the relationship lines indicate which way filters can flow from one table to another. 예를 들어, 필터가 Time[Date] 에 배치되면 현재 스키마에서는 Sales 테이블에 있는 값만을 필터링합니다.For example, if a filter is placed on Time[Date], in the current schema it would only filter down values in the Sales table. 관계선에 있는 모든 화살표가 다른 방향이 아닌 판매 테이블을 가리키기 때문에 다른 테이블은 이 필터의 영향을 받지 않습니다.No other tables are affected by this filter since all the arrows on the relationship lines point to the sales table and not away.

  • District 테이블은 각 지역에 있는 관리자를 나타냅니다.The District table indicates who the manager is for each district:

    구역 테이블 내의 행

이 스키마에 따라 District 테이블의 District Manager 열에 필터를 적용하는 경우 및 해당 필터가 보고서를 보는 사용자와 일치하는 경우 해당 필터는 StoreSales 테이블을 필터링하여 해당 지역 관리자에게 데이터를 표시합니다.Based on this schema, if we apply a filter to the District Manager column in the District table, and if that filter matches the user viewing the report, that filter down the Store and Sales tables to show data for that district manager.

방법은 다음과 같습니다.Here's how:

  1. 모델링 탭에서 역할 관리를 선택합니다.On the Modeling tab, select Manage Roles.

    Power BI Desktop 내의 모델링 탭

  2. 관리자라는 새 역할을 만듭니다.Create a new role called Manager.

    새 역할 만들기

  3. District 테이블에서 다음의 DAX 식을 입력합니다. [District Manager] = USERNAME()In the District table, enter this DAX expression: [District Manager] = USERNAME().

    RLS 규칙의 DAX 문

  4. 규칙이 작동하는지 확인하려면 모델링 탭에서 역할로 보기를 선택하고 앞서 만든 관리자 역할과 함께 다른 사용자를 선택합니다.To make sure the rules are working, on the Modeling tab, select View as Roles, and then select both the Manager role you created, along with Other users. AndrewMa를 사용자로 입력합니다.Enter AndrewMa for the user.

    역할 대화 상자로 보기

    보고서에 AndrewMa로 로그인한 경우처럼 데이터가 표시됩니다.The reports show data as if you're signed in as AndrewMa.

필터링을 적용하면 여기에서 수행한 방식으로 District, StoreSales 테이블에서 모든 레코드를 필터링합니다.Applying the filter, the way we did here, filters down all records in the District, Store, and Sales tables. 그러나 SalesTime 간 관계의 필터 방향으로 인해 SalesItemItemTime 테이블이 필터링되지 않습니다.However, because of the filter direction on the relationships between Sales and Time, Sales and Item, and Item and Time tables aren't filtered down. 양방향 교차 필터링에 대한 자세한 내용은 SQL Server Analysis Services 2016 및 Power BI Desktop에서 양방향 교차 필터링 백서를 다운로드합니다.To learn more about bidirectional cross-filtering, download the Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop whitepaper.

포함된 토큰에 사용자 및 역할 적용Applying user and role to an embed token

이제 Power BI Desktop 역할을 구성했으므로 역할을 활용하기 위해 애플리케이션에서 몇 가지 작업을 수행해야 합니다.Now that you have your Power BI Desktop roles configured, some more work needs to be done in your application to take advantage of the roles.

사용자가 애플리케이션에 의해 인증되고 권한을 부여 받고 포함된 토큰을 사용하여 특정 Power BI Embedded 보고서에 대한 사용자 액세스 권한을 부여합니다.Users are authenticated and authorized by your application and embed tokens are used to grant a user access to a specific Power BI Embedded report. Power BI Embedded에는 사용자에 대한 특정 정보가 없습니다.Power BI Embedded doesn't have any specific information on who your user is. RLS가 작동하려면 ID 양식에서 포함 토큰의 일부로 몇 가지 추가 컨텍스트를 통과해야 합니다.For RLS to work, you need to pass some additional context as part of your embed token in the form of identities. 포함 토큰 API를 사용하여 ID를 전달할 수 있습니다.You can pass the identities by using the Embed Token API.

API는 관련 데이터 세트가 표시된 ID 목록을 수락합니다.The API accepts a list of identities with indication of the relevant datasets. RLS를 실행하려면 ID의 일부로 다음 내용을 전달해야 합니다.For RLS to work, you need to pass the below pieces as part of the identity.

  • 사용자 이름(필수) – RLS 규칙을 적용할 때 사용자를 식별하는 데 사용할 수 있는 문자열입니다.username (mandatory) – A string that can be used to help identify the user when applying RLS rules. 단일 사용자만 나열할 수 있습니다.Only a single user can be listed. 사용자 이름은 ASCII 문자로 만들 수 있습니다.Your username can be created with ASCII characters.
  • 역할(필수) – 행 수준 보안 규칙을 적용할 때 선택하는 역할을 포함하는 문자열입니다.roles (mandatory) – A string containing the roles to select when applying Row Level Security rules. 둘 이상의 역할을 전달하는 경우 문자열 배열로 전달되어야 합니다.If passing more than one role, they should be passed as a string array.
  • 데이터 세트(필수) - 포함하는 아티팩트에 적용할 수 있는 데이터 집합입니다.dataset (mandatory) – The dataset that is applicable for the artifact you're embedding.

PowerBIClient.Reports에서 GenerateTokenInGroup 메서드를 사용하여 포함된 토큰을 만들 수 있습니다.You can create the embed token by using the GenerateTokenInGroup method on PowerBIClient.Reports.

예를 들어 PowerBIEmbedded_AppOwnsData 샘플을 변경할 수 있습니다.For example, you could change the PowerBIEmbedded_AppOwnsData sample. Services\EmbedService.cs 줄 76 및 77은 다음에서 업데이트할 수 있습니다.Services\EmbedService.cs line 76 and 77 could be updated from:

// Generate Embed Token.
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");

var tokenResponse = await client.Reports.GenerateTokenInGroupAsync(GroupId, report.Id, generateTokenRequestParameters);

toto

var generateTokenRequestParameters = new GenerateTokenRequest("View", null, identities: new List<EffectiveIdentity> { new EffectiveIdentity(username: "username", roles: new List<string> { "roleA", "roleB" }, datasets: new List<string> { "datasetId" }) });

var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("groupId", "reportId", generateTokenRequestParameters);

이제 REST API를 호출하는 경우 업데이트된 API는 identities라는 추가 JSON 배열을 수용하고 사용자 이름, 문자열 역할 목록 및 문자열 데이터 세트 목록을 포함합니다.If you're calling the REST API, the updated API now accepts an additional JSON array, named identities, containing a username, list of string roles and list of string datasets.

다음 코드를 예제로 사용하세요.Use the following code below as an example:

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "EffectiveIdentity",
            "roles": [ "Role1", "Role2" ],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

이제 모든 작업을 함께 수행하여 사용자가 이 아티팩트를 보기 위해 애플리케이션에 로그인할 경우 행 수준 보안에 정의된 대로 보도록 허용된 데이터만을 볼 수 있습니다.Now, with all the pieces together, when someone logs into your application to view this artifact, they'll only see the data that they're allowed to see, as defined by our row-level security.

Analysis Services 라이브 연결 사용Working with Analysis Services live connections

행 수준 보안은 온-프레미스 서버에 대해 Analysis Services 라이브 연결에서 사용할 수 있습니다.Row-level security can be used with Analysis Services live connections for on-premises servers. 이러한 종류의 연결을 사용하는 경우 이해해야 하는 몇 가지 특정 개념이 있습니다.There are a few specific concepts that you should understand when using this type of connection.

사용자 이름 속성에 제공되는 유효한 ID는 Analysis Services 서버에 대한 사용 권한이 있는 Windows 사용자여야 합니다.The effective identity that is provided for the username property must be a Windows user with permissions on the Analysis Services server.

참고

Azure Analysis Services 데이터 원본과 함께 서비스 주체를 사용하는 경우 서비스 주체 자체에 Azure Analysis Services 인스턴스 권한이 있어야 합니다.When using service principal with an Azure Analysis Services data source, the service principal itself must have an Azure Analysis Services instance permissions. 서비스 주체가 포함된 보안 그룹을 이 목적으로 사용할 수는 없습니다.Using a security group that contains the service principal for this purpose, doesn't work.

온-프레미스 데이터 게이트웨이 구성On-premises data gateway configuration

온-프레미스 데이터 게이트웨이는 Analysis Services 라이브 연결을 사용할 경우에 사용됩니다.An On-premises data gateway is used when working with Analysis Services live connections. 나열된 ID를 사용하여 embed 토큰을 생성할 경우 마스터 계정은 게이트웨이의 관리자로 나열되어야 합니다.When generating an embed token, with an identity listed, the master account needs to be listed as an admin of the gateway. 마스터 계정이 나열되지 않으면 행 수준 보안이 데이터 속성에 적용되지 않습니다.If the master account isn't listed, the row-level security isn't applied to the property of the data. 게이트웨이 관리자 이외의 역할을 제공할 수 있지만 유효한 ID에 대한 고유한 사용자 이름을 지정해야 합니다.A non-admin of the gateway can provide roles, but must specify its own username for the effective identity.

역할 사용Use of roles

역할은 embed 토큰의 ID로 제공할 수 있습니다.Roles can be provided with the identity in an embed token. 역할이 제공되지 않은 경우 제공된 사용자 이름을 사용하여 관련 역할을 확인할 수 있습니다.If no role is provided, the username that was provided can be used to resolve the associated roles.

CustomData 기능 사용Using the CustomData feature

CustomData 기능은 Azure Analysis Services에 상주하는 모델에 대해서만 작동하고 라이브 연결 모드에서만 작동합니다.The CustomData feature only works for models that lie in Azure Analysis Services, and it only works in Connect live mode. 사용자 및 역할과 달리 .pbix 파일 내에 사용자 지정 데이터 기능을 설정할 수 없습니다.Unlike users and roles, the Custom data feature can't be set inside a .pbix file. 사용자 지정 데이터 기능을 사용하여 토큰을 생성할 때 사용자 이름이 필요합니다.When generating a token with the Custom data feature, you need to have a username.

CustomData 기능을 사용하면 Azure Analysis Services를 데이터 원본으로 사용하여 애플리케이션에서 Power BI 데이터를 볼 때(애플리케이션의 Azure Analysis Services에 연결된 Power BI 데이터 보기) 행 필터를 추가할 수 있습니다.The CustomData feature allows you to add a Row filter when viewing Power BI data in your application when using Azure Analysis Services as your data source (viewing Power BI data connected to Azure Analysis Services in your application).

CustomData 기능을 사용하면 CustomData 연결 문자열 속성을 사용하여 일반 텍스트(문자열)를 전달할 수 있습니다.The CustomData feature allows passing free text (string) using the CustomData connection string property. Analysis Services는 CUSTOMDATA() 함수를 통해 이 값을 사용합니다.Analysis Services uses this value via the CUSTOMDATA() function.

Azure Analysis Services에서 동적 RLS(필터 평가에 동적 값을 사용)를 사용하는 유일한 방법은 CUSTOMDATA() 함수를 사용하는 것입니다.The only way to have dynamic RLS (which uses dynamic values for filter evaluation) in Azure Analysis Services, is using the CUSTOMDATA() function.

역할 DAX 쿼리 내에서 사용할 수 있고 측정값 DAX 쿼리에서 역할 없이 사용할 수 있습니다.You can use it inside the role DAX query, and you can use it without any role in a measure DAX query. CustomData 기능은 대시보드, 보고서 및 타일과 같은 아티팩트에서 토큰 생성 기능의 일부입니다.CustomData feature is part of our token generation functionality for the following artifacts: dashboard, report, and tile. 대시보드에는 여러 CustomData ID가 있을 수 있습니다(타일/모델 당 하나씩).Dashboards can have multiple CustomData identities (one per tile/model).

CustomData SDK 추가CustomData SDK Additions

CustomData 문자열 속성은 토큰 생성 시나리오에서 유효 ID에 추가되었습니다.The CustomData string property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "customData")]
public string CustomData { get; set; }

해당 ID는 다음과 같은 호출을 사용하는 사용자 지정 데이터로 만들 수 있습니다.The identity can be created with custom data using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null);

CustomData SDK 사용CustomData SDK Usage

REST API를 호출하는 경우 각 ID 내에 사용자 지정 데이터를 추가할 수 있습니다. 예:If you're calling the REST API, you can add custom data inside each identity, for example:

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "EffectiveIdentity",
            "roles": [ "Role1", "Role2" ],
            "customData": "MyCustomData",
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

다음은 Power BI Embedded 애플리케이션을 사용하여 CustomData() 기능을 설정하기 위한 단계입니다.Here are the steps to begin setting up the CustomData() feature with your Power BI Embedded application.

  1. Azure Analysis Services 데이터베이스를 만듭니다.Create your Azure Analysis Services database. 그런 다음, SQL Server Management Studio를 통해 Azure Analysis Services 서버에 로그인합니다.Then sign in to your Azure Analysis Services server via SQL Server Management Studio.

    Azure Analysis Services 데이터베이스 만들기

    Analysis Services 데이터베이스

  2. Analysis Services 서버에서 역할을 만듭니다.Create a Role in the Analysis Services server.

    역할 만들기

  3. 일반 설정을 지정합니다.Set your General settings. 여기서 역할 이름을 지정하고 데이터베이스 권한을 읽기 전용으로 설정합니다.Here you give the Role Name and set the database permissions to Read only.

    역할 만들기 - 일반 설정 지정

  4. 멤버 자격 설정을 지정합니다.Set the Membership settings. 여기서 이 역할의 영향을 받는 사용자를 추가합니다.Here you add te users that are affected by this role.

    역할 만들기 - 멤버 자격 설정 지정

  5. CUSTOMDATA() 함수를 사용하여 행 필터 DAX 쿼리를 설정합니다.Set your Row filters DAX query using the CUSTOMDATA() function.

    역할 만들기 - 행 필터 설정

  6. PBI 보고서를 빌드하고 전용 용량이 있는 작업 영역에 게시합니다.Build a PBI report and publish it to a workspace with dedicated capacity.

    PBI 보고서 샘플

  7. Power BI API를 통해 애플리케이션에서 CustomData 기능을 사용합니다.Use the Power BI APIs to use the CustomData feature in your application. 사용자 지정 데이터 기능을 사용하여 토큰을 생성할 때 사용자 이름이 필요합니다.When generating a token with the Custom data feature, you need to have a username. 사용자 이름은 마스터 사용자의 UPN과 같아야 합니다.The username must be equal to the UPN of the master user. 마스터 사용자는 생성한 역할의 구성원이어야 합니다.The master user must be a member of the role(s) you created. 역할을 지정하지 않으면 마스터 사용자가 구성원인 모든 역할이 RLS 평가에 사용됩니다.If no role(s) are specified, then all the roles the master user is a member of are used for RLS evaluation.

    서비스 주체를 사용하는 경우 마스터 계정을 사용하는 대신 위의 단계를 수행해야 합니다.When working with a service principal, you also need to do the above steps in place of using a master account. 포함 토큰을 생성할 때 서비스 주체 개체 ID를 사용자 이름으로 사용합니다.When generating embed token, use the service principal object ID as the username.

    참고

    애플리케이션을 프로덕션에 배포할 준비가 되면 마스터 사용자 계정 필드 또는 옵션이 최종 사용자에게 표시되지 않아야 합니다.When you're ready to deploy your application to production, the master user account field or option should not be visible to the end user.

    CustomData 기능을 추가하기 위한 코드를 봅니다.View the code to add the CustomData feature.

  8. 이제 보고서에 포함된 모든 데이터를 보기 위해 사용자 지정 데이터 값을 적용하기 전에, 애플리케이션에서 보고서를 볼 수 있습니다.Now you can view the report in your application before applying the Custom data value(s) to see all the data your report holds.

    사용자 지정 데이터가 적용되기 전

    그런 다음, 사용자 지정 데이터 값을 적용하여 보고서가 다른 데이터 세트를 표시하는 방법을 확인할 수 있습니다.Then apply the Custom data value(s) to see how the report displays a different set of data. CustomData가 적용된 후After CustomData is applied

RLS 대 JavaScript 필터 사용Using RLS vs. JavaScript filters

보고서에서 데이터 필터링을 결정할 때 RLS(행 수준 보안) 또는 JavaScript 필터를 사용할 수 있습니다.When deciding on filtering your data in a report, you can use row-level security (RLS) or JavaScript filters.

행 수준 보안은 데이터 모델 수준에서 데이터를 필터링하는 기능입니다.Row-level security is a feature that filters data at the data model level. 백엔드 데이터 원본이 RLS 설정을 제어합니다.Your backend data source controls your RLS settings. 데이터 모델에 따라 포함 토큰 생성이 사용자 이름과 세션의 역할을 설정합니다.Based on your data model, the embed token generation sets the username and the roles for the session. 클라이언트 쪽 코드로 이를 대체, 제거 또는 제어할 수 없으므로 안전한 것으로 간주됩니다.It cannot be overridden, removed, or controlled by the client-side code and that's why it's considered secure. 데이터를 안전하게 필터링하기 위해 RLS를 사용할 것을 권장합니다.We recommend using RLS for filtering data securely. 아래 옵션 중 하나를 사용하여 RLS로 데이터를 필터링할 수 있습니다.You can filter data with RLS by using one of the options below.

  • Power BI 보고서에서 역할을 구성.Configuring roles in a Power BI report.
  • 데이터 원본 수준(Analysis Services 실시간 연결 전용)에서 역할을 구성합니다.Configuring roles at the data source level (Analysis Services live connection only).
  • EffectiveIdentity를 사용하여 포함 토큰을 통해 프로그래밍 방식으로 필터링.Programmatically with an Embed Token using EffectiveIdentity. 포함 토큰을 사용하는 경우, 실제 필터는 특정 세션에서 포함 토큰을 통과합니다.When using an embed token, the actual filter passes through the embed token for a specific session.

JavaScript 필터는 사용자가 축소되고 범위가 지정되고 필터링된 데이터 보기를 사용하도록 허용하기 위해 사용됩니다.JavaScript filters are used to allow the user to consume reduced, scoped, or a filtered view of the data. 그러나 사용자는 여전히 모델 스키마 테이블, 열 및 측정값에 대한 액세스 권한을 가지고 있으며 데이터에도 액세스할 수 있습니다.However, the user still has access to the model schema tables, columns, and measures and potentially can access any data there. 데이터에 대한 제한된 액세스는 클라이언트 측 필터링 API를 통해서가 아니라 RLS로만 적용할 수 있습니다.Restricted access to the data can only be applied with RLS and not through client-side filtering APIs.

Azure SQL Database를 사용한 토큰 기반 IDToken-based Identity with Azure SQL Database

토큰 기반 ID를 사용하면 Azure SQL DatabaseAAD(Azure Active Directory) 액세스 토큰을 사용하여 포함 토큰에 유효한 ID를 지정할 수 있습니다.The token-based identity allows you to specify the effective identity for an embed token using Azure Active Directory (AAD) access token for an Azure SQL Database.

데이터를 Azure SQL Database에 저장하는 고객은 이제 Power BI Embedded와 통합될 때 Azure SQL에서 사용자 및 데이터 액세스 권한을 관리하는 새로운 기능을 사용할 수 있습니다.Customers that hold their data in Azure SQL Database can now enjoy a new capability to manage users and their access to data in Azure SQL when integrating with Power BI Embedded.

포함 토큰을 생성하는 경우 Azure SQL에서 사용자의 유효 ID를 지정할 수 있습니다.When you're generating the embed token, you can specify the effective identity of a user in Azure SQL. 서버에 AAD 액세스 토큰을 전달하여 사용자의 유효 ID를 지정할 수 있습니다.You can specify the effective identity of a user by passing the AAD access token to the server. 액세스 토큰은 해당 특정 세션을 위해 Azure SQL에서 해당 사용자의 관련 데이터를 끌어오는 데만 사용됩니다.The access token is used to pull only the relevant data for that user from Azure SQL, for that specific session.

Azure SQL에서 각 사용자의 보기를 관리하거나 다중 테넌트 DB의 특정 고객으로 Azure SQL에 로그인하는 데 사용할 수 있습니다.It can be used to manage each user's view in Azure SQL or to sign in to Azure SQL as a specific customer in a multi-tenant DB. Azure SQL에서 해당 세션에 행 수준 보안을 적용하고 해당 세션의 관련 데이터만 검색하여 Power BI에서 RLS를 관리할 필요성을 제거할 수도 있습니다.It can also apply row-level security on that session in Azure SQL and retrieve only the relevant data for that session, removing the need to manage RLS in Power BI.

이러한 유효 ID 문제는 Azure SQL Server의 RLS 규칙에 직접 적용됩니다.Such effective identity issues apply to RLS rules directly on the Azure SQL Server. Power BI Embedded는 Azure SQL Server에서 데이터를 쿼리할 때 제공된 액세스 토큰을 사용합니다.Power BI Embedded uses the provided access token when querying data from the Azure SQL Server. 액세스 토큰이 제공된 사용자의 UPN은 USER_NAME() SQL 함수의 결과로 액세스할 수 있습니다.The UPN of the user (for which the access token was provided) is accessible as a result of the USER_NAME() SQL function.

토큰 기반 ID는 AAD 인증을 허용하도록 구성된 Azure SQL Database에 연결된 전용 용량의 DirectQuery 모델에서만 작동합니다(Azure SQL Database의 AAD 인증에 대한 자세한 정보).The token-based identity only works for DirectQuery models on dedicated capacity - connected to an Azure SQL Database, which is configured to allow AAD authentication (learn more about AAD authentication for Azure SQL Database). 데이터 세트의 데이터 원본은 토큰 기반 ID를 사용하기 위해 최종 사용자의 OAuth2 자격 증명을 사용하도록 구성해야 합니다.The dataset's data source must be configured to use end users' OAuth2 credentials, to use a token-based identity.

Azure SQL Server 구성

토큰 기반 ID SDK 추가Token-based Identity SDK additions

ID Blob 속성은 토큰 생성 시나리오에서 유효 ID에 추가되었습니다.The identity blob property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "identityBlob")]
public IdentityBlob IdentityBlob { get; set; }

IdentityBlob 형식은 값 문자열 속성을 포함하는 간단한 JSON 구조체임The IdentityBlob type is a simple JSON structure holding a value string property

[JsonProperty(PropertyName = "value")]
public string value { get; set; }

EffectiveIdentity는 다음 호출을 사용하여 ID Blob을 통해 만들 수 있습니다.The EffectiveIdentity can be created with identity blob using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null, IdentityBlob identityBlob = null);

다음 호출을 사용하여 ID Blob을 만들 수 있습니다.Identity blob can be created using the following call.

public IdentityBlob(string value);

토큰 기반 ID REST API 사용Token-based Identity REST API Usage

REST API를 호출하는 경우 각 ID 내에 ID Blob을 추가할 수 있습니다.If you're calling the REST API, you can add identity blob inside each identity.

{
    "accessLevel": "View",
    "identities": [
        {
            "datasets": ["fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc"],
        "identityBlob": {
            "value": "eyJ0eXAiOiJKV1QiLCJh…."
         }
        }
    ]
}

ID Blob에 제공된 값은 Azure SQL Server에 유효한 액세스 토큰이어야 합니다(https://database.windows.net/의 리소스 URL 포함).The value provided in the identity blob should be a valid access token to Azure SQL Server (with a resource URL of (https://database.windows.net/).

참고

Azure SQL의 액세스 토큰을 만들 수 있으려면 애플리케이션에는 Azure Portal의 AAD 앱 등록 구성에서 Azure SQL Database API에 대한 Access Azure SQL DB 및 Data Warehouse 위임 권한이 있어야 합니다.To be able to create an access token for Azure SQL, the application must have Access Azure SQL DB and Data Warehouse delegated permission to Azure SQL Database API on AAD app registration configuration in the Azure portal.

앱 등록

서비스 주체가 있는 온-프레미스 데이터 게이트웨이On-premises data gateway with service principal

SSAS(SQL Server Analysis Services) 온-프레미스 라이브 연결 데이터 원본을 사용하여 RLS(행 수준 보안)를 구성하는 고객은 Power BI Embedded와 통합할 때 SSAS에서 사용자와 해당 데이터 액세스를 관리할 수 있는 새로운 서비스 주체 기능을 사용할 수 있습니다.Customers that configure row-level security (RLS) using an SQL Server Analysis Services (SSAS) on-premises live connection data source can enjoy the new service principal capability to manage users and their access to data in SSAS when integrating with Power BI Embedded.

Power BI REST API를 통해 서비스 주체 개체를 사용하여 포함 토큰에 대한 SSAS 온-프레미스 라이브 연결을 위한 유효한 ID를 지정할 수 있습니다.Using Power BI REST APIs, allows you to specify the effective identity for SSAS on-premises live connections for an embed token using a service principal object.

지금까지 SSAS 온-프레미스 라이브 연결을 위한 유효한 ID를 지정하려면 포함 토큰을 생성하는 마스터 사용자가 게이트웨이 관리자여야 했습니다. 이제 사용자를 게이트웨이 관리자로 요구하는 대신 게이트웨이 관리자는 사용자가 포함 토큰을 생성할 때 유효한 ID를 재정의할 수 있도록 해당 데이터 원본에 대한 전용 권한을 사용자에게 부여할 수 있습니다.Until now, to be able to specify the effective identity for SSAS on-premises live connection, the master user generating the embed token had to be a gateway admin. Now, instead of requiring the user to be gateway admin, the gateway admin can give the user dedicated permission to that data source, that allows the user to override the effective identity when generating the embed token. 이 새로운 기능을 통해 라이브 SSAS 연결에 서비스 주체를 포함시킬 수 있습니다.This new ability enables embedding with service principal for a live SSAS connection.

이 시나리오를 사용하기 위해 게이트웨이 관리자는 데이터 원본 사용자 REST API 추가를 사용하여 서비스 주체에게 Power BI Embedded에 대한 ReadOverrideEffectiveIdentity 권한을 부여합니다.To enable this scenario, the gateway admin uses the Add Datasource User REST API to give the service principal the ReadOverrideEffectiveIdentity permission for Power BI Embedded.

관리 포털을 사용하여 이 권한을 설정할 수 없습니다.You can't set this permission using the admin portal. 이 사용 권한은 API로만 설정됩니다.This permission is only set with the API. 관리 포털에서 이러한 사용 권한이 있는 사용자 및 SPN에 대한 표시를 볼 수 있습니다.In the admin portal, you see an indication for users and SPNs with such permissions.

고려 사항 및 제한 사항Considerations and limitations

  • Power BI 서비스 내에서 역할에 사용자를 할당하면 포함 토큰을 사용할 때 RLS에 영향을 주지 않습니다.Assignment of users to roles within the Power BI service doesn't affect RLS when using an embed token.
  • Power BI 서비스는 편집 권한이 있는 관리자나 구성원에게 RLS 설정을 적용하지 않는 반면, 포함 토큰을 사용하여 ID를 제공할 경우 데이터에 적용합니다.While the Power BI service doesn't apply RLS setting to admins or members with edit permissions, when you supply an identity with an embed token, it applies to the data.
  • 온-프레미스 서버에 대해 Analysis Services 라이브 연결이 지원됩니다.Analysis Services live connections are supported for on-premises servers.
  • Azure Analysis Services 라이브 연결은 역할별 필터링을 지원합니다.Azure Analysis Services live connections support filtering by roles. CustomData를 사용하여 동적 필터링을 수행할 수 있습니다.Dynamic filtering can be done using CustomData.
  • 기본 데이터 세트에서 RLS가 필요하지 않은 경우 GenerateToken 요청은 유효 ID를 포함하지 않아야합니다.If the underlying dataset doesn't require RLS, the GenerateToken request must not contain an effective identity.
  • 기본 데이터 세트가 클라우드 모델(캐시된 모델 또는 DirectQuery)이면 유효 ID는 하나 이상의 역할을 포함해야 합니다. 그렇지 않으면 역할 할당이 이루어지지 않습니다.If the underlying dataset is a cloud model (cached model or DirectQuery), the effective identity must include at least one role, otherwise role assignment doesn't occur.
  • ID 목록은 대시보드 포함을 위한 여러 ID 토큰을 구현합니다.A list of identities enables multiple identity tokens for dashboard embedding. 다른 모든 아티팩트는 목록에 단일 ID가 포함됩니다.For all others artifacts, the list contains a single identity.

토큰 기반 ID 제한 사항Token-based Identity limitations

  • 전용 용량이 있는 경우에만 RLS를 사용할 수 있습니다.You can use RLS only if you have a dedicated capacity.
  • RLS는 SQL Server 온-프레미스에서 작동하지 않습니다.RLS doesn't work with SQL Server on-premises.

궁금한 점이 더 있나요?More questions? Power BI 커뮤니티에 질문합니다.Try asking the Power BI Community