

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

# Lake Formation 標籤型存取控制
<a name="tag-based-access-control"></a>

Lake Formation 標籤型存取控制 (LF-TBAC) 是一種授權策略，可根據屬性定義許可。在 Lake Formation 中，這些屬性稱為 *LF 標籤*。您可以將 LF-Tags 連接至 Data Catalog 資源，並使用這些 LF-Tags 將這些資源的許可授予 Lake Formation 主體。當委託人已授予符合資源標籤值的標籤值的存取權時，Lake Formation 允許對這些資源進行操作。

LF-TBAC 有助於快速成長的環境，並有助於處理政策管理變得繁瑣的情況。

當有大量 Data Catalog 物件，包括聯合目錄、資料庫、資料表和檢視時，建議使用 LF-TBAC 來授予 Lake Formation 許可。Lake Formation 支援 Amazon S3 資料表、 Amazon Redshift 資料倉儲和聯合資料來源的聯合目錄的標籤型存取控制 Amazon DynamoDB，例如 SQL Server 和 Snowflake。

**注意**  
IAM 標籤與 LF 標籤不同。這些標籤不可互換。LF 標籤用於授予 Lake Formation 許可，而 IAM 標籤用於定義 IAM 政策。

## Lake Formation 標籤型存取控制的運作方式
<a name="how-TBAC-works"></a>

每個 LF 標籤都是索引鍵/值對，例如 `department=sales`或 `classification=restricted`。金鑰可以有多個定義的值，例如 `department=sales,marketing,engineering,finance`。

若要使用 LF-TBAC 方法，資料湖管理員和資料工程師會執行下列任務。


| 任務 | 任務詳細資訊 | 
| --- | --- | 
| 1. 定義 LF 標籤的屬性和關係。 | - | 
| 2. 在 Lake Formation 中建立 LF 標籤建立者。 | [新增 LF 標籤建立者](TBAC-adding-tag-creator.md) | 
| 3. 在 Lake Formation 中建立 LF-Tag。 | [建立 LF 標籤](TBAC-creating-tags.md) | 
| 4. 將 LF 標籤指派給 Data Catalog 資源。 | [將 LF 標籤指派給 Data Catalog 資源](TBAC-assigning-tags.md) | 
| 5. 將許可授予其他委託人，以將 LF 標籤指派給資源，選擇性使用授予選項。 | [管理 LF-Tag 值許可](TBAC-granting-tags.md) | 
| 6. 將 LF-Tag 表達式授予委託人，選擇性使用授予選項。 | [使用 LF-TBAC 方法授予資料湖許可](granting-catalog-perms-TBAC.md) | 
| 7. （建議） 驗證主體是否可透過 LF-TBAC 方法存取正確的資源後，請撤銷使用具名資源方法授予的許可。 | - | 

假設您必須將許可授予三個資料庫和七個資料表上的三個主體。

![三個使用者圖形位於左側，垂直排列。右側有三個資料庫，分別標記為 A、B 和 C，並垂直排列。資料庫 A 有兩個標記為 A.1 和 A.2 的資料表，資料庫 B 具有標記為 B.1 和 B.2 的資料表，而資料庫 C 具有三個標記為 C.1、C.2 和 C.3 的資料表。十七個箭頭將使用者連接到資料庫和資料表，表示對資料庫和資料表授予使用者。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/TBAC_example_discreet.png)


若要使用具名資源方法達成上圖所示的許可，您必須進行 17 次授予，如下所示 （在虛擬程式碼中）。

```
GRANT CREATE_TABLE ON Database A TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table A.1 TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table B.2 TO PRINCIPAL 1
...
GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 2
GRANT CREATE_TABLE ON Database B TO PRINCIPAL 2
...
GRANT SELECT, INSERT ON Table C.3 TO PRINCIPAL 3
```

現在請考慮如何使用 LF-TBAC 授予許可。下圖指出您已將 LF 標籤指派給資料庫和資料表，並已將 LF 標籤的許可授予委託人。

在此範例中，LF 標籤代表資料湖的區域，其中包含企業資源規劃 (ERP) 應用程式套件不同模組的分析。您可以使用它們來控制對各種模組分析資料的存取。所有 LF 標籤都有金鑰`module`和可能的值 `Sales`、 `Orders`和 `Customers`。範例 LF-Tag 如下所示：

```
module=Sales
```

圖表僅顯示 LF 標籤值。

![如同上圖，三個圖形的使用者位於左側，垂直排列，右側為三個資料庫，分別標記為 A、B 和 C，垂直排列。資料庫 A 有兩個標記為 A.1 和 A.2 的資料表，資料庫 B 具有標記為 B.1 和 B.2 的資料表，而資料庫 C 具有三個標記為 C.1、C.2 和 C.3 的資料表。使用者與資料庫和資料表之間沒有箭頭。反之，使用者旁邊的標記「標記」表示 user1 已獲得 LF 標籤銷售和客戶、使用者 2 已獲得 LF 標籤訂單，而使用者 3 已獲得 LF 標籤客戶。資料庫和資料表旁的旗標會指出下列對資料庫和資料表ofLF 標籤指派：資料庫 A：銷售。資料表 A1：灰色旗標表示銷售繼承自資料庫 A。資料表 A2：訂單，但灰色旗標表示銷售繼承自資料庫 A。資料庫 B：訂單。資料表 B.1 和 B.2 繼承訂單，而資料表 B.2 有客戶。資料庫 C 有客戶，資料表 C.1、C.2 和 C.3 繼承客戶。C 資料表沒有任何其他指派。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/TBAC_example_tags.png)


**標記 Data Catalog 資源和繼承的指派**  
資料表從資料庫繼承 LF 標籤，資料欄從資料表繼承 LF 標籤。繼承的值可以覆寫。在上圖中，暗淡的 LF 標籤會繼承。

由於繼承，資料湖管理員只需要對資源 （虛擬程式碼） 進行下列五個 LF 標籤指派。

```
ASSIGN TAGS module=Sales TO database A
ASSIGN TAGS module=Orders TO table A.2
ASSIGN TAGS module=Orders TO database B
ASSIGN TAGS module=Customers TO table B.2
ASSIGN TAGS module=Customers TO database C
```

**標記授予委託人**  
將 LF 標籤指派給資料庫和資料表之後，資料湖管理員必須僅對主體授予四個 LF 標籤，如下所示 （在虛擬程式碼中）。

```
GRANT TAGS module=Sales TO Principal 1
GRANT TAGS module=Customers TO Principal 1
GRANT TAGS module=Orders TO Principal 2
GRANT TAGS module=Customers TO Principal 3
```

現在，具有 `module=Sales`LF-Tag 的委託人可以使用 LF-Tag `module=Sales` 存取 Data Catalog 資源 （例如，資料庫 A)，具有 `module=Customers` LF-Tag 的委託人可以使用 LF-Tag `module=Customers` 存取資源，以此類推。

上述授予命令不完整。這是因為雖然它們透過 LF 標記資料目錄資源表示委託人具有許可，但不會確切指出委託人在這些資源上擁有哪些 Lake Formation 許可 （例如 `SELECT`、`ALTER`)。因此，下列虛擬程式碼命令會更精確地呈現如何透過 LF 標籤在 Data Catalog 資源上授予 Lake Formation 許可。

```
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Sales TO Principal 1
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Sales TO Principal 1
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 1
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Customers TO Principal 1
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Orders TO Principal 2
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Orders TO Principal 2
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 3
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Customers TO Principal 3
```

**將它放在一起 - 產生資源的許可**  
鑑於指派給上圖中資料庫和資料表的 LF 標籤，以及授予圖表中主體的 LF 標籤，下表列出主體在資料庫和資料表上擁有的 Lake Formation 許可。


| Principal | 透過 LF 標籤授予的許可 | 
| --- | --- | 
| 委託人 1 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/tag-based-access-control.html)  | 
| 委託人 2 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/tag-based-access-control.html)  | 
| 委託人 3 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/tag-based-access-control.html)  | 

**底線**  
在此簡單範例中，使用五個指派操作和八個授予操作，資料湖管理員能夠指定 17 個許可。當有數十個資料庫和數百個資料表時，LF-TBAC 方法對具名資源方法的優勢會變得明確。在假設需要授予每個委託人對每個資源的存取權的情況下，其中 `n(P)`是委託人數目，而 `n(R)`是資源數目：
+ 使用具名資源方法時，所需的授予數量為 `n(P)` ✕ `n(R)`。
+ 透過 LF-TBAC 方法，使用單一 LF-Tag，授予委託人和指派資源的總數為 `n(P)` \+ `n(R)`。

**另請參閱**  
[管理中繼資料存取控制的 LF 標籤](managing-tags.md)
[使用 LF-TBAC 方法授予資料湖許可](granting-catalog-perms-TBAC.md)

**Topics**
+ [Lake Formation 標籤型存取控制的運作方式](#how-TBAC-works)
+ [管理中繼資料存取控制的 LF 標籤](managing-tags.md)
+ [管理中繼資料存取控制的 LF-Tag 表達式](managing-tag-expressions.md)
+ [管理 LF-Tag 值許可](TBAC-granting-tags.md)