

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

# 基础数据访问控制
<a name="access-control-underlying-data"></a>

当集成 AWS 服务请求访问由控制的 Amazon S3 位置的数据时 AWS Lake Formation，Lake Formation 会提供访问数据的临时凭证。

要使 Lake Formation 能够控制对 Amazon S3 位置基础数据的访问，请向 Lake Formation 注册该位置。**

注册 Amazon S3 位置后，您即可开始授予以下 Lake Formation 权限：
+ 对指向该位置的数据目录表的数据访问权限（`SELECT`、`INSERT` 和 `DELETE)`）。
+ 对该位置的数据位置权限。

Lake Formation 数据位置权限可控制创建指向特定 Amazon S3 位置的数据目录资源的能力。数据位置权限为数据湖中的位置提供了一层额外的安全保护。当您向主体授予 `CREATE_TABLE` 或 `ALTER` 权限时，您还会授予数据位置权限，以限制主体可以为其创建或更改元数据表的位置。

Amazon S3 位置是存储桶下的存储桶或前缀，但不是单个 Amazon S3 对象。

您可以使用 Lake Formation 控制台、API 或 AWS CLI来向主体授予数据位置权限。授予的一般形式如下：

```
grant DATA_LOCATION_ACCESS to principal on S3 location [with grant option]
```

如果包含 `with grant option`，则被授权者可以向其他主体授予权限。

回想一下，Lake Formation 权限始终与 AWS Identity and Access Management (IAM) 权限结合使用，以实现精细的访问控制。对于 read/write 底层 Amazon S3 数据的权限，按如下方式授予 IAM 权限：

注册位置时，您需要指定一个 IAM 角色以授予对该位置的读/写权限。Lake Formation 在为集成 AWS 服务提供临时证书时担任该角色。典型角色可能附加了以下策略，其中注册位置为存储桶 `awsexamplebucket`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```

------

Lake Formation 提供了一个服务相关角色，您可以在注册期间使用该角色自动创建此类策略。有关更多信息，请参阅 [在 Lake Formation 中使用服务相关角色](service-linked-roles.md)。

因此，注册 Amazon S3 位置会授予对该位置所需的 IAM `s3:` 权限，其中这些权限由用于注册该位置的角色指定。

**重要**  
避免注册启用了**请求者付费**的 Amazon S3 存储桶。对于在 Lake Formation 中注册的存储桶，用于注册存储桶的角色始终被视为请求者。如果存储桶被其他 AWS 账户访问，则如果该角色与存储桶拥有者属于同一个账户，则该存储桶拥有者需要支付数据访问费用。

要 read/write 访问基础数据，除了 Lake Formation 权限外，委托人还需要 `lakeformation:GetDataAccess` IAM 权限。获得此权限后，Lake Formation 将授权访问数据的临时凭证请求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
```

------

 在上述策略中，必须将 Resource 参数设置为“\$1”（全部）。不支持为此权限指定任何其他资源。此配置确保 Lake Formation 可以高效地管理整个数据湖环境中的数据访问。

**注意**  
Amazon Athena 要求用户具有 `lakeformation:GetDataAccess` 权限。其他集成服务要求其基础执行角色具有 `lakeformation:GetDataAccess` 权限。

此权限包含在 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)中的建议策略中。

总而言之，要让 Lake Formation 主体能够通过由 Lake Formation 权限控制的访问权限读取和写入基础数据，请执行以下操作：
+ 向 Lake Formation 注册包含此类数据的 Amazon S3 位置。
+ 创建指向基础数据位置的数据目录表的主体必须具有数据位置权限。
+ 读取和写入基础数据的主体必须对指向基础数据位置的数据目录表具有 Lake Formation 数据访问权限。
+ 在向 Lake Formation 注册基础数据位置时，读取和写入基础数据的主体必须具有 `lakeformation:GetDataAccess` IAM 权限。

**注意**  
如果您可以通过 IAM 或 Amazon S3 策略访问 Amazon S3 位置，则 Lake Formation 权限模型不会阻止通过 Amazon S3 API 或控制台访问 Amazon S3 位置。您可以将 IAM 策略附加到主体以阻止此访问。

**有关数据位置权限的更多信息**  
数据位置权限控制对数据目录数据库和表的创建和更新操作的结果。规则如下：
+ 主体必须对 Amazon S3 位置具有显式或隐式数据位置权限，才能创建或更新指定该位置的数据库或表。
+ 使用控制台、API 或授予显式权限`DATA_LOCATION_ACCESS` AWS CLI。
+ 当数据库具有指向注册位置的位置属性、主体具有对数据库的 `CREATE_TABLE` 权限以及主体尝试在该位置或子位置创建表时，将授予隐式权限。
+ 如果某个主体被授予对某个位置的数据位置权限，则该主体对所有子位置都具有数据位置权限。
+ 委托人不需要数据位置权限即可对基础数据执行 read/write 操作。具有 `SELECT` 或 `INSERT` 数据访问权限就足够了。数据位置权限仅适用于创建指向该位置的数据目录资源。

请考虑下图中所示的场景。

![\[文件夹层次结构和两个数据库（数据库 A 和 B），其中数据库 B 指向 Customer service 文件夹。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/location-permissions-example.png)


在此示意图中：
+ Amazon S3 存储桶 `Products`、`Finance` 和 `Customer Service` 已向 Lake Formation 注册。
+ `Database A` 不具有位置属性，而 `Database B` 具有指定 `Customer Service` 存储桶的位置属性。
+ 用户 `datalake_user` 具有对这两个数据库的 `CREATE_TABLE` 权限。
+ 用户 `datalake_user` 仅被授予对 `Products` 存储桶的数据位置权限。

以下是用户 `datalake_user` 尝试在特定位置的特定数据库中创建目录表时的结果。


**`datalake_user` 在其中尝试创建表的位置**  

| 数据库和位置 | 成功或失败 | Reason | 
| --- | --- | --- | 
| 位于 Finance/Sales 的数据库 A | 失败 | 无数据位置权限 | 
| 位于 Products 的数据库 A | 成功 | 具有数据位置权限 | 
| 位于 HR/Plans 的数据库 A | 成功 | 位置未进行注册 | 
| 位于 Customer Service/Incidents 的数据库 B | 成功 | 数据库在 Customer Service 处具有位置属性。 | 

有关更多信息，请参阅下列内容：
+ [向数据湖添加 Amazon S3 位置](register-data-lake.md)
+ [Lake Formation 权限参考](lf-permissions-reference.md)
+ [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)