

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

# 管理 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 标签表达式列表和下一个令牌（如果适用）。

------