Power BI の埋め込みコンテンツで行レベルのセキュリティを使用するUse row-level security with Power BI embedded content

行レベルのセキュリティ (RLS) を使って、ダッシュボード、タイル、レポート、データセット内のデータへのユーザー アクセスを制限できます。Row level security (RLS) can be used to restrict user access to data within dashboards, tiles, reports, and datasets. 複数の異なるユーザーが、同じアーティファクトで作業しながら別のデータを見ることができます。Multiple, different users can work with those same artifacts all while seeing different data. 埋め込みでは RLS がサポートされています。Embedding supports RLS.

Power BI 以外のユーザー (アプリ所有データ) のために埋め込む場合は (一般に ISV のシナリオ)、この記事をお読みください。If you're embedding for non-Power BI users (app owns data), which is typically an ISV scenario, then this article is for you! ユーザーおよびロールを考慮するために埋め込むトークンを構成する必要があります。You will need to configure the embed token to account for the user and role. 方法については後で説明します。Read on to learn how to do this.

組織内の Power BI ユーザー (ユーザー所有データ) のために埋め込む場合は、RLS は Power BI サービスで直接使う場合と同じように動作します。If you are 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 is nothing more you need to do in your application. 詳しくは、「Power BI での行レベルのセキュリティ (RLS)」をご覧ください。For more information see, Row-Level security (RLS) with Power BI.

行レベル セキュリティに含まれる項目。

RLS を利用するには、ユーザー、ロール、ルールの 3 つの主要な概念を理解することが重要です。To take advantage of RLS, it’s important you understand three main concepts; Users, Roles, and Rules. それぞれについて詳しく説明します。Let’s take a closer look at each:

ユーザー – アーティファクト (ダッシュボード、タイル、レポート、データセット) を表示するエンド ユーザー。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. ルールは、"Country = USA" のような単純なものもあれば、もっと動的なものもあります。This could be as simple as “Country = USA” or something much more dynamic. 以降では、RLS を作成し、埋め込みアプリケーション内でそれを使う方法の例を説明します。For the rest of this article, we’ll provide 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’ll see the same data. 各マネージャーが自分の管理する店舗の売上のみを見ることができるようにする場合は、RLS を使って実現できます。Senior management has determined each district manager should only see the sales for the stores they manage, and to do this, we can use RLS.

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.
  • 他に ItemTimeStoreDistrict の 4 つの関連ディメンション テーブルがあります。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. リレーションシップを示す線のすべての矢印は Sales テーブルを向いており、逆向きはないので、このフィルターによって他のテーブルは影響を受けません。No other tables would be 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:

    Disctrict テーブル内の行

このスキーマを基にすると、District テーブルの District Manager 列にフィルターを適用し、そのフィルターがレポートを表示しているユーザーと一致した場合、そのフィルターはさらに Store テーブルと Sales テーブルにも適用されて、その地域マネージャーのデータだけが表示されます。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 will also filter down the Store and Sales tables to only show data for that district manager.

次にその方法を示します。Here's how:

  1. [モデリング] タブで [ロールの管理] を選びます。On the Modeling tab, select Manage Roles.

    Power BI Desktop の [モデリング] タブ

  2. Manager という名前の新しいロールを作成します。Create a new role called Manager.

    新しいロールを作成する

  3. District テーブルに、「[District Manager] = USERNAME()」という DAX 式を入力します。In the District table, enter the following DAX expression: [District Manager] = USERNAME().

    RLS ルールの DAX ステートメント

  4. ルールが動作することを確認するには、[モデリング] タブで [ロールとして表示] を選び、作成した Manager ロールと [その他のユーザー] の両方を選びます。To make sure the rules are working, on the Modeling tab, select View as Roles, and then select both the Manager role you just created, along with Other user. ユーザーとして「Andrew Ma」と入力します。Enter Andrew Ma for the user.

    [ロールとして表示] ダイアログ

    レポートには、Andrew Ma としてサインインした場合のデータが表示されます。The reports will now show data as if you were signed in as Andrew Ma.

ここでのフィルター適用方法では、DistrictStoreSales の各テーブルのすべてのレコードがフィルター処理されます。Applying the filter, the way we did here, will filter down all records in the District, Store, and Sales tables. ただし、リレーションシップでのフィルターの向きのため、Sales テーブルから Time テーブル、Sales テーブルから Item テーブル、Item テーブルから Time テーブルには、フィルターは適用されません。However, because of the filter direction on the relationships between Sales and Time, Sales and Item, and Item and Time tables will not be filtered down. 双方向のクロス フィルター処理について詳しくは、「Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop」(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, there is some work needed 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 that 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’ll need to pass some additional context as part of your embed token in the form of identities. これを行うには、GenerateToken API を使います。This is done by way GenerateToken API.

GenerateToken API は、ID とそれに関連するデータセットを示す値を受け取ります。The GenerateToken API accepts a list of identities with indication of the relevant datasets. RLS が機能するには、ID の一部として次の値を渡す必要があります。For RLS to work, you will need to pass the following as part of the identity.

  • ユーザー名 (必須) – RLS ルールを適用するときにユーザーの識別に使うことができる文字列です。username (mandatory) – This is a string that can be used to help identify the user when applying RLS rules. 指定できるユーザーは 1 人だけです。Only a single user can be listed.
  • ロール (必須) – 行レベル セキュリティのルールを適用するときに選択するロールを含む文字列です。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 are embedding.

PowerBIClient.ReportsGenerateTokenInGroup メソッドを使って、埋め込みトークンを作成できます。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. "Home\HomeController.cs の 76 および 77 行目" は次のようになっています。Home\HomeController.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);

これを次のように変更します。to

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 are calling the REST API, the updated API now accepts an additional JSON array, named identities, containing a user name, list of string roles and list of string datasets, e.g.:

{
    "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 be able to see the data that they are 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.

オンプレミス データ ゲートウェイ構成On-premises data gateway configuration

オンプレミス データ ゲートウェイは、Analysis Services ライブ接続の使用時に利用されます。An on-premises data gateway is used when working with Analysis Services live connections. 埋め込みトークンの生成時、ID が一覧表示された状態で、マスター アカウントをゲートウェイの管理者として一覧表示する必要があります。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 is not listed, the row-level security will not be applied property to 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

役割は、埋め込みトークンの ID で与えられます。Roles can be provded with the identity in an embed token. 役割が与えられない場合、与えられたユーザー名を利用し、関連する役割が解決されます。If no role is provided, the username that was provided will be used to resolve the associated roles.

考慮事項と制限事項Considerations and limitations

  • Power BI サービス内でのロールへのユーザーの割り当ては、埋め込みトークンを使用したときの RLS には反映されません。Assignment of users to roles within the Power BI service does not affect RLS when using an embed token.
  • Power BI サービスでは RLS の設定は管理者および編集アクセス許可を持つメンバーには適用されませんが、埋め込みトークンで ID を指定すると、データに適用されます。While the Power BI service will not apply RLS setting to admins or members with edit permissions, when you supply an identity with an embed token, it will be applied 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, but not dynamic by username.
  • 基になるデータセットで RLS が必要ない場合、GenerateToken 要求に有効な ID が含まれていてはなりませんIf the underlying dataset doesn’t require RLS, the GenerateToken request must not contain an effective identity.
  • 基になるデータセットがクラウド モデル (キャッシュされたモデルまたは DirectQuery) の場合は、有効な ID に少なくとも 1 つのロールが含まれている必要があります。そうでない場合、ロールの割り当ては行われません。If the underlying dataset is a cloud model (cached model or DirectQuery), the effective identity must include at least one role, otherwise role assignment will not 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.

他にわからないことがある場合は、More questions? Power BI コミュニティで質問してみてくださいTry asking the Power BI Community