

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon Quick 中使用行级安全
<a name="row-level-security"></a>


|  | 
| --- |
|  适用于：企业版  | 

在 Amazon Quick 的企业版中，您可以通过配置行级安全 (RLS) 来限制对数据集的访问。在共享数据集之前或之后，您可以执行该操作。当您使用 RLS 与数据集所有者共享数据集时，他们仍然可以看到所有数据。但是，当您与读者共享该数据集时，他们只能看到受权限数据集规则限制的数据。

此外，当您在应用程序中为未注册的 Quick 用户嵌入 Amazon Quick 控制面板时，您可以对带有标签的数据使用行级安全 (RLS)。 filter/restrict 标签是用户指定的字符串，用于标识应用程序中的会话。您可以使用标签为数据集实现 RLS 控制。通过在数据集中配置基于 RLS 的限制，Quick 会根据与用户身份/会话关联的会话标签筛选数据。

您可以使用用户名或基于组的规则、基于标签的规则或两者来限制对数据集的访问。

如果要保护在 Quick 中配置（注册）的用户或群组的数据，请选择基于用户的规则。为此，请选择一个权限数据集，该数据集包含按列为访问数据的每个用户或组设置的规则。只有规则中标识的用户或组才有权访问数据。

只有当您使用嵌入式仪表板并希望保护未在 Quick 中设置的用户（未注册用户）的数据时，才选择基于标签的规则。为此，请在列上定义标签来保护数据。嵌入控制面板时，必须传递标签的值。

**Topics**
+ [使用采用基于用户的规则的行级别安全性限制对数据集的访问](restrict-access-to-a-data-set-using-row-level-security.md)
+ [为匿名用户嵌入控制面板时，使用采用基于标签的规则的行级别安全性来限制对数据集的访问](quicksight-dev-rls-tags.md)

# 使用采用基于用户的规则的行级别安全性限制对数据集的访问
<a name="restrict-access-to-a-data-set-using-row-level-security"></a>


|  | 
| --- |
|  适用于：企业版  | 

在 Amazon Quick 的企业版中，您可以通过配置行级安全 (RLS) 来限制对数据集的访问。在共享数据集之前或之后，您可以执行该操作。当您使用 RLS 与数据集所有者共享数据集时，他们仍然可以看到所有数据。但是，当您与读者共享该数据集时，他们只能看到受权限数据集规则限制的数据。通过添加行级别安全性，您可以进一步控制其访问权限。

**注意**  
将 SPICE 数据集应用于行级别安全性时，数据集中的每个字段最多可以包含 2,047 个 Unicode 字符。如果字段包含的内容超过该限额，则会在摄取过程中被截断。要了解有关 SPICE 数据限额的更多信息，请参阅[导入数据的 SPICE 限额](data-source-limits.md#spice-limits)。

为此，您需要创建一个查询或文件，其中包含一列用于标识用户或群组。你可以使用`UserName`和`GroupName`，也可以使用`UserARN`和`GroupARN`。您可以将这看作是为该用户或组*添加规则*。然后您可以为要授予或限制访问权限的每个字段向查询或文件添加一个列。对于您添加的每个用户名或组名，请添加每个字段的值。您可以使用 NULL (没有值) 表示所有值。要查看示例数据集规则，请参阅[为行级别安全性创建数据集规则](#create-data-set-rules-for-row-level-security)。

要应用数据集规则，请将规则作为权限数据集添加到您的数据集。请记住以下几点：
+ 权限数据集不能包含重复值。评估如何应用规则时，将忽略重复项。
+ 指定的每个用户或组只能看到*匹配*数据集规则中字段值的行。
+ 如果为某个用户或组添加规则，并将其余列保留为“没有值”（NULL），则表示您向其授予访问所有数据的权限。
+ 如果不为用户或组添加规则，则该用户或组无法看到任何数据。
+ 应用于每个用户的完整规则记录集不得超过 999 个。此限制适用于直接分配给用户名的规则总数以及通过组名称分配给用户的任何规则。
+ 如果字段包含逗号 (,)，Amazon Quick 会将每个用逗号分隔的单词视为筛选器中的单个值。例如，在 `('AWS', 'INC')` 中，`AWS,INC` 被视为两个字符串：`AWS` 和 `INC`。要使用 `AWS,INC` 筛选，请在权限数据集中用双引号将字符串包装起来。

  如果受限数据集是一个 SPICE 数据集，则每个用户对每个受限字段应用的筛选值数量不能超过 19.2 万个。这适用于直接分配给用户名的筛选条件值总数以及通过组名称分配给用户的任何筛选条件值。

  如果受限数据集是直接查询数据集，则每个用户应用的筛选值数量因数据来源而异。

  超过筛选值限制可能会导致视觉渲染失败。我们建议您在受限数据集中添加一个附加列，以便根据原始受限列将行分成几组，从而缩短筛选条件列表。

Amazon Quick 将空格视为文字值。如果您限制的字段中有一个空格，则数据集规则适用于这些行。Amazon Quick 将两个 NULLs 空白（空字符串 “”）都视为 “无值”。NULL 是一个空字段值。

根据数据集的具体数据来源，您可以配置直接查询来访问权限表。以空格分隔的词不需要用引号分隔。如果您使用直接查询，您可以轻松更改原始数据来源中的查询。

您也可以从文本文件或电子表格中上传数据集规则。如果您使用的是逗号分隔值 (CSV) 文件，请不要在给定的行中包含任何空格。以空格分隔的词需要用引号分隔。如果使用基于文件的数据集规则，请通过在数据集的权限设置中覆盖现有规则来应用任何更改。

在 “数据” 屏幕中，受限制**的数据**集标有 “**受**限制” 一词。

从已激活 RLS 规则的父数据集创建的子数据集，将保留与父数据集相同的 RLS 规则。您可以向子数据集添加更多 RLS 规则，但不能移除该数据集继承自父数据集的 RLS 规则。

只有通过直接查询，才能创建从已激活 RLS 规则的父数据集创建的子数据集。SPICE 不支持继承父数据集的 RLS 规则的子数据集。

行级别安全性仅适用于包含文本数据（string、char、varchar 等）的字段。它目前不适用于日期或数字字段。使用行级别安全性（RLS）的数据集不支持异常检测。

## 为行级别安全性创建数据集规则
<a name="create-data-set-rules-for-row-level-security"></a>

要创建权限文件或查询用作数据集规则，请按照以下过程操作。

**创建权限文件或查询用作数据集规则**

1. 创建一个文件或查询，其中包含适用于行级别安全性的数据集规则（权限）。

   字段顺序至关紧要。不过，所有字段区分大小写。确保它们与字段名称和值完全匹配。

   结构应类似于下列项目之一。确保您至少具有一个标识用户或组的字段。您可以包含两者，但只需要一个，并且一次只使用一个。您可以为用户或组所用的字段选择任意名称。
**注意**  
如果您要指定群组，请仅使用 Amazon Quick 群组或 Microsoft AD 群组。

   以下示例显示了一个包含组的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例演示了一个包含用户名的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例显示了一个包含用户和群组 Amazon 资源名称 (ARNs) 的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   如果您使用 .csv 文件，结构应与以下某个示例相似。

   ```
   UserName,SalesRegion,Segment
   AlejandroRosalez,EMEA,"Enterprise,SMB,Startup"
   MarthaRivera,US,Enterprise
   NikhilJayashankars,US,SMB
   PauloSantos,US,Startup
   SaanviSarkar,APAC,"SMB,Startup"
   sales-tps@example.com,"",""
   ZhangWei,APAC-Sales,"Enterprise,Startup"
   ```

   ```
   GroupName,SalesRegion,Segment
   EMEA-Sales,EMEA,"Enterprise,SMB,Startup"
   US-Sales,US,Enterprise
   US-Sales,US,SMB
   US-Sales,US,Startup
   APAC-Sales,APAC,"SMB,Startup"
   Corporate-Reporting,"",""
   APAC-Sales,APAC,"Enterprise,Startup"
   ```

   ```
   UserARN,GroupARN,SalesRegion
   arn:aws:quicksight:us-east-1:123456789012:user/Bob,arn:aws:quicksight:us-east-1:123456789012:group/group-1,APAC
   arn:aws:quicksight:us-east-1:123456789012:user/Sam,arn:aws:quicksight:us-east-1:123456789012:group/group-2,US
   ```

   以下是一个 SQL 示例。

   ```
   /* for users*/
   	select User as UserName, SalesRegion, Segment
   	from tps-permissions;
   
   	/* for groups*/
   	select Group as GroupName, SalesRegion, Segment
   	from tps-permissions;
   ```

1. 根据数据集规则创建数据集。要确保您可以轻松找到该数据集，请为其指定有意义的名称，例如 **Permissions-Sales-Pipeline**。

## 标记行级别安全性的规则数据集
<a name="rules-dataset-flagging-for-row-level-security"></a>

使用以下过程将数据集适当地标记为规则数据集。

规则数据集是一个标志，用于区分用于行级别安全性的权限数据集和常规数据集。如果权限数据集在 2025 年 3 月 31 日之前应用于常规数据集，则它将在**数据集**登录页面中具有规则数据集标志。

如果权限数据集在 2025 年 3 月 31 日之前未应用于常规数据集，则它将被归类为常规数据集。要将其用作规则数据集，请复制权限数据集并在创建数据集时在控制台上将其标记为规则数据集。选择 “编辑数据集”，然后在选项下选择 “按规则重复数据集”。

要成功将其复制为规则数据集，请确保原始数据集具有：1. 必需的用户元数据或组元数据列；2. 仅字符串类型的列。

要在控制台上创建新的规则数据集，请在“新建数据集”下拉列表中选择“新建规则数据集”。以编程方式创建规则数据集时，请添加以下参数：[UseAs: RLS\$1R](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSet.html#API_CreateDataSet_RequestSyntax) ULES。这是一个可选参数，仅用于创建规则数据集。一旦通过控制台或以编程方式创建了数据集，并将其标记为规则数据集或常规数据集，就无法更改。

一旦数据集被标记为规则数据集，Amazon Quick 就会对其应用严格的 SPICE 摄取规则。为了确保数据完整性，如果存在无效行或单元格超过长度限制，规则数据集的 SPICE 摄取将会失败。您必须修复摄取问题才能重新启动成功的摄取。严格的摄取规则仅适用于规则数据集。当出现跳过行或字符串截断的情况时，常规数据集不会出现数据集摄取失败。

## 应用行级别安全性
<a name="apply-row-level-security"></a>

要通过将文件或查询用作包含权限规则的数据集来应用行级别安全性（RLS），请按照以下过程操作。

**使用文件或查询应用行级别安全性**

1. 确认已将您的规则添加为新数据集。如果添加了这些规则，但在数据集列表中看不到这些规则，请刷新屏幕。

1. 在**数据**页面上，选择数据集

1. 在打开的数据集详细信息页面上，为**行级别安全性**选择**设置**。

1. 在打开的**设置行级别安全性**页面上，选择**基于用户的规则**。

1. 从显示的数据集列表中选择自己的权限数据集。

   如果该屏幕上未显示您的权限数据集，请返回到自己的数据集，然后刷新该页面。

1. 对于**权限策略**，选择**授予对数据集的访问权限**。每个数据集仅具有一个活动权限数据集。如果您尝试添加第二个权限数据集，它将覆盖现有的数据集。
**重要**  
在使用行级别安全性时，某些限制适用于 NULL 和空字符串值：  
如果您的数据集在受限制的字段中具有 NULL 值或空字符串（“”），在应用限制后，将忽略这些行。
在权限数据集中，NULL 值和空字符串以相同方式处理。有关更多信息，请参阅下表。
为了防止意外泄露敏感信息，Amazon Quick 跳过了向所有人授予访问权限的空白 RLS 规则。当一行的所有列都没有值时，就会出现*空 RLS 规则*。Quick RLS 将 NULL、空字符串 (“”) 或逗号分隔的空字符串（例如 “、、、”）视为无值。  
跳过空规则后，其他非空 RLS 规则仍然适用。
如果权限数据集只有空规则且所有空规则都被跳过，则任何人都无法访问受此权限数据集限制的任何数据。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   您与之共享控制面板的任何用户都可以查看其中的所有数据，除非数据集规则限制数据集。

1. 要保存更改，请选择**应用数据集**。然后，在**保存数据集规则？**页面上选择**应用并激活**。权限更改将立即应用于现有用户。

1. （可选）要删除权限，请先从数据集中删除数据集规则。

   确保已删除数据集规则。接下来，选择权限数据集，然后选择**删除数据集**。

   要覆盖权限，请选择新的权限数据集，然后应用该数据集。您可以重复使用相同的数据集名称。但是，请务必在**权限**屏幕中应用新权限来激活这些权限。SQL 查询会动态更新，因此可以在 Amazon Quick 之外对其进行管理。对于查询，权限会在自动刷新直接查询缓存时更新。

从目标数据集中删除基于文件的权限数据集之前，如果已删除该数据集，则受限制的用户无法访问该数据集。在数据集处于该状态时，它仍标记为**受限**。不过，在查看该数据集的**权限**时，您可以看到该数据集没有选择的数据集规则。

要解决该问题，应指定新的数据集规则。创建具有相同名称的数据集不足以解决该问题。您必须在**权限**屏幕中选择新权限数据集。该限制不适用于直接 SQL 查询。

# 为匿名用户嵌入控制面板时，使用采用基于标签的规则的行级别安全性来限制对数据集的访问
<a name="quicksight-dev-rls-tags"></a>


|  | 
| --- |
|  适用于：企业版  | 


|  | 
| --- |
|    目标受众：Amazon Quick 管理员和 Amazon Quick 开发者  | 

当您在应用程序中为未在 Quick 中配置（注册）的用户嵌入 Amazon Quick 控制面板时，您可以使用行级安全 (RLS) 来 filter/restrict 保护带有标签的数据。标签是用户指定的字符串，用于标识应用程序中的会话。您可以使用标签为数据集实现 RLS 控制。通过在数据集中配置基于 RLS 的限制，Quick 根据与用户身份/会话关联的会话标签筛选数据。

例如，假设您的物流公司会为各种零售商提供面向客户的应用程序。来自这些零售商的成千上万名用户会访问您的应用程序，查看与他们的订单如何从您的仓库发货相关的指标。

您不想在 Quick 中管理成千上万的用户，因此您可以使用匿名嵌入将选定的仪表板嵌入到您的应用程序中，经过身份验证和授权的用户可以看到这些仪表板。不过，您要确保零售商只能看到与其业务相关的数据，而不会看到其他业务数据。您可以使用带标签的 RLS 来确保客户只能看到与他们相关的数据。

为此，请完成以下步骤：

1. 向数据集添加 RLS 标签。

1. 在运行时系统中使用 `GenerateEmbedUrlForAnonymousUser` API 操作为这些标签分配值。

   有关使用 `GenerateEmbedUrlForAnonymousUser` API 操作为匿名用户嵌入控制面板的更多信息，请参阅[为匿名（未注册）用户嵌入 Amazon Quick Sight 控制面板](embedded-analytics-dashboards-for-everyone.md)。

使用带标签的 RLS 之前，请记住以下几点：
+ 目前仅匿名嵌入尤其是使用 `GenerateEmbedUrlForAnonymousUser` API 操作的嵌入式控制面板，才支持使用带标签的 RLS。
+ 使用 `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)。

使用以下步骤在 Quick 中向数据集添加 RLS 标签。

**向数据集添加 RLS 标签**

1. 在快速入门页面中，选择左侧**的数据**。

1. 选择要向其添加 RLS 的数据集。

1. 在打开的数据集详细信息页面上，为**行级别安全性**选择**设置**。

1. 在打开的**设置行级别安全性**页面上，选择**基于标签的规则**。

1. 对于**列**，选择要添加标签规则的列。

   例如，若为物流公司，则使用 `retailer_id` 列。

   仅列出数据类型为字符串的列。

1. 对于**标签**，输入标签键。您可以输入所需的任何标签名称。

   例如，若为物流公司，则使用 `tag_retailer_id` 标签键。这样做可以根据访问应用程序的零售商来设置行级别安全性。

1. （可选）对于**分隔符**，从列表中选择一个分隔符，或输入自己的分隔符。

   为标签分配多个值时，可以使用分隔符来分隔文本字符串。分隔符的值最长可达 10 个字符。

1. （可选）对于**全部匹配**，选择 **\$1**，或输入自己的一个或多个字符。

   在要按数据集中该列的所有值进行筛选时，此选项可以是您希望使用的任何字符。您可以使用字符，而不是逐一列出值。如果指定了此值，则其长度可以至少为一个字符，或最多 256 个字符。

1. 选择**添加**。

   标签规则已添加到数据集并在底部列出，但尚未应用。要向数据集添加其他标签规则，请重复步骤 5 到 9。要编辑标签规则，请选择规则后面的铅笔图标。要删除标签规则，请选择规则后面的删除图标。您最多可以向数据集添加 50 个标签。

1. 准备好将标签规则应用于数据集时，选择**应用规则**。

1. 在打开的**是否启用基于标签的安全性？**页面中，选择**应用并激活**。

   基于标签的规则现已激活。**设置行级别安全性**页面将显示一个切换开关，供您开启和关闭数据集的标签规则。

   要关闭数据集的所有基于标签的规则，请关闭**基于标签的规则**开关，然后在出现的文本框中输入“确认”。

   在**数据**页面上，数据集行中会出现一个锁形图标，表示标签规则已启用。

   您现在可以在运行时系统中使用标签规则来设置标签值，如 [步骤 2：在运行时系统中为 RLS 标签分配值](#quicksight-dev-rls-tags-assign-values) 中所述。这些规则仅在处于活动状态时影响快速阅读器。
**重要**  
在数据集上分配并启用标签后，请确保授予 Quick authors 权限，以便在创作仪表板时查看数据集中的任何数据。  
要授予 Quick 作者查看数据集中数据的权限，请创建权限文件或查询以用作数据集规则。有关更多信息，请参阅 [为行级别安全性创建数据集规则](restrict-access-to-a-data-set-using-row-level-security.md#create-data-set-rules-for-row-level-security)。

创建基于标签的规则后，将出现一个新的**管理规则**表，其中会显示基于标签的规则之间的关系。要更改**管理规则**表中列出的规则，请选择规则后面的铅笔图标。然后添加或移除标签，并选择**更新**。要将更新后的规则应用于数据集，请选择**应用**。

### （可选）将 OR 条件添加到 RLS 标签
<a name="quicksight-dev-rls-tags-or"></a>

您还可以在基于标签的规则中添加 OR 条件，以进一步自定义向 Quick 账户用户显示数据的方式。当您在基于标签的规则中使用 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` – 在要按数据集中该列的所有值进行筛选时，此选项可以是您希望使用的任何字符。您可以使用字符，而不是逐一列出值。如果指定了此值，其长度至少为一个字符，最多为 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 作者查看数据集中数据的权限，请创建权限文件或查询以用作数据集规则。有关更多信息，请参阅 [为行级别安全性创建数据集规则](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` 中定义的分隔符使用一个逗号。要在列中使用调用值，可以将值设置为 *\$1*，该值在创建标签时定义为 `MatchAllValue`。
+ 值 `shift_manager` 被分配给 `tag_role` 标签。

使用生成的 URL 的用户只能查看 `role` 列中包含 `shift_manager` 值的行。该用户只能查看 `retailer_id` 列中的值 `West`、`Central` 或 `South`。

有关使用 `GenerateEmbedUrlForAnonymousUser` API 操作为匿名用户嵌入控制面板的更多信息[为匿名（未注册）用户嵌入 Amazon Quick Sight 控制面板](embedded-analytics-dashboards-for-everyone.md)，请参阅或[GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)在 *Amazon Quick API 参考*中