

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

# 元数据访问控制
<a name="access-control-metadata"></a>

对于数据目录资源的访问控制，以下讨论假定使用 Lake Formation 权限进行精细访问控制，并使用 IAM 策略进行粗粒度访问控制。

有两种不同的方法可以授予对数据目录资源的 Lake Formation 权限：
+ **命名资源访问控制** - 使用此方法，您可以通过指定数据库名称或表名称来授予对特定数据库或表的权限 授予形式如下：

  [使用授予选项] 向**主体授予对**资源的权限**。

  使用授予选项，您可以允许被授权者向其他主体授予权限。
+ **基于标签的访问控制** - 使用此方法，您可以为数据目录数据库、表和列分配一个或多个 LF 标签，并向主体授予对一个或多个 LF 标签的权限。每个 LF 标签都是一个键值对，例如 `department=sales`。具有与数据目录资源上的 LF 标签匹配的主体可以访问该资源。对于包含大量数据库和表的数据湖，建议使用此方法。[Lake Formation 基于标签的访问控制](tag-based-access-control.md)中对此进行了详细说明。

主体对资源具有的权限是这两种方法授予的权限的联合。

下表汇总了对数据目录资源可用的 Lake Formation 权限。列标题表示被授予权限的资源。


| 目录 | 数据库 | 表 | 
| --- | --- | --- | 
| CREATE\$1DATABASE | CREATE\$1TABLE | ALTER | 
|  | ALTER | DROP | 
|  | DROP | DESCRIBE | 
|  | DESCRIBE | SELECT\$1 | 
|  |  | INSERT\$1 | 
|  |  | DELETE\$1 | 

例如，`CREATE_TABLE` 权限是针对数据库授予的。例如，这意味着允许主体在该数据库中创建表。

带星号 (\$1) 的权限是针对数据目录资源授予的，但它们适用于基础数据。例如，通过对元数据表的 `DROP` 权限，您可以从数据目录中删除该表。但是，通过对同一表授予的 `DELETE`权限，您可以使用 SQL `DELETE` 等语句删除 Amazon S3 中表的基础数据。通过这些权限，您还可以在 Lake Formation 控制台上查看表，并使用 AWS Glue API 检索有关表的信息。因此，`SELECT`、`INSERT` 和 `DELETE` 既是数据目录权限，也是数据访问权限。

对表授予 `SELECT` 权限时，您可以添加包含或排除一列或多列的筛选条件。这允许对元数据表列进行精细访问控制，从而限制集成服务的用户在运行查询时可以看到的列。仅使用 IAM 策略时无法使用此功能。

还有一个名为 `Super` 的特殊权限。`Super` 权限使主体能够对被授予该权限的数据库或表执行所有支持的 Lake Formation 操作。此权限可以与其他 Lake Formation 权限共存。例如，您可以授予对元数据表的 `Super`、`SELECT`、和 `INSERT` 权限。主体可以对表执行所有支持的操作，当您撤销 `Super` 时，`SELECT` 和 `INSERT` 权限将保留。

有关每项权限的详细信息，请参阅 [Lake Formation 权限参考](lf-permissions-reference.md)。

**重要**  
为了能够查看其他用户创建的数据目录表，您必须至少被授予对该表的一项 Lake Formation 权限。如果您被授予对该表的至少一项权限，则还可以查看该表中包含的数据库。

您可以使用 Lake Formation 控制台、API 或 AWS Command Line Interface (AWS CLI) 来授予或撤销数据目录权限。以下是向用户授予在`retail`数据库中创建表的`datalake_user1`权限的 AWS CLI 命令示例。

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 
 --permissions "CREATE_TABLE" --resource '{ "Database": {"Name":"retail"}}'
```

以下是粗粒度访问控制 IAM 策略的示例，该策略使用 Lake Formation 权限对精细访问控制进行了补充。它允许对任何元数据数据库或表执行所有操作。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:*Database*",
                "glue:*Table*",
                "glue:*Partition*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

下一个示例也是粗粒度访问控制，但在某种程度上更具限制性。它允许对指定账户和区域中数据目录中的所有元数据数据库和表进行只读操作。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": "arn:aws:glue:us-east-1:111122223333:*"
        } 
    ]   
}
```

------

将这些策略与以下策略进行比较，后者实现了基于 IAM 的精细访问控制。它仅授予对指定账户和区域中客户关系管理 (CRM) 元数据数据库中的部分表的权限。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/CRM",
                "arn:aws:glue:us-east-1:111122223333:table/CRM/P*"
            ]
        } 
    ]   
}
```

------

有关粗粒度访问控制策略的更多示例，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。