

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 匿名ユーザー用のダッシュボードの埋め込み時におけるデータセットへのアクセスを制限するためのタグベースのルールでの行レベルのセキュリティの使用
<a name="quicksight-dev-rls-tags"></a>


|  | 
| --- |
|  適用対象: Enterprise Edition  | 


|  | 
| --- |
|    対象者:  Amazon Quick Administrators と Amazon Quick Developer  | 

Quick でプロビジョニング (登録) されていないユーザー用に Amazon Quick ダッシュボードをアプリケーションに埋め込む場合、行レベルのセキュリティ (RLS) を使用して、タグでデータをフィルタリング/制限できます。タグは、アプリケーション内のセッションを識別するユーザー指定の文字列です。タグを使用して、データセットの RLS コントロールを実装できます。データセットで RLS ベースの制限を設定することで、Quick はユーザー ID/セッションに関連付けられたセッションタグに基づいてデータをフィルタリングします。

例えば、さまざまな小売業者のための顧客向けアプリケーションを所有する物流会社があるとしましょう。これらの小売業者の何千人ものユーザーが、アプリケーションにアクセスし、倉庫からの注文の出荷状況に関する指標を確認します。

Quick で何千人ものユーザーを管理する必要がないため、匿名埋め込みを使用して、認証および承認されたユーザーが表示できる選択したダッシュボードをアプリケーションに埋め込みます。ただし、小売業者にはビジネス用のデータのみが表示され、他のデータは表示されないようにする必要があります。タグによる RLS を使用すると、顧客に関連するデータのみが表示されるようにできます。

そのためには、以下のステップを実行します。

1. RLS タグをデータセットに追加します。

1. `GenerateEmbedUrlForAnonymousUser` API オペレーションを使用して、実行時にこれらのタグに値を割り当てます。

   `GenerateEmbedUrlForAnonymousUser` API オペレーションを使用した匿名ユーザー向けダッシュボードの埋め込みに関する詳細については、[匿名 (未登録) ユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み](embedded-analytics-dashboards-for-everyone.md) を参照してください。

タグによる RLS を使用するには、次の点に注意してください。
+ タグによる RLS の使用は、現在、匿名埋め込み (特に、`GenerateEmbedUrlForAnonymousUser` API オペレーションを使用する埋め込みダッシュボード) でのみサポートされています。
+ タグによる RLS の使用は、`GenerateEmbedURLForRegisteredUser` API オペレーションまたは古い `GetDashboardEmbedUrl` API オペレーションを使用する埋め込みダッシュボードではサポートされていません。
+ RLS タグは、 AWS Identity and Access Management (IAM) またはクイック ID タイプではサポートされていません。
+ SPICE データセットを行レベルのセキュリティに適用する場合、データセット内の各フィールドに最大 2,047 文字の Unicode 文字を含めることができます。このクォータを超えるフィールドは、取り込み中に切り捨てられます。SPICE データクォータの詳細については、「[インポートされたデータに対する SPICE クォータ](data-source-limits.md#spice-limits)」を参照してください。

## ステップ 1: データセットに RLS タグを追加する
<a name="quicksight-dev-rls-tags-add"></a>

Amazon Quick のデータセットにタグベースのルールを追加できます。または、`CreateDataSet` または `UpdateDataSet` API オペレーションを呼び出すことによってタグベースのルールを追加することもできます。詳細については、「[API を使用してデータセットに RLS タグを追加する](#quicksight-dev-rls-tags-add-api)」を参照してください。

Quick のデータセットに RLS タグを追加するには、次の手順に従います。

**RLS タグをデータセットに追加する**

1. クイックスタートページから、左側の**データ**を選択します。

1. RLS を追加するデータセットを選択します。

1. [Dataset details] (データセットの詳細) ページが開くので、**[Row-level security]** (行レベルのセキュリティ) で、**[Set up]** (セットアップ) を選択します。

1. 開いた **[Set up row-level security]** (行レベルのセキュリティを設定) ページで、**[Tag-based rules]** (タグベースのルール) を選択します。

1. **[Column]** (列) では、タグルールを追加する列を選択します。

   例えば、この物流会社の場合は、`retailer_id` 列が使用されます。

   文字列データ型の列のみがリストされます。

1. **[Tag]** (タグ) には、タグキーを入力します。任意のタグ名を入力できます。

   例えば、この物流会社の場合は、タグキー `tag_retailer_id` が使用されます。こうすることで、アプリケーションにアクセスする小売業者に基づいた行レベルのセキュリティが設定されます。

1. (オプション) **[Delimiter]** (区切り記号) には、リストから区切り記号を選択するか、独自の区切り記号を入力します。

   タグに複数の値を割り当てるときは、区切り記号を使用してテキスト文字列を区切ることができます。区切り記号の値は、最長で 10 文字にすることができます。

1. (オプション) **[Match all]** (すべて一致) には、**[\$1]** を選択するか、独自の文字 (1 つ、または複数) を入力します。

   このオプションは、データセット内のその列にあるすべての値でフィルタリングしたいときに使用する任意の文字にすることができます。値を 1 つずつリストする代わりに、この文字を使用できます。この値を指定する場合、少なくとも 1 文字、または最大 256 文字の長さにすることができます。

1. **[Add]** (追加) を選択します。

   タグルールがデータセットに追加されて最下部にリストされますが、まだ適用はされていません。データセットに別のタグルールを追加するには、ステップ 5～9 を繰り返します。タグルールを編集するには、ルールの後の鉛筆アイコンを選択します。タグルールを削除するには、ルールの後の削除アイコンを選択します。データセットには最大 50 個のタグを追加できます。

1. データセットにタグルールを適用する準備ができたら、**[Apply rules]** (ルールを適用) をクリックします。

1. **[Turn on tag-based security?]** (タグベースのセキュリティをオンにしますか?) で **[Apply and activate]** (適用とアクティベート) をクリックします。

   これでタグベースのルールがアクティブになりました。**[Set up row-level security]** (行レベルのセキュリティを設定) ページに、データセットのタグルールをオンとオフに切り替えるためのトグルが表示されます。

   データセット用のすべてのタグベースのルールを無効にするには、**[タグベースのルール]** トグルをオフにし、表示されるテキストボックスに「確認」と入力します。

   **データ**ページには、タグルールが有効になっていることを示すロックアイコンがデータセット行に表示されます。

   これで、[ステップ 2: ランタイム時に値を RLS タグに割り当てる](#quicksight-dev-rls-tags-assign-values) で説明されているように、ランタイム時にタグルールを使用してタグ値を設定できるようになりました。ルールは、アクティブな場合にのみクイックリーダーに影響します。
**重要**  
データセットでタグが割り当てられ、有効になったら、ダッシュボードの作成時にデータセット内のデータを表示するアクセス許可を Quick authors に付与してください。  
Quick authors にデータセット内のデータを表示するアクセス許可を付与するには、データセットルールとして使用するアクセス許可ファイルまたはクエリを作成します。詳細については、「[行レベルのセキュリティに対するデータセットルールの作成](restrict-access-to-a-data-set-using-row-level-security.md#create-data-set-rules-for-row-level-security)」を参照してください。

タグベースのルールを作成すると、タグベースのルールが相互にどのように関連しているかを示す新しい **[ルールを管理]** テーブルが表示されます。**[ルールを管理]** テーブルにリストされているルールを変更するには、ルールの後の鉛筆アイコンを選択します。その後、タグを追加または削除し、**[更新]** を選択します。更新したルールをデータセットに適用するには、**[適用]** を選択します。

### (オプション) RLS タグに OR 条件を追加する
<a name="quicksight-dev-rls-tags-or"></a>

タグベースのルールに OR 条件を追加して、クイックアカウントユーザーにデータを表示する方法をさらにカスタマイズすることもできます。タグベースのルールで OR 条件を使用すると、ルールで定義された少なくとも 1 つのタグが有効であれば、Quick のビジュアルが表示されます。

**タグベースのルールに OR 条件を追加するには**

1. **[ルールを管理]** テーブルで、**[OR 条件を追加]** を選択します。

1. 表示される **[タグを選択]** ドロップダウンリストで、OR 条件を作成するタグを選択します。**[ルールを管理]** テーブルには、最大 50 個の OR 条件を追加できます。データセット内の 1 つの列に複数のタグを追加できますが、1 つのルールには少なくとも 1 つの列タグが含まれている必要があります。

1. **[更新]** を選択してルールに条件を追加し、**[適用]** を選択して更新されたルールをデータセットに適用します。

### API を使用してデータセットに RLS タグを追加する
<a name="quicksight-dev-rls-tags-add-api"></a>

別の手段として、`CreateDataSet` または `UpdateDataSet` API オペレーションを呼び出すことによって、データセットにタグベースの行レベルのセキュリティを設定し、有効化することもできます。以下の例を使って説明します。

**重要**  
API コールでセッションタグを設定する場合、  
セッションタグをセキュリティ認証情報として扱います。セッションタグをエンドユーザーまたはクライアント側のコードに公開しないでください。
サーバー側のコントロールを実装します。セッションタグは、エンドユーザーが変更できるパラメータではなく、信頼できるバックエンドサービスによってのみ設定されていることを確認してください。
セッションタグを列挙から保護します。あるテナントのユーザーが、他のテナントに属する sessionTag 値を検出または推測できないようにします。
アーキテクチャを確認します。ダウンストリームの顧客またはパートナーが API を直接呼び出すことが許可されている場合は、アクセスすべきでないテナントに sessionTag 値を指定できるかどうかを評価します。

------
#### [ CreateDataSet ]

以下は、タグによる RLS を使用するデータセットを作成する例です。これは、前述の物流会社のシナリオを想定しています。タグは、`row-level-permission-tag-configuration` 要素で定義されています。タグは、データを保護する列に対して定義されています。このオプション要素の詳細については、*Amazon Quick API リファレンス*の[RowLevelPermissionTagConfiguration](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowLevelPermissionTagConfiguration.html)」を参照してください。

```
create-data-set
		--aws-account-id <value>
		--data-set-id <value>
		--name <value>
		--physical-table-map <value>
		[--logical-table-map <value>]
		--import-mode <value>
		[--column-groups <value>]
		[--field-folders <value>]
		[--permissions <value>]
		[--row-level-permission-data-set <value>]
		[--column-level-permission-rules <value>]
		[--tags <value>]
		[--cli-input-json <value>]
		[--generate-cli-skeleton <value>]
		[--row-level-permission-tag-configuration 
	'{
		"Status": "ENABLED",
		"TagRules": 
			[
				{
					"TagKey": "tag_retailer_id",
					"ColumnName": "retailer_id",
					"TagMultiValueDelimiter": ",",
					"MatchAllValue": "*"
				},
				{
					"TagKey": "tag_role",
					"ColumnName": "role"
				}
			],
		"TagRuleConfigurations":
			[
				tag_retailer_id
			],
			[
				tag_role
			]
	}'
]
```

この例のタグは、要素の `TagRules` 部分で定義されています。この例では、2 つの列に基づいて 2 つのタグが定義されています。
+ `tag_retailer_id` タグキーは `retailer_id` 列に対して定義されています。この物流会社の場合は、アプリケーションにアクセスしている小売業者に基づいて行レベルのセキュリティが設定されます。
+ `tag_role` タグキーは `role` 列に対して定義されています。この物流会社の場合は、特定の小売業者からアプリケーションにアクセスしているユーザーのロールに基づいて、行レベルのセキュリティの追加レイヤーが設定されます。例として、`store_supervisor` または `manager` があります。

タグごとに、`TagMultiValueDelimiter` および `MatchAllValue` を定義できます。これらはオプションです。
+ `TagMultiValueDelimiter` - このオプションは、ランタイム時に値を渡すときにそれらを区切るために使用する任意の文字列にすることができます。値の最大長は 10 文字です。この場合、区切り文字の値としてカンマが使用されます。
+ `MatchAllValue` - このオプションは、データセット内のその列にあるすべての値でフィルタリングしたいときに使用する任意の文字にすることができます。値を 1 つずつリストする代わりに、この文字を使用できます。指定する場合、この値は 1 文字から 256 文字までの長さにすることができます。この場合、すべての値の一致としてアスタリスクが使用されます。

データセット列のタグを設定するときに、必須プロパティの `Status` を使用して、それらを有効または無効にします。タグルールを有効にするには、このプロパティに対して値 `ENABLED` を使用します。タグルールを有効にすることによって、[ステップ 2: ランタイム時に値を RLS タグに割り当てる](#quicksight-dev-rls-tags-assign-values) で説明されているように、ランタイム時にタグルールを使用してタグ値を設定できます。

以下は、応答の定義の例です。

```
{
			"Status": 201,
			"Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset",
			"DataSetId": "RLS-Dataset",
			"RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2"
		}
```

------
#### [ UpdateDataSet ]

**UpdateDataSet**

`UpdateDataSet` API オペレーションを使用して、既存のデータセットの RLS タグを追加または更新できます。

以下は、RLS タグを持つデータセットを更新する例です。これは、前述の物流会社のシナリオを想定しています。

```
update-data-set
		--aws-account-id <value>
		--data-set-id <value>
		--name <value>
		--physical-table-map <value>
		[--logical-table-map <value>]
		--import-mode <value>
		[--column-groups <value>
		[--field-folders <value>]
		[--row-level-permission-data-set <value>]
		[--column-level-permission-rules <value>]
		[--cli-input-json <value>]
		[--generate-cli-skeleton <value>]
				[--row-level-permission-tag-configuration 
	'{
		"Status": "ENABLED",
		"TagRules": 
			[
				{
					"TagKey": "tag_retailer_id",
					"ColumnName": "retailer_id",
					"TagMultiValueDelimiter": ",",
					"MatchAllValue": "*"
				},
				{
					"TagKey": "tag_role",
					"ColumnName": "role"
				}
			],
		"TagRuleConfigurations":
			[
				tag_retailer_id
			],
			[
				tag_role
			]
	}'
]
```

以下は、応答の定義の例です。

```
{
			"Status": 201,
			"Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset",
			"DataSetId": "RLS-Dataset",
			"RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2"
		}
```

------

**重要**  
データセットでタグが割り当てられ、有効になったら、ダッシュボードの作成時にデータセット内のデータを表示するアクセス許可を Quick authors に付与してください。  
Quick authors にデータセット内のデータを表示するアクセス許可を付与するには、データセットルールとして使用するアクセス許可ファイルまたはクエリを作成します。詳細については、「[行レベルのセキュリティに対するデータセットルールの作成](restrict-access-to-a-data-set-using-row-level-security.md#create-data-set-rules-for-row-level-security)」を参照してください。

`RowLevelPermissionTagConfiguration` 要素の詳細については、*Amazon Quick API リファレンス*の[RowLevelPermissionTagConfiguration](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowLevelPermissionTagConfiguration.html)」を参照してください。

## ステップ 2: ランタイム時に値を RLS タグに割り当てる
<a name="quicksight-dev-rls-tags-assign-values"></a>

RLS のタグは、匿名埋め込みにのみ使用できます。`GenerateEmbedUrlForAnonymousUser` API オペレーションを使用してタグの値を設定できます。

**重要**  
API コールでセッションタグを設定する場合、  
セッションタグをセキュリティ認証情報として扱います。セッションタグをエンドユーザーまたはクライアント側のコードに公開しないでください。
サーバー側のコントロールを実装します。セッションタグは、エンドユーザーが変更できるパラメータではなく、信頼できるバックエンドサービスによってのみ設定されていることを確認してください。
セッションタグを列挙から保護します。あるテナントのユーザーが、他のテナントに属する sessionTag 値を検出または推測できないようにします。
アーキテクチャを確認します。ダウンストリームの顧客またはパートナーが API を直接呼び出すことが許可されている場合は、アクセスすべきでないテナントに sessionTag 値を指定できるかどうかを評価します。

以下の例は、前のステップでデータセットで定義された RLS タグに値を割り当てる方法を示しています。

```
POST /accounts/AwsAccountId/embed-url/anonymous-user
	HTTP/1.1
	Content-type: application/json
	{
		“AwsAccountId”: “string”,
		“SessionLifetimeInMinutes”: integer,
		“Namespace”: “string”, // The namespace to which the anonymous end user virtually belongs
		“SessionTags”:  // Optional: Can be used for row-level security
			[
				{
					“Key”: “tag_retailer_id”,
					“Value”: “West,Central,South”
				}
				{
					“Key”: “tag_role”,
					“Value”: “shift_manager”
				}
			],
		“AuthorizedResourceArns”:
			[
				“string”
			],
		“ExperienceConfiguration”:
			{
				“Dashboard”:
					{
						“InitialDashboardId”: “string”
						// This is the initial dashboard ID the customer wants the user to land on. This ID goes in the output URL.
					}
			}
	}
```

以下は、応答の定義の例です。

```
HTTP/1.1 Status
	Content-type: application/json

	{
	"EmbedUrl": "string",
	"RequestId": "string"
	}
```

Quick でユーザーを登録しない RLS サポートは、 `GenerateEmbedUrlForAnonymousUser` API オペレーションでのみサポートされます。このオペレーションでは、`SessionTags` で、データセット列に関連付けられたタグの値を定義できます。

この場合、以下の割り当てが定義されています。
+ `West`、`Central`、および `South` の各値は、ランタイム時に `tag_retailer_id` タグに割り当てられます。区切り文字には、データセットの `TagMultipleValueDelimiter` で定義されたカンマが使用されます。列でコール値を使用するには、値を、タグの作成時に `MatchAllValue` として定義された *\$1* に設定します。
+ 値 `shift_manager` は `tag_role` タグに割り当てられます。

生成された URL を使用するユーザーは、`role` 列に値 `shift_manager` がある行のみを表示できます。このユーザーは、`retailer_id` 列の `West`、`Central`、または `South` 値のみを表示できます。

`GenerateEmbedUrlForAnonymousUser` API オペレーションを使用した匿名ユーザーのダッシュボードの埋め込みの詳細については、[匿名 (未登録) ユーザー向けの Amazon Quick Sight ダッシュボードの埋め込み](embedded-analytics-dashboards-for-everyone.md)「」または*「Amazon Quick API リファレンス*」の[GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)」を参照してください。