

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

# Lake Formation 基于标签的访问控制
<a name="tag-based-access-control"></a>

Lake Formation 基于标签的访问控制 (LF-TBAC) 是一种基于属性定义权限的授权策略。在 Lake Formation 中，这些属性被称为“LF 标签”。**您可以将 LF 标签附加到数据目录资源，并使用这些 LF 标签向 Lake Formation 主体授予对这些资源的权限。当主体已获授权，可以访问与资源标签值匹配的标签值时，Lake Formation 允许对这些资源执行操作。

LF-TBAC 在快速增长的环境中非常有用，并在策略管理变得繁琐的情况下可以提供帮助。

当有大量 Data Catalog 对象（包括联合目录、数据库、表和视图）时，建议使用 LF-TBAC 方法来授予 Lake Formation 权限。Lake Formation 支持对亚马逊 S3 表、 Amazon Redshift 数据仓库和联合数据源（例如 SQL Server 和 Snowflake）的联合目录进行基于标签的访问控制。 Amazon DynamoDB

**注意**  
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 方法，数据湖管理员和数据工程师需要执行以下任务。


| Task | 任务详细信息 | 
| --- | --- | 
|  1. 定义 LF 标签的属性和关系。  | - | 
|  2. 在 Lake Formation 中创建 LF 标签创建者。  | [添加 LF 标签创建者](TBAC-adding-tag-creator.md) | 
|  3. 在 Lake Formation 中创建 LF 标签。  | [创建 LF 标签](TBAC-creating-tags.md) | 
|  4. 将 LF 标签分配给数据目录资源。  | [将 LF 标签分配给数据目录资源](TBAC-assigning-tags.md) | 
|  5. 向其他主体授予权限以将 LF 标签分配给资源，也可以使用授予选项。  | [管理 LF 标签值权限](TBAC-granting-tags.md) | 
|  6. 向主体授予 LF 标签表达式，也可以使用授予选项。  | [使用 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 的表。17 个箭头将用户与数据库和表连接起来，表示向用户授予对数据库和表的权限。\]](http://docs.aws.amazon.com/zh_cn/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 标签示例如下所示：

```
module=Sales
```

该图仅显示 LF 标签值。

![\[与上图一样，左侧是垂直排列的三个用户的图形，右侧是垂直排列的三个标为 A、B 和 C 的数据库。数据库 A 有两个标为 A.1 和 A.2 的表，数据库 B 有两个标为 B.1 和 B.2 的表，数据库 C 有三个标为 C.1、C.2 和 C.3 的表。用户与数据库和表之间没有箭头。取而代之的是，用户旁边标有“标志”表示用户 1 已被授予 LF 标签 Sales 和 Customers，用户 2 已被授予 LF 标签 Orders，用户 3 已被授予 LF 标签“Customers”。数据库和表旁边的标志表示对数据库和表的以下 LF 标签分配：数据库 A：Sales。表 A1：灰显标志表示 Sales 继承自数据库 A。表 A2：Orders，但灰显标志表示 Sales 继承自数据库 A。数据库 B：Orders。表 B.1 和 B.2 继承 Orders，表 B.2 具有 Customers。数据库 C 具有 Customers，表 C.1、C.2 和 C.3 继承 Customers。C 表没有任何其他分配。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/TBAC_example_tags.png)


**对数据目录资源和继承的标签分配**  
表从数据库继承 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 标签分配给数据库和表后，数据湖管理员必须仅向主体授予 4 个 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 标签的主体可以访问带有 `module=Sales` LF 标签的数据目录资源（例如，数据库 A），具有 `module=Customers` LF 标签的主体可以访问带有 `module=Customers` LF 标签的资源，依此类推。

上述授予命令不完整。这是因为，尽管它们通过 LF 标签指示主体对其具有权限的数据目录资源，但它们并未准确指示主体对这些资源具有哪些 Lake Formation 权限（例如 `SELECT`、`ALTER`）。因此，以下伪代码命令更准确地表示了如何通过 LF 标签授予对数据目录资源的 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_cn/lake-formation/latest/dg/tag-based-access-control.html)  | 
| 主体 2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/tag-based-access-control.html)  | 
| 主体 3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/tag-based-access-control.html)  | 

**总结**  
在这个简单的示例中，使用 5 项分配操作和 8 项授予操作，数据湖管理员能够指定 17 项权限。当有数十个数据库和数百个表时，LF-TBAC 方法相对于命名资源方法的优势就显而易见了。假设需要向每个主体授予对每种资源的访问权限，其中 `n(P)` 是主体的数量，`n(R)` 是资源的数量：
+ 使用命名资源方法时，所需的授予数为 `n(P)` ✕ `n(R)`。
+ 通过 LF-TBAC 方法，使用单个 LF 标签，向主体的授予和对资源的分配总数为 `n(P)` \$1 `n(R)`。

**另请参阅**  
[管理 LF 标签以实现元数据访问控制](managing-tags.md)
[使用 LF-TBAC 方法授予数据湖权限](granting-catalog-perms-TBAC.md)

**Topics**
+ [Lake Formation 基于标签的访问控制的工作原理](#how-TBAC-works)
+ [管理 LF 标签以实现元数据访问控制](managing-tags.md)
+ [管理 LF 标签表达式以实现元数据访问控制](managing-tag-expressions.md)
+ [管理 LF 标签值权限](TBAC-granting-tags.md)

# 管理 LF 标签以实现元数据访问控制
<a name="managing-tags"></a>

要使用 Lake Formation 基于标签的访问控制（LF-TBAC）方法来保护 Data Catalog 对象（例如，目录、数据库、表、视图和列），您可以创建 LF 标签，将其分配给资源，然后向主体授予 LF 标签权限。

在将 LF 标签分配给 Data Catalog 对象或向主体授予权限之前，需要先定义 LF 标签。只有数据湖管理员或具有 LF 标签创建者权限的主体才能创建 LF 标签。

**LF 标签创建者**  
LF 标签创建者是有权创建和管理 LF 标签的非管理员主体。数据湖管理员可以使用 Lake Formation 控制台或 CLI 添加 LF 标签创建者。LF 标签创建者具有隐式 Lake Formation 权限，可以更新和删除 LF 标签、将 LF 标签分配给资源，以及向其他主体授予 LF 标签权限和 LF 标签值权限。

通过 LF 标签创建者角色，数据湖管理员可以将标签管理任务（例如创建和更新标签键和值）委派给非管理员主体。数据湖管理员还可以向 LF 标签创建者授予可授予的 `Create LF-Tag` 权限。然后，LF 标签创建者可以向其他主体授予创建 LF 标签的权限。

 您可以授予对 LF 标签的两种权限：
+ LF 标签权限 - `Create LF-Tag`、`Alter` 和 `Drop`。创建、更新和删除 LF 标签需要这些权限。

  数据湖管理员和 LF 标签创建者隐式具有对其创建的 LF 标签的这些权限，并且可以向主体显式授予这些权限，以管理数据湖中的标签。
+ LF 标签键值对权限 - `Assign`、`Describe` 和 `Grant with LF-Tag expressions`。需要这些权限才能将 LF 标签分配给 Data Catalog 对象，以及使用 Lake Formation 基于标签的访问控制向主体授予对资源的权限。LF 标签创建者在创建 LF 标签时会隐式获得这些权限。

在获得 `Create LF-Tag` 权限并成功创建 LF 标签后，LF 标签创建者可以将 LF 标签分配给资源，并向其他非管理员主体授予 LF 标签权限（`Create LF-Tag`、`Alter` 和 `Drop`），以管理数据湖中的标签。你可以使用 Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI来管理 LF-Tag。

**注意**  
 数据湖管理员具有隐式 Lake Formation 权限，可以创建、更新和删除 LF 标签、将 LF 标签分配给资源，以及向其他主体授予 LF 标签权限。

有关最佳实践和注意事项，请参阅 [Lake Formation 基于标签的访问控制最佳实践和注意事项](lf-tag-considerations.md)

**Topics**
+ [添加 LF 标签创建者](TBAC-adding-tag-creator.md)
+ [创建 LF 标签](TBAC-creating-tags.md)
+ [更新 LF 标签](TBAC-updating-tags.md)
+ [删除 LF 标签](TBAC-deleting-tags.md)
+ [列出 LF 标签](TBAC-listing-tags.md)
+ [将 LF 标签分配给数据目录资源](TBAC-assigning-tags.md)
+ [查看分配给资源的 LF 标签](TBAC-view-resource-tags.md)
+ [查看 LF 标签分配到的资源](TBAC-view-tag-resources.md)
+ [LF 标签的生命周期](#lf-tag-life-cycle)
+ [比较 Lake Formation 基于标签的访问控制与 IAM 基于属性的访问控制](#TBAC-comparison-ABAC)

**另请参阅**  
[管理 LF 标签值权限](TBAC-granting-tags.md)
[使用 LF-TBAC 方法授予数据湖权限](granting-catalog-perms-TBAC.md)
[Lake Formation 基于标签的访问控制](tag-based-access-control.md)

# 添加 LF 标签创建者
<a name="TBAC-adding-tag-creator"></a>

 默认情况下，数据湖管理员可以创建、更新和删除 LF 标记，将标签分配给 Data Catalog 对象，以及向主体授予标签权限。如果您希望将标签创建和管理操作委托给非管理员主体，则数据湖管理员可以创建 LF 标签创建者角色并向这些角色授予 Lake Formation `Create LF-Tag` 权限。通过可授予的 `Create LF-Tag` 权限，LF 标签创建者可以将标签创建和维护任务委托给其他非管理员主体。

数据湖管理员要将 LF 标签分配给数据目录资源，就必须授予自己对非自己创建的 LF 标签的关联权限。

**注意**  
跨账户权限授予只能包括 `Describe` 和 `Associate` 权限。您无法向其他账户中的主体授予 `Create LF-Tag`、`Drop`、`Alter` 和 `Grant with LFTag expressions` 权限。

**Topics**
+ [创建 LF 标签所需的 IAM 权限](#tag-creator-permissions)
+ [添加 LF 标签创建者](#add-lf-tag-creator)

**另请参阅**  
[管理 LF 标签值权限](TBAC-granting-tags.md)
[使用 LF-TBAC 方法授予数据湖权限](granting-catalog-perms-TBAC.md)
[Lake Formation 基于标签的访问控制](tag-based-access-control.md)

## 创建 LF 标签所需的 IAM 权限
<a name="tag-creator-permissions"></a>

 您必须配置权限以允许 Lake Formation 主体创建 LF 标签。将以下语句添加到需要成为 LF 标签创建者的主体的权限策略中。

**注意**  
尽管数据湖管理员具有隐式 Lake Formation 权限，可以创建、更新和删除 LF 标签、将 LF 标签分配给资源，以及向主体授予 LF 标签，但数据湖管理员还需要以下 IAM 权限。

有关更多信息，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

```
{
"Sid": "Transformational",
"Effect": "Allow",
    "Action": [
        "lakeformation:AddLFTagsToResource",
        "lakeformation:RemoveLFTagsFromResource",
        "lakeformation:GetResourceLFTags",
        "lakeformation:ListLFTags",
        "lakeformation:CreateLFTag",
        "lakeformation:GetLFTag",
        "lakeformation:UpdateLFTag",
        "lakeformation:DeleteLFTag",
        "lakeformation:SearchTablesByLFTags",
        "lakeformation:SearchDatabasesByLFTags"
     ]
 }
```

将 LF 标签分配给资源并向主体授予 LF 标签的主体必须具有相同的权限，但 `CreateLFTag`、`UpdateLFTag` 和 `DeleteLFTag` 权限除外。

## 添加 LF 标签创建者
<a name="add-lf-tag-creator"></a>

LF 标签创建者可以创建 LF 标签、更新标签键和值、删除标签、将标签与数据目录资源关联，以及使用 LF-TBAC 方法向主体授予对数据目录资源的权限。LF 标签创建者还可以向主体授予这些权限。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI创建 LF-Tag 创建者角色。

------
#### [ console ]

**添加 LF 标签创建者**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员身份登录。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

   在 **LF 标签和权限**页面上，选择 **LF 标签创建者**部分，然后选择**添加 LF 标签创建者**。  
![\[LF-Tag creator details form with IAM 用户 selection and permission options.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/add-lf-tag-creator.png)

1. 在**添加 LF 标签创建者**页面上，选择具有创建 LF 标签所需权限的 IAM 角色或用户。

1. 选中 `Create LF-Tag` 权限复选框。

1. （可选）要使所选主体能够向主体授予 `Create LF-Tag` 权限，请选择可授予的 `Create LF-Tag` 权限。

1. 选择**添加**。

------
#### [ AWS CLI ]

```
aws lakeformation grant-permissions --cli-input-json file://grantCreate
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:user/tag-manager"
    },
    "Resource": {
        "Catalog": {}
    },
    "Permissions": [
        "CreateLFTag"
    ],
    "PermissionsWithGrantOption": [
        "CreateLFTag"
    ]
}
```

------

以下是 LF 标签创建者角色可用的权限：


| 权限 | 说明 | 
| --- | --- | 
| Drop | 对 LF 标签具有此权限的主体可以从数据湖中删除 LF 标签。主体会获取对 LF 标签资源的所有标签值的隐式 Describe 权限。 | 
| Alter | 对 LF 标签具有此权限的主体可以在 LF 标签中添加或移除标签值。主体会获取对 LF 标签的所有标签值的隐式 Alter 权限。 | 
| Describe | 对 LF 标签具有此权限的主体在将 LF 标签分配给资源或授予对 LF 标签的权限时可以查看 LF 标签及其值。您可以授予对所有键值或特定值的 Describe 权限。 | 
| Associate | 对 LF 标签具有此权限的主体可以将 LF 标签分配给数据目录资源。授予 Associate 会隐式授予 Describe 权限。 | 
| Grant with LF-Tag expression | 对 LF 标签具有此权限的主体可以使用 LF 标签键和值授予对数据目录资源的权限。授予 Grant with LF-Tag expression 会隐式授予 Describe 权限。 | 

这些权限是可以授予的。已通过授予选项被授予这些权限的主体可以将这些权限授予给其他主体。

# 创建 LF 标签
<a name="TBAC-creating-tags"></a>

所有 LF 标签都必须先在 Lake Formation 中定义，然后才能使用。LF 标签由一个键和一个或多个可能的键值组成。

 数据湖管理员为 LF 标签创建者角色设置所需的 IAM 权限和 Lake Formation 权限后，主体即可创建 LF 标签。LF 标签创建者获得隐式权限，可以更新或删除 LF 标签中的任何标签值以及删除 LF 标签。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI创建 LF 标签。

------
#### [ Console ]

**创建 LF 标签**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以具有 LF 标签创建者权限的主体或数据湖管理员身份登录。

1. 在导航窗格的**权限**、**LF 标签和权限**下面，选择 **LF 标签**。

   此时将显示 **LF 标签**页面。  
![\[该页面有一个包含 4 列的表，其列标题分别为“键”、“值”、“拥有者账户 ID”和“LF 标签权限”。该表有 2 行。表上方有 4 个水平排列的按钮：“删除”（灰显）、“编辑”（灰显）、“授予权限”（灰显）和“添加标签”。该页面还有一个搜索字段，其中包含占位符文本“查找标签”。搜索字段的右侧是一个页面选择器，在左右按钮之间显示值“1”，以及一个设置图标。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/policy-tags-page-2.png)

1. 选择**添加 LF 标签**。

1. 在**添加 LF 标签**对话框中，输入键和一个或多个值。

   每个键必须具有至少一个值。要输入多个值，请输入逗号分隔的列表，然后按 **Enter**，或者一次输入一个值，然后在每个值后选择**添加**。允许的值的最大数量为 1000。

1. 选择**添加标签**。

------
#### [ AWS CLI ]

**创建 LF 标签**
+ 输入 `create-lf-tag` 命令。

  以下示例创建键为 `module` 以及值为 `Customers` 和 `Orders` 的 LF 标签。

  ```
  aws lakeformation create-lf-tag --tag-key module --tag-values Customers Orders
  ```

------

 作为标签创建者，主体会获得对此 LF 标签的 `Alter` 权限，并可以更新或移除此 LF 标签中的任何标签值。LF 标签创建者主体还可以向其他主体授予 `Alter` 权限，以更新和删除此 LF 标签上的标签值。

# 更新 LF 标签
<a name="TBAC-updating-tags"></a>

您可以通过添加或删除允许的键值来更新您对其具有 `Alter` 权限的 LF 标签。您无法更改 LF 标签键。要更改键，请删除 LF 标签，然后添加一个具有所需键的 LF 标签。除了 `Alter` 权限外，您还需要 `lakeformation:UpdateLFTag` IAM 权限才能更新值。

删除 LF 标签值时，不会检查任何数据目录资源上是否存在该 LF 标签值。如果已删除的 LF 标签值与资源关联，则该值对资源不再可见，并且任何被授予对该键值对的权限的主体都将不再具有该权限。

在删除 LF 标签值之前，您可以选择使用 [`remove-lf-tags-from-resource` 命令](TBAC-assigning-tags.md#remove-tag-command)从具有要删除的值的数据目录资源中删除 LF 标签，然后使用要保留的值为该资源重新添加标签。

只有数据湖管理员、LF 标签创建者和具有对 LF 标签的 `Alter` 权限的主体才能更新 LF 标签。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI来更新 LF-Tag。

------
#### [ Console ]

**更新 LF 标签（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员、LF 标签创建者或对 LF 标签具有 `Alter` 权限的主体身份登录。

1. 在导航窗格的**权限**、**LF 标签和权限**下面，选择 **LF 标签**。

1. 在 **LF 标签**页面上，选择一个 LF 标签，然后选择**编辑**。

1. 在**编辑 LF 标签**对话框中，添加或移除 LF 标签值。

   要添加多个值，请在**值**字段中输入逗号分隔的列表并按 **Enter**，或者一次输入一个值，或者在每个值后选择**添加**。

1. 选择**保存**。

------
#### [ AWS CLI ]

**更新 LF 标签 (AWS CLI)**
+ 输入 `update-lf-tag` 命令。提供以下一个或两个参数：
  + `--tag-values-to-add`
  + `--tag-values-to-delete`

**Example**  
以下示例将值 `vp` 替换为 LF 标签键 `level` 的值 `vice-president`。  

```
aws lakeformation update-lf-tag --tag-key level --tag-values-to-add vice-president 
--tag-values-to-delete vp
```

------

# 删除 LF 标签
<a name="TBAC-deleting-tags"></a>

您可以删除不再使用的 LF 标签。不会检查数据目录资源上是否存在 LF 标签。如果已删除的 LF 标签与资源关联，则该标签对资源不再可见，并且任何被授予对该 LF 标签的权限的主体都将不再具有该权限。

在删除 LF 标签之前，您可以选择使用 [`remove-lf-tags-from-resource`](TBAC-assigning-tags.md#remove-tag-command) 命令来从所有资源中删除 LF 标签。

只有数据湖管理员、LF 标签创建者或具有 LF 标签的 `Drop` 权限的主体才能删除 LF 标签。除了 `Drop` 权限外，主体还需要 `lakeformation:DeleteLFTag` IAM 权限才能删除 LF 标签。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI删除 LF-Tag。

------
#### [ Console ]

**删除 LF 标签（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员身份登录。

1. 在导航窗格的**权限**、**LF 标签和权限**下面，选择 **LF 标签**。

1. 在 **LF 标签**页面上，选择一个 LF 标签，然后选择**删除**。

1. 在**删除标签环境？**对话框中，要确认删除，请在指定字段中输入 LF 标签键值，然后选择**删除**。

------
#### [ AWS CLI ]

**删除 LF 标签 (AWS CLI)**
+ 输入 `delete-lf-tag` 命令。提供要删除的 LF 标签的键。  
**Example**  

  以下示例删除具有键 `region` 的 LF 标签。

  ```
  aws lakeformation delete-lf-tag --tag-key region
  ```

------

# 列出 LF 标签
<a name="TBAC-listing-tags"></a>

您可以列出您对其具有 `Describe` 或 `Associate` 权限的 LF 标签。每个 LF 标签键中列出的值都是您对其具有权限的值。

LF 标签创建者具有查看他们创建的 LF 标签的隐式权限。

数据湖管理员可以查看本地 AWS 账户中定义的所有 LF 标签，以及已从外部账户向本地账户授予 `Describe` 和 `Associate` 权限的所有 LF 标签。数据湖管理员可以查看所有 LF 标签的所有值。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI列出 LF 标签。

------
#### [ Console ]

**列出 LF 标签（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 LF 标签创建者、数据湖管理员或已被授予对 LF 标签的权限且具有 `lakeformation:ListLFTags` IAM 权限的主体身份登录。

1. 在导航窗格的**权限**、**LF 标签和权限**下面，选择 **LF 标签**。

   此时将显示 **LF 标签**页面。  
![\[该页面有一个包含 3 列的表，其列标题分别为“键”、“值”和“拥有者账户 ID”。该表有 2 行。表上方有 4 个水平排列的按钮：“重新加载页面”、“删除”（灰显）、“编辑”（灰显）和“添加标签”。该页面还有一个搜索字段，其中包含占位符文本“查找标签”。搜索字段的右侧是一个页面选择器，在左右按钮之间显示值“1”，以及一个设置图标。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/policy-tags-page-2.png)

   查看**拥有者账户 ID** 列，以确定从外部账户与您的账户共享的 LF 标签。

------
#### [ AWS CLI ]

**列出标签 (AWS CLI)**
+ 以数据湖管理员或已被授予对 LF 标签的权限且具有 `lakeformation:ListLFTags` IAM 权限的主体身份运行以下命令。

  ```
  aws lakeformation list-lf-tags
  ```

  输出类似于以下内容。

  ```
  {
      "LFTags": [
          {
              "CatalogId": "111122223333",
              "TagKey": "level",
              "TagValues": [
                  "director",
                  "vp",
                  "c-level"
              ]
          },
          {
              "CatalogId": "111122223333",
              "TagKey": "module",
              "TagValues": [
                  "Orders",
                  "Sales",
                  "Customers"
              ]
          }
      ]
  }
  ```

  要同时查看从外部账户授予的 LF 标签，请添加命令选项 `--resource-share-type ALL`。

  ```
  aws lakeformation list-lf-tags --resource-share-type ALL
  ```

  输出类似于以下内容。请注意 `NextToken` 键，该键表示还有更多要列出的内容。

  ```
  {
      "LFTags": [
          {
              "CatalogId": "111122223333",
              "TagKey": "level",
              "TagValues": [
                  "director",
                  "vp",
                  "c-level"
              ]
          },
          {
              "CatalogId": "111122223333",
              "TagKey": "module",
              "TagValues": [
                  "Orders",
                  "Sales",
                  "Customers"
              ]
          }
      ],
      "NextToken": "eyJleHBpcmF0aW...ZXh0Ijp0cnVlfQ=="
  }
  ```

  重复该命令，然后添加 `--next-token` 参数以查看任何剩余的本地 LF 标签和从外部账户授予的 LF 标签。来自外部账户的 LF 标签始终位于单独的页面上。

  ```
  aws lakeformation list-lf-tags --resource-share-type ALL 
  --next-token eyJleHBpcmF0aW...ZXh0Ijp0cnVlfQ==
  ```

  ```
  {
      "LFTags": [
          {
              "CatalogId": "123456789012",
              "TagKey": "region",
              "TagValues": [
                  "central",
                  "south"
              ]
          }
      ]
  }
  ```

------
#### [ API ]

您可以使用 SDKs 可用于 Lake Formation 来列出请求者有权查看的标签。

```
import boto3

client = boto3.client('lakeformation')
...

response = client.list_lf_tags(
    CatalogId='string',
    ResourceShareType='ALL',
    MaxResults=50'
)
```

此命令返回具有以下结构的 `dict` 对象：

```
{
    'LFTags': [
        {
            'CatalogId': 'string',
            'TagKey': 'string',
            'TagValues': [
                'string',
            ]
        },
    ],
    'NextToken': 'string'
}
```

------

有关所需权限的更多信息，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

# 将 LF 标签分配给数据目录资源
<a name="TBAC-assigning-tags"></a>

您可以将 LF 标签分配给数据目录资源（数据库、表和列）以控制对这些资源的访问。只有被授予匹配 LF 标签的主体（以及使用命名资源方法被授予访问权限的主体）才能访问这些资源。

如果表继承了数据库中的 LF 标签，或者某列继承了表中的 LF 标签，则可以通过向 LF 标签键分配新值来覆盖继承的值。

您可以分配给资源的 LF 标签的最大数量为 50。

**Topics**
+ [管理分配给资源的标签的要求](#manage-tags-reqs)
+ [将 LF 标签分配给表列](#assign-tag-column)
+ [将 LF 标签分配给数据目录资源](#assign-tag-catalog-resource)
+ [更新资源的 LF 标签](#update-tags)
+ [从资源中删除 LF 标签](#remove-tag)

## 管理分配给资源的标签的要求
<a name="manage-tags-reqs"></a>

要将 LF 标签分配给数据目录资源，您必须：
+ 具有对 LF 标签的 Lake Formation `ASSOCIATE` 权限。
+ 具有 IAM `lakeformation:AddLFTagsToResource` 权限。
+ 拥有 glue：GetDatabase 对 Glue 数据库的权限。
+ 是资源拥有者（创建者），通过 `GRANT` 选项具有对资源的 `Super` Lake Formation 权限，或通过 `GRANT` 选项具有以下权限：
  + 对于同一个 AWS 账户中的数据库：`DESCRIBE``CREATE_TABLE`、`ALTER`、和 `DROP` 
  + 对于外部账户中的数据库：`DESCRIBE`、`CREATE_TABLE` 和 `ALTER` 权限
  + 对于表（和列）：`DESCRIBE`、`ALTER`、`DROP`、`INSERT`、`SELECT` 和 `DELETE` 权限

此外，LF-Tag 和分配给它的资源必须位于同一个 AWS 账户中。

要从数据目录资源中删除 LF 标签，您必须满足这些要求并具有 `lakeformation:RemoveLFTagsFromResource` IAM 权限。

## 将 LF 标签分配给表列
<a name="assign-tag-column"></a>

**将 LF 标签分配给表列（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以满足上述要求的用户身份登录。

1. 在导航窗格中，选择**表**。

1. 选择表名称（而不是表名称旁边的选项按钮）。

1. 在表详细信息页面的**架构**部分，选择**编辑架构**。

1. 在**编辑架构**页面上，选择一列或多列，然后选择**编辑 LF 标签**。
**注意**  
如果要添加或删除列并保存新版本，请先执行此操作。然后编辑 LF 标签。

   此时将出现**编辑 LF 标签**对话框，并显示从该表继承的所有 LF 标签。  
![\[该图是“编辑 LF 标签”对话框窗口的屏幕截图。窗口的顶部显示两个继承的键。第一个继承的键具有键“level”和值“director (inherited)”。第一个继承的键具有键“module”和值“Orders (inherited)”。这些字段下方是“分配新的 LF 标签”按钮。下方右侧是“取消”和“保存”按钮。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/edit-policy-tags-for-columns-2a.png)

1. （可选）在**继承的键**字段旁边的**值**列表中，选择一个值来覆盖继承的值。

1. （可选）选择**分配新的 LF 标签**。然后，在**分配的键**中，选择一个键，然后对于**值**，为该键选择一个值。  
![\[该图是“编辑 LF 标签”对话框窗口的屏幕截图。窗口的顶部显示两个继承的键。第一个继承的键具有键“level”和值“director (inherited)”。第一个继承的键具有键“module”和值“Orders (inherited)”。在此部分下方，水平对齐的是以下字段和控件：“分配的键”字段、“值”字段和“移除”按钮。“分配的键”字段包含文本“environment”。“值”字段是一个下拉列表，其中包含值“Production”（突出显示）和“Customers”。“分配新的 LF 标签”按钮显示在“分配的键”字段下方。窗口右下角是“取消”和“保存”按钮。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/edit-policy-tags-for-columns-2b.png)

1. （可选）再次选择**分配新的 LF 标签**以添加其他 LF 标签。

1. 选择**保存**。

## 将 LF 标签分配给数据目录资源
<a name="assign-tag-catalog-resource"></a>

------
#### [ Console ]

**将 LF 标签分配给数据目录数据库或表**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以满足前面列出的要求的用户身份登录。

1. 在导航窗格的**数据目录**下，执行下列操作之一：
   + 要将 LF 标签分配给数据库，请选择**数据库**。
   + 要将 LF 标签分配给表，请选择**表**。

1. 选择数据库或表，然后在**操作**菜单上，选择**编辑 LF 标签**。

   将出现 **“编辑 LF-Tags: *resource-name***” 对话框。

   如果表从其包含的数据库继承 LF 标签，则窗口将显示继承的 LF 标签。否则，窗口将显示文本“没有与该资源关联的继承的 LF 标签”。  
![\[该图是“编辑 LF 标签：inventory”对话框窗口的屏幕截图。顶部是“继承的键”（灰显）和“值”字段。“继承的键”字段具有值“level”，“值”字段具有值“director (inherited)”。在此部分下方，水平对齐的是以下字段和控件：“分配的键”字段、“值”字段和“移除”按钮。“分配的键”字段包含文本“module”。“值”字段是一个下拉列表，其中包含值“Orders”、“Sales”和“Customers”（突出显示）。“分配新的 LF 标签”按钮位于“分配的键”字段下方。窗口右下角是“取消”和“保存”按钮。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/edit-policy-tags-for-tables-2.png)

1. （可选）如果表继承了 LF 标签，则对于**继承的键**字段旁边的**值**列表，您可以选择一个值来覆盖继承的值。

1. 要分配新的 LF 标签，请执行以下步骤：

   1. 选择**分配新的 LF 标签**。

   1. 在**分配的键**字段中，选择一个 LF 标签键，然后在**值**字段中选择一个值。

   1. （可选）再次选择**分配新的 LF 标签**以分配额外的 LF 标签。

1. 选择**保存**。

------
#### [ AWS CLI ]

**将 LF 标签分配给数据目录资源**
+ 运行 `add-lf-tags-to-resource` 命令。

  以下示例将 LF 标签 `module=orders` 分配给数据库 `erp` 中的表 `orders`。它使用 `--lf-tags` 参数的快捷语法。`--lf-tags` 的 `CatalogID` 属性是可选的。如果未提供该属性，则假定为资源（在本例中为表）的目录 ID。

  ```
  aws lakeformation add-lf-tags-to-resource --resource '{ "Table": {"DatabaseName":"erp", "Name":"orders"}}' --lf-tags  CatalogId=111122223333,TagKey=module,TagValues=orders
  ```

  以下是命令成功时的输出。

  ```
  {
      "Failures": []
  }
  ```

  下一个示例将 LF 标签分配给 `sales` 表，并对 `--lf-tags` 参数使用 JSON 语法。

  ```
  aws lakeformation add-lf-tags-to-resource --resource '{ "Table": {"DatabaseName":"erp", "Name":"sales"}}' --lf-tags '[{"TagKey": "module","TagValues": ["sales"]},{"TagKey": "environment","TagValues": ["development"]}]'
  ```

  下一个示例将 LF 标签 `level=director` 分配给表 `sales` 的 `total` 列。

  ```
  aws lakeformation add-lf-tags-to-resource --resource '{ "TableWithColumns": {"DatabaseName":"erp", "Name":"sales", "ColumnNames":["total"]}}' --lf-tags TagKey=level,TagValues=director
  ```

------

## 更新资源的 LF 标签
<a name="update-tags"></a>

**更新数据目录资源的 LF 标签 (AWS CLI)**
+ 如前面的步骤所述，使用 `add-lf-tags-to-resource` 命令。

  添加与现有 LF 标签具有相同键但具有不同值的 LF 标签会更新现有值。

## 从资源中删除 LF 标签
<a name="remove-tag"></a><a name="remove-tag-command"></a>

**删除数据目录资源的 LF 标签 (AWS CLI)**
+ 运行 `remove-lf-tags-from-resource` 命令。

  如果表的 LF 标签值覆盖了从父数据库继承的值，则从表中删除该 LF 标签将还原继承的值。此行为也适用于覆盖从表中继承的键值的列。

  以下示例从 `sales` 表的 `total` 列中删除 LF 标签 `level=director`。`--lf-tags` 的 `CatalogID` 属性是可选的。如果未提供该属性，则假定为资源（在本例中为表）的目录 ID。

  ```
  aws lakeformation remove-lf-tags-from-resource 
  --resource ' { "TableWithColumns":  
  { "DatabaseName": "erp",  "Name": "sales",  "ColumnNames":[ "total"]}}' 
  --lf-tags  CatalogId=111122223333,TagKey=level,TagValues=director
  ```

# 查看分配给资源的 LF 标签
<a name="TBAC-view-resource-tags"></a>

您可以查看分配给数据目录资源的 LF 标签。您必须对 LF 标签具有 `DESCRIBE` 或 `ASSOCIATE` 权限才能查看它。

------
#### [ Console ]

**查看分配给资源的 LF 标签（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员、资源拥有者或已被授予对资源的 Lake Formation 权限的用户身份登录。

1. 在导航窗格的**数据目录**标题下，执行下列操作之一：
   + 要查看分配给数据库的 LF 标签，请选择**数据库**。
   + 要查看分配给表的 LF 标签，请选择**表**。

1. 在**表**或**数据库**页面上，选择数据库或表的名称。然后在详细信息页面上，向下滚动到 **LF 标签**部分。

   以下屏幕截图显示了分配给 `customers` 表的 LF 标签，该表包含在 `retail` 数据库中。`module` LF 标签继承自该数据库。`credit_limit` 列分配了 `level=vp` LF 标签。  
![\[该图是 customers 表详细信息页面的“LF 标签”部分的屏幕截图。“LF 标签”部分包含一个包含以下列的表：“资源”、“键”、“值”和“继承自”。该表有 3 行。表上方是一个带有“查找标签”占位符文本的文本输入字段和一个“编辑标签”按钮。该图前面的段落描述了屏幕截图中显示的表值。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tags-for-resource-2.png)

------
#### [ AWS CLI ]

**查看分配给资源的 LF 标签 (AWS CLI)**
+ 输入类似以下的命令。

  ```
  aws lakeformation get-resource-lf-tags --show-assigned-lf-tags --resource '{ "Table": {"CatalogId":"111122223333", "DatabaseName":"erp", "Name":"sales"}}'
  ```

  该命令将返回以下输出。

  ```
  {
      "TableTags": [
          {
              "CatalogId": "111122223333",
              "TagKey": "module",
              "TagValues": [
                  "sales"
              ]
          },
          {
              "CatalogId": "111122223333",
              "TagKey": "environment",
              "TagValues": [
                  "development"
              ]
          }
      ],
      "ColumnTags": [
          {
              "Name": "total",
              "Tags": [
                  {
                      "CatalogId": "111122223333",
                      "TagKey": "level",
                      "TagValues": [
                          "director"
                      ]
                  }
              ]
          }
      ]
  }
  ```

  此输出仅显示显式分配的 LF 标签，而不是继承的 LF 标签。如果要查看所有列上的所有 LF 标签，包括继承的 LF 标签，请忽略 `--show-assigned-lf-tags` 选项。

------

# 查看 LF 标签分配到的资源
<a name="TBAC-view-tag-resources"></a>

您可以查看特定 LF 标签键分配到的所有数据目录资源。为此，您需要以下 Lake Formation 权限：
+ 对 LF 标签的 `Describe` 或 `Associate` 权限。
+ 对资源的 `Describe` 或任何其他 Lake Formation 权限。

此外，您还需要以下 AWS Identity and Access Management (IAM) 权限：
+ `lakeformation:SearchDatabasesByLFTags`
+ `lakeformation:SearchTablesByLFTags`

------
#### [ Console ]

**查看 LF 标签分配到的资源（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员或满足前面列出的要求的用户身份登录。

1. 在导航窗格的**权限**和 **LF 标签和权限**下，选择 **LF 标签**。

1. 选择 LF 标签键（而不是键名称旁边的选项按钮）。

   LF 标签详细信息页面显示 LF 标签已分配到的资源的列表。  
![\[该图是键“module”的 LF 标签详细信息页面的屏幕截图。LF 标签详细信息页面包含两个部分。顶部显示 LF 标签键和值。底部以表形式显示与该 LF 标签关联的资源，该表包含以下各列：“键”、“值”、“资源类型”和“资源”。该表有 12 行，但屏幕截图中只显示了 7 行。表中各行显示，LF 标签被分配给一个数据库、数据库中的两个表以及通过继承这些表的列。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/resources-on-tags-2.png)

------
#### [ AWS CLI ]

**查看 LF 标签分配到的资源**
+ 运行 `search-tables-by-lf-tags` 或 `search-databases-by-lf-tags` 命令。  
**Example**  

  以下示例列出分配了 `level=vp` LF 标签的表和列。对于列出的每个表和列，将输出为该表或列分配的所有 LF 标签，而不仅仅是搜索表达式。

  ```
  aws lakeformation search-tables-by-lf-tags --expression TagKey=level,TagValues=vp
  ```

------

有关所需权限的更多信息，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

## LF 标签的生命周期
<a name="lf-tag-life-cycle"></a>

1. LF 标签创建者 Michael 创建了一个 LF 标签 `module=Customers`。

1. Michael 向数据工程师 Eduardo 授予了对 LF 标签的 `Associate` 权限。授予 `Associate` 会隐式授予 `Describe` 权限。

1. Michael 使用授予选项向 Eduardo 授予了对表 `Custs` 的 `Super` 权限，因此 Eduardo 可以将 LF 标签分配给该表。有关更多信息，请参阅[将 LF 标签分配给数据目录资源](TBAC-assigning-tags.md)。

1. Eduardo 将 LF 标签 `module=customers` 分配给表 `Custs`。

1. Michael 向数据工程师 Sandra 进行了以下授予（使用伪代码）。

   ```
   GRANT (SELECT, INSERT ON TABLES) ON TAGS module=customers TO Sandra WITH GRANT OPTION
   ```

1. Sandra 向数据分析师 Maria 进行了以下授予。

   ```
   GRANT (SELECT ON TABLES) ON TAGS module=customers TO Maria
   ```

   Maria 现在可以对 `Custs` 表运行查询。

**另请参阅**  
[元数据访问控制](access-control-metadata.md)

## 比较 Lake Formation 基于标签的访问控制与 IAM 基于属性的访问控制
<a name="TBAC-comparison-ABAC"></a>

基于属性的访问控制 (ABAC) 是一种基于属性定义权限的授权策略。在中 AWS，这些属性称为*标签*。您可以将标签附加到 IAM 资源，包括 IAM 实体（用户或角色）和 AWS 资源。您可以为 IAM 委托人创建单个 ABAC 策略或者一小组策略。这些 ABAC 策略可设计为在主体的标签与资源标签匹配时允许操作。ABAC 在快速增长的环境中非常有用，并在策略管理变得繁琐的情况下可以提供帮助。

云安全和治理团队使用 IAM 为所有资源定义访问策略和安全权限，包括 Amazon S3 存储桶、Amazon EC2 实例以及您可以使用 ARN 引用的任何资源。IAM 策略定义了对数据湖资源的广泛（粗粒度）权限，例如，允许或拒绝 Amazon S3 存储桶或前缀级别或数据库级别的访问。有关 IAM ABAC 的更多信息，请参阅 [ABAC 有什么](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)用？ AWS在 *IAM 用户指南*中。

例如，您可以创建具有 `project-access` 标签键的三个角色。将第一个角色的标签值设置为 `Dev`，第二个为 `Marketing`，第三个为 `Support`。向资源分配具有适当值的标签。然后，您可以使用单个策略，在角色和资源标记了 `project-access` 的相同值时允许访问。

数据治理团队使用 Lake Formation 来定义对特定数据湖资源的精细权限。LF 标签分配给数据目录资源（数据库、表和列）并授予给主体。具有与资源的 LF 标签匹配的 LF 标签的主体可以访问该资源。Lake Formation 权限次要于 IAM 权限。例如，如果 IAM 权限不允许用户访问数据湖，则 Lake Formation 不会向该用户授予对该数据湖中任何资源的访问权限，即使主体和资源具有匹配的 LF 标签也是如此。

Lake Formation 基于标签的访问控制 (LF-TBAC) 与 IAM ABAC 结合使用，为您的 Lake Formation 数据和资源提供更多级别的权限。
+ **Lake Formation TBAC 权限随着创新而扩展。**它不再需要管理员更新现有策略以允许对新资源的访问。例如，假设您使用带有 `project-access` 标签的 IAM ABAC 策略来提供对 Lake Formation 中特定数据库的访问权限。使用 LF-TBAC，将 LF 标签 `Project=SuperApp` 分配给特定的表或列，并向该项目的开发人员授予相同的 LF 标签。通过 IAM，开发人员可以访问数据库，而 LF-TBAC 权限授予开发人员对特定表或表中列的进一步访问权限。如果将新表添加到项目中，则 Lake Formation 管理员只需将标签分配给新表，开发人员即可获得对该表的访问权限。
+ **Lake Formation TBAC 需要较少的 IAM 策略。**由于您使用 IAM 策略来授予对 Lake Formation 资源的高级访问权限，并使用 Lake Formation TBAC 来管理更精确的数据访问，因此您创建的 IAM 策略更少。
+ **使用 Lake Formation TBAC，团队可以快速变化和成长。**这是因为新资源的权限根据属性自动授予。例如，如果新开发人员加入项目，则通过将 IAM 角色与用户关联，然后将所需的 LF 标签分配给用户，即可轻松授予该开发人员访问权限。您无需更改 IAM 策略即可支持新项目或创建新的 LF 标签。
+ **使用 Lake Formation TBAC 可以获得更精细的权限。**IAM 策略授予对顶级资源（例如数据目录数据库或表）的访问权限。使用 **Lake Formation TBAC**，您可以授予对包含特定数据值的特定表或列的访问权限。

**注意**  
IAM 标签与 LF 标签不同。这些标签不可互换。LF 标签用于授予 Lake Formation 权限，而 IAM 标签用于定义 IAM 策略。

# 管理 LF 标签表达式以实现元数据访问控制
<a name="managing-tag-expressions"></a>

 LF-Tag 表达式是由一个或多个 LF 标签（键值对）组成的逻辑表达式，用于授予资源权限。 AWS Glue Data Catalog 借助 LF 标签表达式，您可以定义规则，根据数据资源的元数据标签来管理数据资源的访问权限。您可以保存这些表达式并在多次权限授予中重复使用这些表达式，从而确保一致性，并且可以直接管理标签本体随时间推移而发生的更改。

在给定的 LF 标签表达式中，使用 AND 运算组合标签键，而使用 OR 运算组合值。例如，标签表达式 `content_type:Sales AND location:US` 表示与美国销售数据相关的资源。

在 AWS 账户中，最多可以创建 1000 个 LF 标签表达式。这些表达式提供了一种灵活且可扩展的方式来管理基于元数据标签的权限，确保只有经过授权的用户或应用程序才能根据定义的标签规则访问特定的数据资源。

LF 标签表达式可带来以下好处：
+ **可重用性**：通过定义和保存 LF 标签表达式，在为其他资源或主体分配权限时，您不再需要手动复制相同的表达式。
+ **一致性**：在多次权限授予中重复使用 LF 标签表达式可确保权限授予和管理方式的一致性。
+ **标签本体管理**：LF 标签表达式有助于管理标签本体随时间推移而发生的更改，因为您可以更新保存的表达式，而不必修改各个权限授予。

有关基于标签的访问控制的更多信息，请参阅[Lake Formation 基于标签的访问控制](tag-based-access-control.md)。

**LF 标签表达式创建者**  
LF 标签表达式创建者是有权创建和管理 LF 标签表达式的主体。数据湖管理员可以使用 Lake Formation 控制台、CLI、API 或 SDK 添加 LF 标签表达式创建者。LF 标签表达式创建者具有隐式 Lake Formation 权限，可以创建、更新和删除 LF 标签表达式以及向其他主体授予 LF 标签表达式权限。

非数据湖管理员 LF 标签表达式创建者只能为他们创建的表达式获得隐式 `Alter`、`Drop`、`Describe` 和 `Grant with LF-Tag expression` 权限。

数据湖管理员还可以向 LF 标签表达式创建者授予可授予的 `Create LF-Tag expression` 权限。然后，LF 标签表达式创建者可以向其他主体授予创建 LF 标签表达式的权限。

**Topics**
+ [创建 LF 标签表达式所需的 IAM 权限](#tag-expression-creator-permissions)
+ [添加 LF 标签表达式创建者](#add-lf-tag-expression-creator)
+ [创建 LF 标签表达式](TBAC-creating-tag-expressions.md)
+ [更新 LF 标签表达式](TBAC-updating-expressions.md)
+ [删除 LF 标签表达式](TBAC-deleting-expressions.md)
+ [列出 LF 标签表达式](TBAC-listing-expressions.md)

**另请参阅**  
[管理 LF 标签值权限](TBAC-granting-tags.md)
[使用 LF-TBAC 方法授予数据湖权限](granting-catalog-perms-TBAC.md)
[Lake Formation 基于标签的访问控制](tag-based-access-control.md)

## 创建 LF 标签表达式所需的 IAM 权限
<a name="tag-expression-creator-permissions"></a>

 您必须配置权限以允许 Lake Formation 主体创建 LF 标签表达式。将以下语句添加到需要成为 LF 标签表达式创建者的主体的权限策略中。

**注意**  
尽管数据湖管理员具有隐式 Lake Formation 权限，可以创建、更新和删除 LF 标签和 LF 标签表达式、将 LF 标签分配给资源，以及向主体授予 LF 标签和 LF 标签表达式权限，但数据湖管理员还需要以下 IAM 权限。

有关更多信息，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

```
{
"Sid": "Transformational",
"Effect": "Allow",
    "Action": [
        "lakeformation:AddLFTagsToResource",
        "lakeformation:RemoveLFTagsFromResource",
        "lakeformation:GetResourceLFTags",
        "lakeformation:ListLFTags",
        "lakeformation:CreateLFTag",
        "lakeformation:GetLFTag",
        "lakeformation:UpdateLFTag",
        "lakeformation:DeleteLFTag",
        "lakeformation:SearchTablesByLFTags",
        "lakeformation:SearchDatabasesByLFTags",
        "lakeformation:CreateLFTagExpression",
        "lakeformation:DeleteLFTagExpression",
        "lakeformation:UpdateLFTagExpression",
        "lakeformation:GetLFTagExpression",
        "lakeformation:ListLFTagExpressions",
        "lakeformation:GrantPermissions",
        "lakeformation:RevokePermissions",
        "lakeformation:BatchGrantPermissions",
        "lakeformation:BatchRevokePermissions"
     ]
 }
```

## 添加 LF 标签表达式创建者
<a name="add-lf-tag-expression-creator"></a>

LF 标签表达式创建者可以创建和保存可重复使用的 LF 标签表达式、更新标签键和值，以及使用 LF-TBAC 方法向主体授予对 Data Catalog 资源的权限。LF 标签表达式创建者还可以向主体授予这些权限。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI创建 LF-Tag 表达式创建者角色。

------
#### [ console ]

**添加 LF 标签表达式创建者**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员身份登录。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

1. 选择 **LF 标签表达式**选项卡。

1. 在 **LF 标签表达式创建者**部分，选择**添加 LF 标签表达式创建者**。  
![\[Form to add LF-Tag expression creators with IAM 用户 selection and permissions.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/add-lf-tag-expression-creator.png)

1. 在**添加 LF 标签表达式创建者**页面上，选择具有创建 LF 标签表达式所需权限的 IAM 角色或用户。

1. 选择 `Create LF-Tag expression` 权限复选框。

1. （可选）要使所选主体能够向主体授予 `Create LF-Tag expression` 权限，请选择可授予的 `Create LF-Tag expression` 权限。

1. 选择**添加**。

------
#### [ AWS CLI ]

```
aws lakeformation grant-permissions --cli-input-json file://grantCreate
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:user/tag-manager"
    },
    "Resource": {
        "Catalog": {}
    },
    "Permissions": [
        "CreateLFTagExpression"
    ],
    "PermissionsWithGrantOption": [
        "CreateLFTagExpression"
    ]
}
```

------

LF 标签表达式创建者角色可以创建、更新或删除 LF 标签表达式。


| 权限 | 说明 | 
| --- | --- | 
| Create | 具有此权限的主体可以在数据湖中添加 LF 标签表达式。 | 
| Drop | 对 LF 标签表达式具有此权限的主体可以从数据湖中删除 LF 标签表达式。 | 
| Alter | 对 LF 标签表达式具有此权限的主体可以更新 LF 标签表达式的表达式主体。 | 
| Describe | 对 LF 标签表达式具有此权限的主体可以查看 LF 标签表达式的内容。 | 
| Grant with LF-Tag expression | 借助此权限，接收人在授予数据或元数据访问权限时可以使用标签表达式作为资源。授予 Grant with LF-Tag expression 会隐式授予 Describe 权限。 | 
| Super | 对于 LF 标签表达式，Super 权限授予 Describe、Alter、Drop 能力，以及将标签表达式的权限授予其他主体。 | 

这些权限是可以授予的。已通过授予选项被授予这些权限的主体可以将这些权限授予给其他主体。

# 创建 LF 标签表达式
<a name="TBAC-creating-tag-expressions"></a>

您需要在 Lake Formation 中定义所有 LF 标签，并将其分配给 Data Catalog 资源，然后才可用于创建表达式。LF 标签表达式由一个或多个键以及每个键的一个或多个可能的值组成。

 数据湖管理员为 LF 标签表达式创建者角色设置所需的 IAM 权限和 Lake Formation 权限后，主体即可创建可重用的 LF 标签表达式。LF 标签表达式创建者获得隐式权限，可以更新表达式主体和删除 LF 标签表达式。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI创建 LF-Tag 表达式。

------
#### [ Console ]

**创建 LF 标签表达式**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以具有 LF 标签表达式创建者权限的主体或数据湖管理员身份登录。

1. 在导航窗格的 “**权限**” 下**，选择 LF 标签和**权限。

1. 选择 **LF 标签表达式**。此时会出现**添加 LF 标签表达式**页面。  
![\[该页面包含用于添加名称、描述的字段，以及用于选择表达式主体的下拉列表。用户还可以选择授予权限。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/add-tag-expression.png)

1. 输入以下信息：
   + 名称：输入表达式的唯一名称。您无法更新表达式名称。
   + 描述：为表达式提供可选的描述以及表达式的详细信息。
   + 表达式：通过指定标签键及其关联值来创建表达式。您最多可为每个表达式添加 50 个键。您必须对表达式主体中的所有标签具有 Lake Formation `Grant with LF-Tags` 权限。

      每个键必须具有至少一个值。要输入多个值，请输入逗号分隔的列表，然后按 **Enter**，或者一次输入一个值，然后在每个值后选择**添加**。每个键允许的值的最大数量为 1000。

      Lake Formation 使用该 AND/OR 逻辑在一个表达式中组合多个键和值。在单个（键 : 值列表）对中，使用逻辑 OR 运算符来组合值。例如，如果键值对是 (Department : [Sales, Marketing])，那么在资源的 Department 标签值为 Sales 或 Marketing 时，表示标签匹配。

      当您指定多个键时，将通过 AND 逻辑运算符来连接这些键。因此，如果完整表达式为“(Department : [Sales, Marketing]) AND (Location : [US, Canada])”，则资源的 Department 标签值为 Sales 或 Marketing，且 Location 标签值为 US 或 Canada 时，表示匹配。以下是另一个包含多个键和值的示例：

     LF-tag 表达式ContentType ：(: [视频、音频]) 和（地区：[欧洲、亚洲]）和（部门：[工程， ProductManagement]）。

     此表达式将匹配具有以下值的资源：-值为 Video OR Audio 的 ContentType 标签，以及-值为 Europe 或 Asia 的 Region 标签，以及-值为 Engineering OR 的 “部门” 标签 ProductManagement。

    使用 LF 标签授予数据湖权限时，还可以保存标签表达式。选择键和值对，然后选择**另存为新表达式**选项。输入描述表达式的名称。  
![\[该页面包含用于选择表达式主体的字段和用于输入名称的字段。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/save-expression-grant.png)

1.  （可选）接下来，选择用户/角色，以及要在账户中向他们授予的表达式权限。您还可以选择允许用户向账户中的其他用户授予这些权限的可授予权限。您无法对标签表达式授予跨账户权限。  
![\[该页面显示的字段用于选择向其他主体授予的权限。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-expression-permissions.png)

1. 选择**添加**。

------
#### [ AWS CLI ]

**创建 LF 标签表达式**
+ 输入 `create-lf-tag-expression` 命令。

  以下示例创建一个 LF 标签表达式，其标签 `Department` 的值为 `Sales` 和 `Marketing`，且标签 `Location` 的值为 `US`。

  ```
  aws lakeformation create-lf-tag-expression \
  -- name "my-tag-expression" \
  -- catalog-id "123456789012" \
  -- expression '{"Expression":[{"TagKey":"Department","TagValues":["Sales","Marketing"]},{"TagKey":"Location","TagValues":["US"]}]}'
  ```

   此 CLI 命令在中创建了一个新的 LF-Tag 表达式。 AWS Glue Data Catalog该表达式可用于根据 Data Catalog 资源（例如数据库、表、视图或列）的关联标签向这些资源授予权限。在此示例中，表达式将匹配 `Department` 键的值为 `Sales` 或 `Marketing`，且 `Location` 键的值为 `US` 的资源。

------

 作为标签表达式创建者，主体会获得此 LF 标签表达式的 `Alter` 权限，并可以更新或移除该表达式。LF 标签表达式创建者主体还可以向另一个主体授予 `Alter` 权限，以便更新和删除此表达式。

# 更新 LF 标签表达式
<a name="TBAC-updating-expressions"></a>

只有数据湖管理员、LF 标签表达式创建者和具有 LF 标签表达式的 `Alter` 和 `Super` 权限的主体才能更新 LF 标签表达式。除了 `Alter` 权限外，您还需要 `lakeformation:UpdateLFTagExpression` IAM 权限以及对新表达式主体的所有底层键值的 `Grant with LF-Tag` 权限才能更新表达式。

通过更新描述、表达式主体以及对表达式授予的权限来更新 LF 标签表达式。您无法更改 LF 标签表达式的名称。要更改名称，请删除 LF 标签表达式，然后添加一个具有所需参数的表达式。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI更新 LF-Tag 表达式。

------
#### [ Console ]

**更新 LF 标签表达式**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员、LF 标签创建者或对 LF 标签具有 `Alter` 权限的主体身份登录。

1. 在导航窗格的“权限”下，选择 **LF 标签和权限**。

1. 选择 **LF 标签表达式**选项卡。

1. 在 **LF 标签表达式**部分，选择一个 LF 标签表达式，然后选择**编辑**。

1. 在**编辑 LF 标签表达式**对话框中，通过添加或删除键和值来更新描述并更新表达式主体。

   要添加多个值，请在**值**字段中，从下拉列表中选择值。

1. 选择**保存**。

------
#### [ AWS CLI ]

 Lake Formation 中的 update-lf-tag-expression命令允许你更新现有的 LF-Tag 表达式。

```
aws lakeformation update-lf-tag-expression \
-- name expression_name\
-- description new_description \
-- catalog-id catalog_id \
-- expression '{"Expression": [{"TagKey": "tag_key", "TagValues": ["tag_value1", "tag_value2", ...]}]}'
```

以下是所提供命令中的参数的含义：
+ name：要更新的现有已命名标签表达式的名称。
+ description：表达式的新描述。

  catalog-id：已命名标签表达式所在的 Data Catalog 的 ID。
+ expression：要用来更新表达式的新标签表达式字符串。

------

# 删除 LF 标签表达式
<a name="TBAC-deleting-expressions"></a>

您可以删除不再使用的 LF 标签表达式。如果您已使用 LF 标签表达式向主体授予 Data Catalog 资源的权限，则这些主体将不再拥有该权限。

只有数据湖管理员、LF 标签表达式创建者和对 LF 标签表达式具有 `Drop` 权限的主体才能删除 LF 标签表达式。除了 `Drop` 权限外，主体还需要 `lakeformation:DeleteLFTagExpression` IAM 权限才能删除 LF 标签表达式。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI删除 LF-Tag 表达式。

------
#### [ Console ]

**删除 LF 标签表达式（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以数据湖管理员、LF 标签表达式创建者或具有删除表达式权限的主体身份登录。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

1. 选择 **LF 标签表达式**选项卡。

1. 在 **LF 标签表达式**部分，选择一个 LF 标签表达式，然后选择**删除**。

1. 在**删除 LF 标签表达式**对话框中，要确认删除，请在指定字段中输入 LF 标签表达式名称，然后选择**删除**。

------
#### [ AWS CLI ]

**删除 LF 标签（AWS CLI）**
+ 输入 `delete-lf-tag-expression` 命令。提供要删除的表达式名称和目录 ID。  
**Example**  

  以下示例从 ID 为 `123456789012` 的 Data Catalog 中删除名称为 `my-tag-expression` 的 LF 标签表达式。如果您使用的账户与 AWS CLI 配置相同，则该`catalog-id`参数是可选的。删除 LF 标签表达式后，Lake Formation 会清理该表达式的关联权限记录。这包括单个权限记录和包含已删除表达式的聚合权限记录。

  ```
  aws lakeformation delete-lf-tag-expression \
  --name "my-tag-expression" \
  --catalog-id "123456789012"
  ```

------

# 列出 LF 标签表达式
<a name="TBAC-listing-expressions"></a>

 您可以列出您对其具有描述权限的 LF 标签表达式。数据湖管理员、LF 标签表达式创建者和只读管理员可以隐式查看其账户中的所有标签表达式。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI列出 LF-Tag 表达式。

------
#### [ Console ]

**列出 LF 标签表达式（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 LF 标签表达式创建者、数据湖管理员或已获授 LF 标签表达式权限且具有 `lakeformation:ListLFTagExpressions` IAM 权限的主体身份登录。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

1. 选择 **LF 标签表达式**选项卡以查看表达式。本节介绍有关现有 LF 标签表达式的信息，包括表达式名称、表达式本身（包含指向所含标签的链接），以及创建、编辑或删除表达式的选项。

------
#### [ AWS CLI ]

**列出 LF 标签（AWS CLI）**
+ 要使用列出 LF-Tag 表达式 AWS CLI，可以使用命令。 list-lf-tag-expressions请求语法为：

  ```
  aws lakeformation list-lf-tag-expressions \
  -- catalog-id "123456789012" \
  -- max-items "100" \
  -- next-token "next-token"
  ```

   其中：
  + `catalog-id`是您要列出标签表达式的数据目录的 AWS 帐户 ID。
  + `max-items` 指定要返回的最大标签表达式数量。如果未使用此参数，则默认值为 100。
  + `next-token` 是在上一次请求中截断了结果时使用的延续令牌。

  响应将包括 LF 标签表达式列表和下一个令牌（如果适用）。

------

# 管理 LF 标签值权限
<a name="TBAC-granting-tags"></a>

您可以向主体授予对 LF 标签的 `Drop`、`Alter`权限，以管理 LF 标签值表达式。您还可以向主体授予对 LF 标签的 `Describe`、`Associate` 和 `Grant with LF-Tag expressions` 权限，以查看 LF 标签并将其分配给数据目录资源（数据库、表和列）。将 LF 标签分配给数据目录资源时，您可以使用 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法来保护这些资源。有关更多信息，请参阅 [Lake Formation 基于标签的访问控制](tag-based-access-control.md)。

您可以使用授予选项授予这些权限，以便其他主体可以授予这些权限。[添加 LF 标签创建者](TBAC-adding-tag-creator.md#add-lf-tag-creator)中介绍了 `Grant with LF-Tag expressions`、`Describe` 和 `Associate` 权限。

您可以向外部 AWS 账户授予 LF-Tag 的`Describe`和`Associate`权限。然后，该账户中的数据湖管理员可以将这些权限授予给该账户中的其他主体。接着，外部账户中的数据湖管理员向其授予 `Associate` 权限的主体可以将 LF 标签分配给您与其账户共享的数据目录资源。

向外部账户授予权限时，您必须包括授予选项。

您可以使用 Lake Formation 控制台、API 或 AWS Command Line Interface (AWS CLI) 来授予对 LF 标签的权限。

**Topics**
+ [使用控制台列出 LF 标签权限](TBAC-listing-tag-perms-console.md)
+ [使用控制台授予 LF 标签权限](TBAC-granting-tags-console.md)
+ [使用管理 LF-Tag 权限 AWS CLI](TBAC-granting-revoking-tags-cli.md)

有关更多信息，请参阅[管理 LF 标签以实现元数据访问控制](managing-tags.md)和[Lake Formation 基于标签的访问控制](tag-based-access-control.md)。

# 使用控制台列出 LF 标签权限
<a name="TBAC-listing-tag-perms-console"></a>

您可以使用 Lake Formation 控制台查看对 LF 标签授予的权限。您必须是 LF 标签创建者、数据湖管理员，或者具有对 LF 标签的 `Describe` 或 `Associate` 权限才能查看它。

**列出 LF 标签权限（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 LF 标签创建者、数据湖管理员或已被授予对 LF 标签的 `Drop`、`Alter`、`Associate` 或 `Describe` 权限的用户身份登录。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**，然后选择 **LF 标签权限**部分。

   **LF 标签权限**部分显示了一个包含主体、标签键、标签值和权限的表。  
![\[该页面包含一个权限表，其中包含以下各列：“主体”、“主体类型”、“键”、“值”、“权限”和“可授予”。表中有五行。每行左侧都有一个单选按钮。表上方是一个搜索字段和以下按钮：“刷新”、“查看”、“撤销”和“授予”。由于最初未选择任何行，因此“查看”和“撤销”按钮处于禁用状态。第一行中的值是：Principal=arn:aws:iam::111122223333:user/datalake_admin；Principal type=IAM user；Keys=environment；Values=All values；Permissions=DESCRIBE；Grantable=DESCRIBE。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/list-tag-permissions-page.png)

# 使用控制台授予 LF 标签权限
<a name="TBAC-granting-tags-console"></a>

以下步骤说明如何使用 Lake Formation 控制台上的**授予 LF 标签权限**页面来授予对 LF 标签的权限。该页面分为以下几个部分：
+ **权限类型**：要授予的权限的类型。
+ **主体**：要向其授予权限的 IAM 用户或角色，或 SAML 用户或角色。
+  **LF 标签键值对权限**：要对其授予权限的 LF 标签键值对。
+  **LF 标签权限**：要对其授予权限的 LF 标签。
+  **LF 标签表达式权限**：要对其授予权限的 LF 标签表达式。
+  **权限**：要授予的权限。

## 打开**授予 LF 标签权限**页面
<a name="tag-start-grant"></a>

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 LF 标签创建者、数据湖管理员或已通过 `Grant` 选项被授予 LF 标签权限或对 LF 标签的 LF 标签键值对权限的用户身份登录。

1. 在导航窗格中，选择 **LF 标签和权限**，然后选择 **LF 标签权限**部分。

1. 选择 **Grant permissions**（授予权限）。

## 指定权限类型
<a name="grant-tag-permission-type"></a>

在**权限类型**部分中，选择权限类型。

LF 标签权限  
选择 **LF 标签权限**以允许主体更新 LF 标签值或删除 LF 标签。

LF 标签键值对权限  
选择 **LF 标签键值对权限**以允许主体将 LF 标签分配给数据目录资源、查看 LF 标签和值，并向主体授予对数据目录资源的基于 LF 标签的权限。  
以下各部分中可用的选项取决于**权限类型**。

LF 标签表达式权限  
选择 **LF 标签表达式权限**以允许主体更新表达式或删除表达式。

## 指定主体
<a name="grant-tags-principals"></a>

**注意**  
您不能向外部账户或其他账户中的主体授予 LF 标签权限（`Alter` 和 `Drop`）。

在**主体**部分中，选择主体类型，然后指定要向其授予权限的主体。

![\[“主体”部分包含以下文本中命名的三个磁贴。每个磁贴包含一个选项按钮和文本。“IAM 用户和角色”磁贴处于选中状态，“IAM 用户和角色”下拉列表位于磁贴下方。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-tags-principals-section.png)


**IAM 用户和角色**  
从 **IAM 用户和角色**列表中选择一个或多个用户或角色。

**SAML 用户和组**  
对于 **SAML 和 Quick 用户和群组**，请为通过 SAML 联合的用户或群组或快速用户或群组输入一个或 ARNs 多个 Amazon 资源名称 (ARNs)。在每个 ARN 后按 **Enter**。  
有关如何构造的信息 ARNs，请参见[Lake Formation 授予和撤销命令 AWS CLI](lf-permissions-reference.md#perm-command-format)。  
仅Quick 企业版支持 Lake Formation 与 Quick 集成。

**外部账户**  
对于**AWS 帐户**，请输入一个或多个有效 AWS 帐户 IDs。在每个 ID 后按 **Enter**。  
组织 ID 由“o-”后跟 10 到 32 个小写字母或数字组成。  
单位 ID 以“ou-”开头，后跟 4 到 32 个小写字母或数字（包含 OU 的根的 ID）。该字符串后跟第二个“-”短横线和 8 到 32 个额外的小写字母或数字。  
对于 IAM 主体，输入 IAM 用户或角色的 ARN。

## 指定 LF 标签
<a name="grant-tags-tags"></a>

要授予对 LF 标签的权限，请在 **LF 标签权限**部分中，指定要对其授予权限的 LF 标签。

![\[LF 标签部分显示两行字段，其中每行从左到右都有一个“键”字段、一个“值”字段和一个“移除”按钮。“值”字段是一个下拉列表。两行字段下方有一个“添加 LF 标签”按钮。第一行在“键”字段中显示“module”，在“值”字段下方是两个小磁贴，分别包含“Orders”和“Sales”，表示用户已选择“Orders”和“Sales”作为键 module 的值。每个磁贴都有一个 X，您可以单击它（如关闭框）来删除相应的磁贴。如果字段为空，则为第二行。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-tags-tags-section-2.png)

+ 使用下拉列表选择一个或多个 LF 标签。

## 指定 LF 标签键值对
<a name="w2aac15b9c27c19c21c15"></a>

1. 要授予对 LF 标签键值对的权限，（您需要先选择 **LF 标签键值对权限**作为**权限类型**）选择**添加 LF 标签键值对**以显示用于指定 LF 标签键和值的第一行字段。  
![\[Interface for adding LF-Tag key-value pairs and setting associated permissions.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tag-key-value-pair.png)

1. 将光标置于**键**字段中，可以选择开始键入以缩小选择列表范围，然后选择 LF 标签键。

1. 在**值**列表中，选择一个或多个值，然后按 **Tab** 键或在字段外单击或点按以保存所选值。
**注意**  
如果**值**列表中的某一行具有焦点，则按 **Enter** 键可选中或清除相应的复选框。

   所选值显示为**值**列表下方的磁贴。选择 ✖ 以删除值。选择**删除**以删除整个 LF 标签。

1. 要添加另一个 LF 标签，请再次选择**添加 LF 标签**，然后重复前两个步骤。

## 指定 LF 标签表达式
<a name="w2aac15b9c27c19c21c17"></a>

1. 要对 LF 标签表达式授予权限，（您需要先在**权限类型**中选择 **LF 标签表达式权限**）。  
![\[Permission type selection interface with LF-Tag expression permissions highlighted.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tag-expression.png)

1. 选择 LF 标签表达式。

1. 所选表达式在 **LF 标签表达式**列表下方显示为磁贴。选择 ✖ 以移除表达式。

1. 要添加另一个 LF 标签表达式，请选择另一个表达式。

## 指定权限
<a name="grant-tags-permissions"></a>

本部分根据您在上一步中选择的**权限类型**显示 **LF 标签权限**或 **LF 标签值权限**。

根据您选择授予的**权限类型**，选择 **LF 标签权限**或 **LF 标签键值对权限**和可授予的权限。

1. 在 **LF 标签权限**下，选择要授予的权限。

   授予 **Drop** 和 **Alter** 权限会隐式授予 **Describe** 权限。

   您需要授予对所有标签值的 **Alter** 和 **Drop** 权限。

1. 在 **LF 标签键值对权限**下，选择要授予的权限。

   授予 **Associate** 权限会隐式授予 **Describe** 权限。选择**使用 LF 标签表达式授予权限**，以允许授予接收人使用 LF-TBAC 方法授予或撤销对数据目录资源的访问权限。

1. 在 **LF 标签表达式权限**下，选择要授予的权限。

   授予 **Drop** 和 **Alter** 权限会隐式授予 **Describe** 权限。

   授予 **Super** 权限，即授予所有可用权限。

1. （可选）在 “**可授予权限**” 下，选择授予接受者可以向其 AWS 账户中的其他委托人授予的权限。

1. 选择**授权**。

# 使用管理 LF-Tag 权限 AWS CLI
<a name="TBAC-granting-revoking-tags-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 授予、撤销和列出对 LF 标签的权限。

**列出 LF 标签权限 (AWS CLI)**
+ 输入 `list-permissions` 命令。您必须是 LF 标签创建者、数据湖管理员，或者具有对 LF 标签的 `Drop`、`Alter`、`Describe`、`Associate`、`Grant with LF-Tag permissions` 权限才能查看它。

  以下命令请求您有权访问的所有 LF 标签。

  ```
  aws lakeformation list-permissions --resource-type LF_TAG
  ```

  以下是数据湖管理员的示例输出，该人员可以查看向所有主体授予的所有 LF 标签。非管理员用户只能查看向其授予的 LF 标签。从外部账户授予的 LF 标签权限将显示在单独的结果页面上。要查看它们，请重复该命令并向 `--next-token` 参数提供上一次命令运行时返回的令牌。

  ```
  {
      "PrincipalResourcePermissions": [
          {
              "Principal": {
                  "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_admin"
              },
              "Resource": {
                  "LFTag": {
                      "CatalogId": "111122223333",
                      "TagKey": "environment",
                      "TagValues": [
                          "*"
                      ]
                  }
              },
              "Permissions": [
                  "ASSOCIATE"
              ],
              "PermissionsWithGrantOption": [
                  "ASSOCIATE"
              ]
          },
          {
              "Principal": {
                  "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"
              },
              "Resource": {
                  "LFTag": {
                      "CatalogId": "111122223333",
                      "TagKey": "module",
                      "TagValues": [
                          "Orders",
                          "Sales"
                      ]
                  }
              },
              "Permissions": [
                  "DESCRIBE"
              ],
              "PermissionsWithGrantOption": []
          },
  ...
      ],
      "NextToken": "eyJzaG91bGRRdWVy...Wlzc2lvbnMiOnRydWV9"
  }
  ```

  您可以列出特定 LF 标签键的所有授予。以下命令返回对 LF 标签 `module` 授予的所有权限。

  ```
  aws lakeformation list-permissions --resource-type LF_TAG --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
  ```

  您还可以列出向特定主体授予的针对特定 LF 标签的 LF 标签值。提供 `--principal` 参数时，必须提供 `--resource` 参数。因此，该命令实际只能请求向特定主体授予的针对特定 LF 标签键的值。以下命令显示如何针对主体 `datalake_user1` 和 LF 标签键 `module` 执行此操作。

  ```
  aws lakeformation list-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --resource-type LF_TAG --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
  ```

  下面是示例输出。

  ```
  {
      "PrincipalResourcePermissions": [
          {
              "Principal": {
                  "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"
              },
              "Resource": {
                  "LFTag": {
                      "CatalogId": "111122223333",
                      "TagKey": "module",
                      "TagValues": [
                          "Orders",
                          "Sales"
                      ]
                  }
              },
              "Permissions": [
                  "ASSOCIATE"
              ],
              "PermissionsWithGrantOption": []
          }
      ]
  }
  ```

**授予对 LF 标签的权限 (AWS CLI)**

1. 输入类似以下的命令。此示例向用户 `datalake_user1` 授予对带有键 `module` 的 LF 标签的 `Associate` 权限。它授予查看和分配该键的所有值的权限，如星号 (\$1) 所示。

   ```
   aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ASSOCIATE" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
   ```

   授予 `Associate` 权限会隐式授予 `Describe` 权限。

   下一个示例使用密钥和授权选项`Associate`向外部 AWS 账户 1234-5678-9012 授予LF-tag。`module`它仅授予查看和分配值 `sales` 和 `orders` 的权限。

   ```
   aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=123456789012 --permissions "ASSOCIATE" --permissions-with-grant-option "ASSOCIATE" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["sales", "orders"]}}'
   ```

1. 授予 `GrantWithLFTagExpression` 权限会隐式授予 `Describe` 权限。

   下一个示例使用授予选项向用户授予对带有键 `module` 的 LF 标签的 `GrantWithLFTagExpression` 权限。它仅使用值 `sales` 和 `orders` 授予查看和授予对数据目录资源的权限。

   ```
   aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=111122223333 --permissions "GrantWithLFTagExpression" --permissions-with-grant-option "GrantWithLFTagExpression" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["sales", "orders"]}}'
   ```

1. 下一个示例使用授予选项向用户授予对带有键 `module` 的 LF 标签的 `Drop` 权限。它会授予删除 LF 标签的权限。要删除 LF 标签，您需要具有对该键的所有值的权限。

   ```
   aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=111122223333 --permissions "DROP" --permissions-with-grant-option "DROP" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
   ```

1. 下一个示例使用授予选项向用户授予对带有键 `module` 的 LF 标签的 `Alter` 权限。它会授予删除 LF 标签的权限。要更新 LF 标签，您需要具有对该键的所有值的权限。

   ```
   aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=111122223333 --permissions "ALTER" --permissions-with-grant-option "ALTER" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
   ```

**撤销对 LF 标签的权限 (AWS CLI)**
+ 输入类似以下的命令。此示例向用户 `datalake_user1` 授予对带有键 `module` 的 LF 标签的 `Associate` 权限。

  ```
  aws lakeformation revoke-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ASSOCIATE" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
  ```