在為匿名使用者嵌入儀表板時透過以標籤為基礎的規則使用資料列層級安全 (RLS) 來限制對資料集的存取 - Amazon QuickSight

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

在為匿名使用者嵌入儀表板時透過以標籤為基礎的規則使用資料列層級安全 (RLS) 來限制對資料集的存取

 適用於:企業版 
   目標對象:Amazon QuickSight 管理員和 Amazon QuickSight 開發人員 

當您針對未佈建 (註冊) 的使用者在應用程式中嵌入 Amazon QuickSight 儀表板時 QuickSight,您可以使用含標籤的列層級安全性 (RLS)。在這種情況下,您使用標籤來指定使用者根據其身分可以在儀表板中看到的資料。

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

您不想管理中成千上萬的使用者 QuickSight,因此您可以使用匿名內嵌將選取的儀表板嵌入應用程式中,讓經過驗證和授權的使用者可以看到這些儀表板。但是,您希望零售商只能看到與其業務相關的資料,而不能看到其他公司的資料。您可以透過標籤使用 RLS,以確保客戶只看到與自己相關的資料。

若要這樣做,請完成下列步驟:

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

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

    如需使用 GenerateEmbedUrlForAnonymousUser API 操作為匿名使用者內嵌儀表板的詳細資訊,請參閱 內嵌 QuickSight匿名 (未註冊) 使用者的資料儀表板

在透過標籤使用 RLS 之前,請記住以下幾點:

  • 透過標籤使用 RLS 目前僅支援匿名內嵌,特別是使用 GenerateEmbedUrlForAnonymousUser API 操作實現的內嵌式儀表板。

  • 使用 GenerateEmbedURLForRegisteredUser API 操作或舊的 GetDashboardEmbedUrl API 操作的內嵌式儀表板不支援透過標籤使用 RLS。

  • AWS Identity and Access Management(IAM) 或 QuickSight 身分識別類型不支援 RLS 標籤。

  • 對 SPICE 資料集套用資料列層級安全時,資料集中的每個欄位最多可以包含 2,047 個 Unicode 字元。超過此限制的欄位將在擷取過程中被截斷。若要進一步了解 SPICE 資料配額,請參閱 匯入資料的 SPICE 配額

步驟 1:將 RLS 標籤新增至資料集

您可以將基於標籤的規則添加到 Amazon QuickSight 中的數據集。您也可以呼叫 CreateDataSetUpdateDataSet API 操作來新增以標籤為基礎的規則。如需詳細資訊,請參閱 使用 API 將 RLS 標籤新增至資料集

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

將 RLS 標籤新增至資料集
  1. 在 QuickSight 開始頁面中,選擇左側的 [資料集]。

  2. 資料集頁面上,選擇要新增 RLS 的資料集。

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

    在資料集頁面上選擇資料集時顯示的資料列層級安全選項。
  4. 在開啟的設定資料列層級安全頁面上,選擇以標籤為基礎的規則

  5. 針對資料欄,選擇要新增標籤規則的資料欄。

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

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

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

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

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

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

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

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

    管理標籤表。
  9. 選擇新增

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

  10. 當您準備好將標籤規則套用到資料集時,請選擇套用規則

    以標籤為基礎的規則對話方塊:實現以標籤為基礎的資料列層級安全的「套用規則」按鈕。
  11. 在開啟的「開啟以標籤為基礎的安全?」頁面上,選擇套用並啟動

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

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

    以標籤為基礎的規則切換開關設定為「開啟」以設定資料列層級安全。

    資料集頁面上,資料集資料列中會出現一個鎖定圖示,表示標籤規則已啟用。

    現在您可以使用標籤規則在執行期設定標籤值,如 步驟 2:在執行期為 RLS 標籤指派值 中所述。這些規則只會在使用中時影響 QuickSight 讀者。

    重要

    在資料集上指派並啟用標籤之後,請務必授予 QuickSight 作者權限,以便在編寫儀表板時查看資料集中的任何資料。

    若要授予 QuickSight 作者查看資料集中資料的權限,請建立權限檔案或查詢做為資料集規則使用。如需詳細資訊,請參閱 建立資料列層級安全的資料集規則

建立以標籤為基礎的規則後,會出現一個新的管理規則表,其中顯示以標籤為基礎的規則如何相互關聯。若要變更管理規則表中所列的規則,請選擇規則後面的鉛筆圖示。然後新增或移除標籤,並選擇更新。若要將更新的規則套用到資料集,請選擇套用

帶有編輯和刪除圖示的管理規則表。

(選用) 對 RLS 標籤新增 OR 條件

您也可以將 OR 條件新增至以標籤為基礎的規則,以進一步自訂向 QuickSight 帳戶使用者呈現資料的方式。當您將 OR 條件與以標籤為基礎的規則搭配使用時,如果規則中定義的至少一個標籤有效,則 QuickSight 會顯示視覺效果。

對以標籤為基礎的規則新增 OR 條件
  1. 管理規則表中,選擇新增 OR 條件

    「管理標籤」對話方塊:「新增 OR 條件」按鈕。
  2. 在出現的選取標籤下拉式清單中,選取要對其建立 OR 條件的標籤。您最多可以在管理規則表中新增 50 個 OR 條件。您可以將多個標籤新增至資料集中的單一資料欄,但至少有一個資料欄標籤需要包含在規則中。

    選擇要套用至 OR 條件時使用的標籤。
  3. 選擇更新將條件新增至規則中,然後選擇套用將更新後的規則套用到資料集。

    帶有 RLS 規則和「套用」按鈕的「管理規則」對話方塊。

使用 API 將 RLS 標籤新增至資料集

您也可以透過呼叫 CreateDataSetUpdateDataSet API 操作,在資料集上設定和啟用以標籤為基礎的資料列層級安全。透過下列範例了解如何操作。

CreateDataSet

以下是建立使用以標籤的為基礎的 RLS 之資料集的範例。它假設了前面描述的物流公司的情境。標籤在 row-level-permission-tag-configuration 元素中定義。標籤在您要保護其資料的資料欄上定義。如需有關此選用元素的詳細資訊,請參閱 Amazon QuickSight API 參考RowLevelPermissionTagConfiguration中的。

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_supervisormanager

針對每個標籤,您可以定義 TagMultiValueDelimiterMatchAllValue。這些是選用選項。

  • TagMultiValueDelimiter:此選項可以是您在執行期傳遞值時用來分隔值的任何字串。值最長可為 10 個字元。本例使用逗號作為分隔符號值。

  • MatchAllValue:當您想要按資料集中該資料欄的所有值進行篩選時,此選項可以是您想要使用的任何字元。您可以使用這個字元,而不用一一列出值。如果指定該值,則長度需至少為 1 個字元,最多 256 個字元。本例使用星號用作全部相符值。

設定資料集資料欄的標籤時,可使用強制屬性 Status 進行開啟或關閉。若要啟用標籤規則,請針對此屬性使用 ENABLED 值。透過開啟標籤規則,您可以使用它們在執行期設定標籤值,如 步驟 2:在執行期為 RLS 標籤指派值 中所述。

以下是回應定義的範例。

{ "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" }
重要

在資料集上指派並啟用標籤之後,請務必授予 QuickSight 作者權限,以便在編寫儀表板時查看資料集中的任何資料。

若要授予 QuickSight 作者查看資料集中資料的權限,請建立權限檔案或查詢做為資料集規則使用。如需詳細資訊,請參閱 建立資料列層級安全的資料集規則

如需有關RowLevelPermissionTagConfiguration元素的詳細資訊,請參閱 Amazon QuickSight API 參考RowLevelPermissionTagConfiguration中的。

步驟 2:在執行期為 RLS 標籤指派值

您只能將 RLS 標籤用於匿名內嵌。您可以使用 GenerateEmbedUrlForAnonymousUser API 操作設定標籤的值。

以下範例顯示如何為上一個步驟中資料集中定義的 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 作業中 QuickSight 支援不註冊使用者的 RLS 支援。在此操作中,您可以在 SessionTags 下定義與資料集資料欄關聯的標籤的值。

本例定義下列指派:

  • WestCentralSouth 在執行期指派給 tag_retailer_id 標籤。逗號用作分隔符號,這在資料集中的 TagMultipleValueDelimiter 中定義。若要使用資料欄中的全部值,您可以將該值設為 *,該值在建立標籤時定義為 MatchAllValue

  • 指派值 shift_managertag_role 標籤。

使用產生的 URL 的使用者只能檢視 role 資料欄中具有 shift_manager 值的資料列。該使用者只能檢視 retailer_id 資料欄中的值 WestCentralSouth

如需使用 GenerateEmbedUrlForAnonymousUser API 作業為匿名使用者嵌入儀表板的詳細資訊內嵌 QuickSight匿名 (未註冊) 使用者的資料儀表板,請參閱 Amazon QuickSight API 參考GenerateEmbedUrlForAnonymousUser中的或