

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在為匿名使用者嵌入儀表板時，透過以標籤為基礎的規則使用資料列層級安全來限制對資料集的存取
<a name="quicksight-dev-rls-tags"></a>


|  | 
| --- |
|  適用於：企業版  | 


|  | 
| --- |
|    目標對象：Amazon Quick Administrators 和 Amazon Quick Developer  | 

當您為未在 Quick 中佈建 （註冊） 的使用者在應用程式中嵌入 Amazon Quick 儀表板時，您可以使用資料列層級安全性 (RLS) 來篩選/限制具有標籤的資料。標籤是使用者指定的字串，可識別應用程式中的工作階段。您可以使用標籤來實作資料集的 RLS 控制項。透過在資料集中設定 RLS 型限制，快速根據與使用者身分/工作階段繫結的工作階段標籤來篩選資料。

例如，假設貴公司是一家物流公司，提供面向各個零售商客戶的應用程式。這些零售商的數千名使用者存取該應用程式，以查看與訂單從倉庫發貨相關的指標。

您不想在 Quick 中管理數千名使用者，因此您可以使用匿名內嵌，在您的應用程式中嵌入已驗證和授權使用者可以看到的所選儀表板。但是，您希望零售商只能看到與其業務相關的資料，而不能看到其他公司的資料。您可以透過標籤使用 RLS，以確保客戶只看到與自己相關的資料。

若要這樣做，請完成下列步驟：

1. 新增 RLS 標籤至資料集。

1. 使用 `GenerateEmbedUrlForAnonymousUser` API 操作在執行期為這些標籤指派值。

   如需使用 `GenerateEmbedUrlForAnonymousUser` API 操作為匿名使用者內嵌儀表板的詳細資訊，請參閱 [為匿名 （未註冊） 使用者嵌入 Amazon Quick Sight 儀表板](embedded-analytics-dashboards-for-everyone.md)。

在透過標籤使用 RLS 之前，請記住以下幾點：
+ 透過標籤使用 RLS 目前僅支援匿名內嵌，特別是使用 `GenerateEmbedUrlForAnonymousUser` API 操作實現的內嵌式儀表板。
+ 使用 `GenerateEmbedURLForRegisteredUser` API 操作或舊的 `GetDashboardEmbedUrl` API 操作的內嵌式儀表板不支援透過標籤使用 RLS。
+  AWS Identity and Access Management (IAM) 或快速身分類型不支援 RLS 標籤。
+ 對 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)。

使用下列程序將 RLS 標籤新增至 Quick 中的資料集。

**將 RLS 標籤新增至資料集**

1. 從快速入門頁面，選擇左側**的資料**。

1. 選擇您要新增 RLS 的資料集。

1. 在開啟的資料集詳細資訊頁面上，針對**資料列層級安全**，選擇**設定**。

1. 在開啟的**設定資料列層級安全**頁面上，選擇**以標籤為基礎的規則**。

1. 針對**資料欄**，選擇要新增標籤規則的資料欄。

   例如，在這個物流公司的案例中，使用的是 `retailer_id` 資料欄。

   僅列出資料類型為字串的資料欄。

1. 針對**標籤**，輸入標籤索引鍵。您可以輸入任何您想要的標籤名稱。

   例如，在這個物流公司的案例中，使用的標籤索引鍵是 `tag_retailer_id`。執列此操作會根據存取應用程式的零售商設定資料列層級安全。

1. (選用) 針對**分隔符號**，從清單中選擇分隔符號，或輸入所需分隔符號。

   為標籤指派多個值時，可以使用分隔符號分隔文字字串。分隔符號的值最長可為 10 個字元。

1. (選用) 針對**全部相符**，選擇**\***，或輸入所需的一個或多個字元。

   當您想要按資料集中該資料欄的所有值進行篩選時，此選項可以是您想要使用的任何字元。您可以使用這個字元，而不用一一列出值。如果指定此值，則至少可以是一個字元，或長度最多為 256 個字元。

1. 選擇**新增**。

   標籤規則已新增至資料集並列在底部，但尚未套用。若要將另一個標籤規則新增至資料集，請重複步驟 5-9。若要編輯標籤規則，請選擇規則後面的鉛筆圖示。若要刪除標籤規則，請選擇規則後面的刪除圖示。您最多可以為每個資料集新增 50 個標籤。

1. 當您準備好將標籤規則套用到資料集時，請選擇**套用規則**。

1. 在開啟的「**開啟以標籤為基礎的安全？**」頁面上，選擇**套用並啟動**。

   以標籤為基礎的規則現在處於作用中狀態。在**設定資料列層級安全**頁面上，會出現一個切換開關，可用於開啟和關閉資料集的標籤規則。

   若要關閉資料集的所有以標籤為基礎的規則，請關閉**以標籤為基礎的規則**開關，然後在出現的文字方塊中輸入 "confirm"。

   在**資料**頁面上，資料集列中會出現鎖定圖示，指出已啟用標籤規則。

   現在您可以使用標籤規則在執行期設定標籤值，如 [步驟 2：在執行期為 RLS 標籤指派值](#quicksight-dev-rls-tags-assign-values) 中所述。這些規則只會在作用中時影響快速讀取器。
**重要**  
在資料集上指派和啟用標籤後，請務必在編寫儀表板時授予 Quick 作者查看資料集中任何資料的許可。  
若要授予快速作者在資料集中查看資料的許可，請建立許可檔案或查詢以用作資料集規則。如需詳細資訊，請參閱[建立資料列層級安全的資料集規則](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 條件時，如果規則中定義的至少一個標籤有效，則 Quick 中的視覺效果會顯示。

**對以標籤為基礎的規則新增 OR 條件**

1. 在**管理規則**表中，選擇**新增 OR 條件**。

1. 在出現的**選取標籤**下拉式清單中，選取要對其建立 OR 條件的標籤。您最多可以在**管理規則**表中新增 50 個 OR 條件。您可以將多個標籤新增至資料集中的單一資料欄，但至少有一個資料欄標籤需要包含在規則中。

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` 部分中定義。在此範例中，基於兩欄定義了兩個標籤：
+ `tag_retailer_id` 標籤索引鍵是為 `retailer_id` 資料欄定義的。在本例中，針對物流公司而言，這會根據存取應用程式的零售商設定資料列層級安全。
+ `tag_role` 標籤索引鍵是為 `role` 資料欄定義的。在本例中，針對物流公司而言，這會根據從特定零售商存取應用程式的使用者角色設定額外的資料列層級安全層。例如 `store_supervisor` 或 `manager`。

針對每個標籤，您可以定義 `TagMultiValueDelimiter` 和 `MatchAllValue`。這些是選用選項。
+ `TagMultiValueDelimiter`：此選項可以是您在執行期傳遞值時用來分隔值的任何字串。值最長可為 10 個字元。本例使用逗號作為分隔符號值。
+ `MatchAllValue`：當您想要按資料集中該資料欄的所有值進行篩選時，此選項可以是您想要使用的任何字元。您可以使用這個字元，而不用一一列出值。如果指定該值，則長度需至少為 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 作者查看資料集中任何資料的許可。  
若要授予快速作者在資料集中查看資料的許可，請建立許可檔案或查詢以用作資料集規則。如需詳細資訊，請參閱[建立資料列層級安全的資料集規則](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}}"
	}
```

只有在 `GenerateEmbedUrlForAnonymousUser` API 操作中才支援在 Quick 中註冊使用者的 RLS 支援。在此操作中，您可以在 `SessionTags` 下定義與資料集資料欄關聯的標籤的值。

本例定義下列指派：
+ 值 `West`、`Central` 和 `South` 在執行期指派給 `tag_retailer_id` 標籤。逗號用作分隔符號，這在資料集中的 `TagMultipleValueDelimiter` 中定義。若要使用資料欄中的全部值，您可以將該值設為 *\**，該值在建立標籤時定義為 `MatchAllValue`。
+ 指派值 `shift_manager` 給 `tag_role` 標籤。

使用產生的 URL 的使用者只能檢視 `role` 資料欄中具有 `shift_manager` 值的資料列。該使用者只能檢視 `retailer_id` 資料欄中的值 `West`、`Central` 或 `South`。

如需使用 `GenerateEmbedUrlForAnonymousUser` API 操作為匿名使用者內嵌儀表板的詳細資訊，請參閱《*Amazon Quick API 參考*》中的 [為匿名 （未註冊） 使用者嵌入 Amazon Quick Sight 儀表板](embedded-analytics-dashboards-for-everyone.md)或 [GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html) 