

# S3 表类数据存储服务的访问管理
<a name="s3-tables-setting-up"></a>

在 S3 表类数据存储服务中，资源包括表存储桶及其包含的表。默认情况下，创建资源的 AWS 账户的根用户（资源拥有者）和该账户中具有必要权限的 AWS Identity and Access Management（IAM）用户可以访问他们创建的资源。资源拥有者指定还有谁可以访问该资源以及支持他们对该资源执行哪些操作。Amazon S3 具有各种访问管理工具，您可以使用这些工具向其他人授予对您的 S3 资源的访问权限。如果已将表与 AWS Amazon SageMaker 智能湖仓集成，则还可以使用 Lake Formation 管理对表和命名空间的精细访问。以下主题概述了 S3 表类数据存储服务的资源、IAM 操作和条件键。它们还提供了 S3 表类数据存储服务的基于资源和基于身份的策略的示例。

**Topics**
+ [资源](#s3-tables-resources)
+ [S3 表类数据存储服务的操作](#s3-tables-actions)
+ [S3 表类数据存储服务的条件键](#s3-tables-conditionkeys)
+ [S3 表类数据存储服务的基于 IAM 身份的策略](s3-tables-identity-based-policies.md)
+ [S3 表类数据存储服务的基于资源的策略](s3-tables-resource-based-policies.md)
+ [适用于 S3 表类数据存储服务的 AWS 托管式策略](s3-tables-security-iam-awsmanpol.md)
+ [使用 SQL 语义授予访问权限](s3-tables-sql.md)
+ [使用 Lake Formation 管理对表或数据库的访问权限](grant-permissions-tables.md)

## 资源
<a name="s3-tables-resources"></a>

S3 表类数据存储服务资源包括表存储桶及其包含的表。
+ 表存储桶：表存储桶专为表而设计，与通用 S3 存储桶中自行管理的表相比，可提供更高的每秒事务数（TPS）和更好的查询吞吐量。表存储桶具有与 Amazon S3 通用存储桶相同的耐久性、可用性、可扩展性和性能特征。
+ 表 - 表存储桶中的表以 Apache Iceberg 格式存储。您可以在支持 Iceberg 的查询引擎中使用标准 SQL 查询这些表。

表和表存储桶的 Amazon 资源名称（ARN）包含 `s3tables` 命名空间、AWS 区域、AWS 账户 ID 和存储桶名称。要访问表和表存储桶并对其执行操作，必须使用以下 ARN 格式：
+ 表格 ARN 格式：

  `arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-bucket/table/demo-tableID`

## S3 表类数据存储服务的操作
<a name="s3-tables-actions"></a>

在基于身份的策略或基于资源的策略中，您可以定义对于特定 IAM 主体支持或拒绝哪些 S3 表类数据存储服务操作。表操作对应于存储桶和表级 API 操作。所有操作都是唯一 IAM 命名空间的一部分：`s3tables`。

当您在策略中使用一项操作时，通常会允许或拒绝使用具有相同名称的 API 操作。但在某些情况下，单个操作可控制对多个 API 操作的访问。例如，`s3tables:GetTableData` 操作包括对于 `GetObject`、`ListParts` 和 `ListMultiparts` API 操作的权限。

以下是表存储桶支持的操作。您可以在 IAM 策略或资源策略的 `Action` 元素中指定以下操作。


| Action | 说明 | 访问级别 | 跨账户访问 | 
| --- | --- | --- | --- | 
| s3tables:CreateTableBucket | 授予创建表存储桶的权限 | Write | 否 | 
| s3tables:GetTableBucket | 授予检索表存储桶 ARN、表存储桶名称和创建日期的权限。 | Write | 是 | 
| s3tables:ListTableBuckets | 授予列出此账户中所有表存储桶的权限 | Read | 否 | 
| s3tables:CreateNamespace | 授予在表存储桶中创建命名空间的权限 | Write | 是 | 
| s3tables:GetNamespace | 授予检索命名空间详细信息的权限 | Read | 是 | 
| s3tables:ListNamespaces | 授予列出表存储桶上所有命名空间的权限。 | Read | 是 | 
| s3tables:DeleteNamespace | 授予删除表存储桶中命名空间的权限 | Write | 是 | 
| s3tables:DeleteTableBucket | 授予删除存储桶的权限  | Write | 是  | 
| s3tables:PutTableBucketPolicy | 授予添加或替换存储桶策略的权限 | Permissions Management | 否 | 
| s3tables:GetTableBucketPolicy | 授予检索存储桶策略的权限 | Read | 否 | 
| s3tables:DeleteTableBucketPolicy | 授予删除存储桶策略的权限 | Permissions Management | 否 | 
| s3tables:GetTableBucketMaintenanceConfiguration | 授予检索表存储桶的维护配置的权限 | Read | 是  | 
| s3tables:PutTableBucketMaintenanceConfiguration | 授予添加或替换表存储桶的维护配置的权限 | Write | 是 | 
| s3tables:PutTableBucketEncryption | 授予添加或替换表存储桶的加密配置的权限 | Write | 否 | 
| s3tables:GetTableBucketEncryption | 授予检索表存储桶的加密配置的权限 | Read | 否 | 
| s3tables:DeleteTableBucketEncryption | 授予删除表存储桶的加密配置的权限 | Write | 否 | 

表支持以下操作：


| Action | 说明 | 访问级别 | 跨账户访问 | 
| --- | --- | --- | --- | 
| s3tables:GetTableMaintenanceConfiguration | 授予检索表的维护配置的权限 | Read | 是 | 
| s3tables:PutTableMaintenanceConfiguration |  授予添加或替换表的维护配置的权限 | Write | 是 | 
| s3tables:PutTablePolicy | 授予添加或替换表策略的权限 | Permissions Management | 否 | 
| s3tables:GetTablePolicy | 授予检索表策略的权限 | Read | 否 | 
| s3tables:DeleteTablePolicy | 授予删除表策略的权限 | Permissions management | 否 | 
| s3tables:CreateTable | 授予在表存储桶中创建表的权限 | Write | 是 | 
| s3tables:GetTable | 授予检索表信息的权限 | Read | 是 | 
| s3tables:GetTableMetadataLocation | 授予检索表根指针（元数据文件）的权限 | Read | 是  | 
| s3tables:ListTables | 授予列出表存储桶中的所有表的权限 | Read | 是  | 
| s3tables:RenameTable | 授予更改表名称的权限 | Write | 是  | 
| s3tables:UpdateTableMetadataLocation | 授予更新表根指针（元数据文件）的权限 | Write | 是  | 
| s3tables:GetTableData | 授予读取存储在表存储桶中的表元数据和数据对象的权限 | Read | 是 | 
| s3tables:PutTableData | 授予写入存储在表存储桶中的表元数据和数据对象的权限 | Write | 是 | 
| s3tables:GetTableEncryption  | 授予检索表的加密设置的权限 | Write | 否 | 
| s3tables:PutTableEncryption  | 授予将加密添加到表的权限 | Write | 否 | 
| s3tables:DeleteTable | 授予从表存储桶中删除表的权限 | Write | 是 | 

为了执行表级读取和写入操作，S3 表类数据存储服务支持如 `GetObject` 和 `PutObject` 等 Amazon S3 API 操作。下表提供了对象级操作的列表。在授予对表的读写权限时，您可以使用以下操作。


| Action | S3 对象 API | 
| --- | --- | 
| s3tables:GetTableData | GetObject, ListParts, HeadObject | 
| s3tables:PutTableData | PutObject, CreateMultipartUpload, CompleteMultipartUpload,  UploadPart, AbortMultipartUpload | 

例如，如果用户拥有 `GetTableData` 权限，则他们可以读取与该表关联的所有文件，例如其元数据文件、清单、清单列表文件和 parquet 数据文件。

## S3 表类数据存储服务的条件键
<a name="s3-tables-conditionkeys"></a>

S3 表类数据存储服务支持 [AWS 全局条件上下文条件键](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)。

此外，S3 表类数据存储服务定义以下可以在访问策略中使用的条件键。


| 条件键 | 说明 | 类型 | 
| --- | --- | --- | 
|  s3tables:tableName |  按表存储桶中表的名称筛选访问权限。您可以使用 `s3tables:tableName` 条件键来编写 IAM 或表存储桶策略，以限制用户或应用程序仅可访问符合此名称条件的表。  请务必注意，如果您使用 `s3tables:tableName` 条件键来控制访问权限，则表名称的更改可能会影响这些策略。 示例值："s3tables:tableName":"department\$1" | String | 
|  s3tables:namespace |  按在表存储桶中创建的命名空间筛选访问权限。 您可以使用 `s3tables:namespace` 条件键编写 IAM、表或表存储桶策略，以限制用户或应用程序对作为特定命名空间一部分的表的访问权限。*示例值：*`"s3tables:namespace":"hr" ` 请务必注意，如果您使用 `s3tables:namespace` 条件键来控制访问权限，那么命名空间的更改可能会影响这些策略。  | String | 
|  s3tables:SSEAlgorithm |  按用于加密表的服务器端加密算法筛选访问权限。 您可以使用 `s3tables:SSEAlgorithm` 条件键编写 IAM、表或表存储桶策略，以限制用户或应用程序只能访问使用特定加密类型加密的表。*示例值：*`"s3tables:SSEAlgorithm":"aws:kms" ` 请务必注意，如果您使用 `s3tables:SSEAlgorithm` 条件键来控制访问权限，那么加密的更改可能会影响这些策略。  | String | 
|  s3tables:KMSKeyArn |  按用于加密表的密钥的 AWS KMS 密钥 ARN 筛选访问权限 您可以使用 `s3tables:KMSKeyArn` 条件键来编写 IAM、表或表存储桶策略，以限制用户或应用程序只能访问使用特定 KMS 密钥加密的表。 请务必注意，如果您使用 `s3tables:KMSKeyArn` 条件键来控制访问权限，则更改 KMS 密钥可能会影响这些策略。  | ARN | 

# S3 表类数据存储服务的基于 IAM 身份的策略
<a name="s3-tables-identity-based-policies"></a>

默认情况下，用户和角色不拥有创建或修改表和表存储桶的权限。他们也无法通过 s3 控制台、AWS Command Line Interface（AWS CLI）或 Amazon S3 REST API 执行任务。要创建和访问表存储桶和表，AWS Identity and Access Management（IAM）管理员必须向 IAM 角色或用户授予必要的权限。要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅 *IAM 用户指南*中的 [创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

以下主题包括基于 IAM 身份的策略示例。要使用以下示例策略，请将*用户输入占位符* 替换为您自己的信息。

**Topics**
+ [示例 1：支持创建和使用表存储桶的访问权限](#example-1-s3-tables-identity-based-policies)
+ [示例 2：支持在表存储桶中创建和使用表的访问权限](#example-2-s3-tables-identity-based-policies)

## 示例 1：支持创建和使用表存储桶的访问权限
<a name="example-1-s3-tables-identity-based-policies"></a>

**.**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:CreateTableBucket",
                "s3tables:PutTableBucketPolicy",
                "s3tables:GetTableBucketPolicy",
                "s3tables:ListTableBuckets",
                "s3tables:GetTableBucket"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 示例 2：支持在表存储桶中创建和使用表的访问权限
<a name="example-2-s3-tables-identity-based-policies"></a>

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:GetTableBucket",
                "s3tables:ListTables",
                "s3tables:CreateTable",
                "s3tables:PutTableData",
                "s3tables:GetTableData",
                "s3tables:GetTable",
                "s3tables:GetTableMetadataLocation",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:GetNamespace",
                "s3tables:CreateNamespace",
                "s3tables:ListNamespaces"
            ],
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/*"
            ]
        }
    ]
}
```

------

# S3 表类数据存储服务的基于资源的策略
<a name="s3-tables-resource-based-policies"></a>

S3 表类数据存储服务提供了基于资源的策略，用于管理对表存储桶和表的访问权限：表存储桶策略和表策略。可以使用表存储桶策略在表存储桶、命名空间或表级授予 API 访问权限。附加到表存储桶的权限可以应用于存储桶中的所有表，也可以应用于存储桶中的特定表，具体取决于策略定义。可以使用表策略在表级授予权限。

当 S3 表类数据存储服务收到请求时，它首先验证请求者是否拥有必要的权限。它对所有相关访问策略、用户策略和基于资源的策略（IAM 用户策略、IAM 角色策略、表存储桶策略和表策略）进行评估，以决定是否对该请求进行授权。例如，如果表存储桶策略授予用户对存储桶中的表执行所有操作（包括 `DeleteTable`）的权限，但单个表的表策略拒绝所有用户执行 `DeleteTable` 操作，则该用户无法删除该表。

以下主题包括表和表存储桶策略的示例。要使用这些策略，请将*用户输入占位符* 替换为您自己的信息。

**注意**  
每个授予修改表的权限的策略都应包括供 `GetTableMetadataLocation` 访问表根文件的权限。有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_GetTableMetadataLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_GetTableMetadataLocation.html)。
每次对表执行写入或删除活动时，都要在访问策略中包含对 `UpdateTableMetadataLocation` 的权限。
我们建议使用表存储桶策略来管理对存储桶级操作的访问权限，并使用表策略来管理对表级操作的访问权限。如果您想在多个表中定义相同的权限集，那么我们建议使用表存储桶策略。

**Topics**
+ [示例 1：表存储桶策略支持对账户中的存储桶执行 `PutBucketMaintenanceConfiguration` 的访问权限](#table-bucket-policy-1)
+ [示例 2：支持对存储在 `hr` 命名空间中的表进行读取（SELECT）访问的表存储桶策略](#table-bucket-policy-2)
+ [示例 3：支持用户删除表的表策略](#table-bucket-policy-3)

## 示例 1：表存储桶策略支持对账户中的存储桶执行 `PutBucketMaintenanceConfiguration` 的访问权限
<a name="table-bucket-policy-1"></a>

以下示例表存储桶策略通过支持访问 `PutBucketMaintenanceConfiguration`，可让 IAM `data steward` 删除账户中所有存储桶的未引用对象。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:PutTableBucketMaintenanceConfiguration"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 示例 2：支持对存储在 `hr` 命名空间中的表进行读取（SELECT）访问的表存储桶策略
<a name="table-bucket-policy-2"></a>

以下示例表存储桶策略支持 Jane（来自 AWS 账户 ID `123456789012` 的用户）访问存储在表存储桶的 `hr` 命名空间中的表。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Jane"
            },
            "Action": [
                "s3tables:GetTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/*",
            "Condition": {
                "StringLike": {
                    "s3tables:namespace": "hr"
                }
            }
        }
    ]
}
```

------

## 示例 3：支持用户删除表的表策略
<a name="table-bucket-policy-3"></a>

以下示例表策略支持 IAM 角色 `data steward` 删除表。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "DeleteTable",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:DeleteTable",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:PutTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/tableUUID"
        }
    ]
}
```

------

# 适用于 S3 表类数据存储服务的 AWS 托管式策略
<a name="s3-tables-security-iam-awsmanpol"></a>

AWS 托管式策略是由 AWS 创建和管理的独立策略。AWS 托管式策略旨在为许多常见使用案例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住，AWS 托管式策略可能不会为您的特定使用案例授予最低权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管式策略中定义的权限。如果 AWS 更新在 AWS 托管式策略中定义的权限，则更新会影响该策略所附加到的所有主体身份（用户、组和角色）。当新的 AWS 服务 启动或新的 API 操作可用于现有服务时，AWS 最有可能更新 AWS 托管式策略。

有关更多信息，请参阅《*IAM 用户指南*》中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 托管式策略：AmazonS3TablesFullAccess
<a name="s3-tables-security-iam-awsmanpol-amazons3tablesfullaccess"></a>

您可以将 `AmazonS3TablesFullAccess` 策略附加到 IAM 身份。此策略授予支持完全访问 Amazon S3 表类数据存储服务的权限。有关此策略的更多信息，请参阅“[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html)”。

## AWS 托管式策略：AmazonS3TablesReadOnlyAccess
<a name="s3-tables-security-iam-awsmanpol-amazons3readonlyaccess"></a>

您可以将 `AmazonS3TablesReadOnlyAccess` 策略附加到 IAM 身份。此策略授予支持对 Amazon S3 表类数据存储服务进行只读访问的权限。有关此策略的更多信息，请参阅“[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html)”。

## AWS 托管式策略：AmazonS3TablesLakeFormationServiceRole
<a name="s3-tables-security-iam-awsmanpol-amazons3tableslakeformationservicerole"></a>

您可以将 `AmazonS3TablesLakeFormationServiceRole` 策略附加到 IAM 身份。此策略授予支持 AWS Lake Formation 服务角色访问 S3 表类数据存储服务的权限。AWS KMS 权限用于支持 Lake Formation 访问加密的表。有关此策略的更多信息，请参阅“[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html)”。

## Amazon S3 表类数据存储服务对 AWS 托管式策略的更新
<a name="s3-tables-security-iam-awsmanpol-updates"></a>

查看有关自 Amazon S3 表类数据存储服务开始跟踪更改以来，对 S3 表类数据存储服务的 AWS 托管式策略的更新的详细信息。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  Amazon S3 表类数据存储服务更新了 `AmazonS3TablesFullAccess`。  |  S3 表类数据存储服务更新了名为 `AmazonS3TablesFullAccess` 的 AWS 托管策略。此更新将授予向 S3 表类数据存储服务复制服务传递角色的权限。  |  2025 年 12 月 2 日  | 
|  Amazon S3 表类数据存储服务添加了 `AmazonS3TablesLakeFormationServiceRole`。  |  S3 表类数据存储服务添加了一个名为 `AmazonS3TablesLakeFormationServiceRole` 的新 AWS 托管式策略。此策略授予支持 Lake Formation 服务角色访问 S3 表类数据存储服务的权限。  | 2025 年 5 月 19 日 | 
|  Amazon S3 表类数据存储服务添加了 `AmazonS3TablesFullAccess`。  |  S3 表类数据存储服务添加了一个名为 `AmazonS3TablesFullAccess` 的新 AWS 托管式策略。此策略授予支持完全访问 Amazon S3 表类数据存储服务的权限。  | 2024 年 12 月 3 日 | 
|  Amazon S3 表类数据存储服务添加了 `AmazonS3TablesReadOnlyAccess`。  |  S3 表类数据存储服务添加了一个名为 `AmazonS3TablesReadOnlyAccess` 的新 AWS 托管式策略。此策略授予支持对 Amazon S3 表类数据存储服务进行只读访问的权限。  | 2024 年 12 月 3 日 | 
|  Amazon S3 表类数据存储服务开始了跟踪更改。  |  Amazon S3 表类数据存储服务为其 AWS 托管式策略开始了跟踪更改。  | 2024 年 12 月 3 日 | 

# 使用 SQL 语义授予访问权限
<a name="s3-tables-sql"></a>

可以通过在表和表存储桶策略中使用 SQL 语义来授予对表的权限。可以使用的 SQL 语义的示例为 `CREATE`、`INSERT`、`DELETE`、`UPDATE` 和 `ALTER`。下表提供了与 SQL 语义关联的 API 操作的列表，您可以使用这些操作向用户授予权限。

S3 表类数据存储服务部分支持使用 SQL 语义的权限。例如，`CreateTable` API 仅在表存储桶中创建一个空表。您需要额外的权限（例如 `UpdateTableMetadata`、`PutTableData` 和 `GetTableMetadataLocation`），才能设置表架构。这些额外权限还意味着您还授予用户在表中插入行的权限。如果您希望纯粹基于 SQL 语义来管理访问权限，那么我们建议您使用 [AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) 或任何与 S3 表类数据存储服务集成的第三方解决方案。


| 表级活动 | IAM 操作 | 
| --- | --- | 
| SELECT | s3tables:GetTableData, s3tables:GetTableMetadataLocation | 
| CREATE | s3tables:CreateTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation,  | 
| INSERT | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| UPDATE | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| ALTER,RENAME | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation, s3tables:RenameTable  | 
| DELETE,DROP | s3tables:DeleteTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation  | 

**注意**  
从表存储桶中删除表需要 `s3tables:DeleteTable` 权限。此权限可让您永久移除表及其所有关联数据和元数据。请谨慎使用此权限，因为删除操作无法撤消。

# 使用 Lake Formation 管理对表或数据库的访问权限
<a name="grant-permissions-tables"></a>

在表存储桶与 AWS 分析服务集成后，Lake Formation 将管理对表的访问，并要求向每个 IAM 主体（用户或角色）授权对分析服务执行操作。Lake Formation 使用其自己的权限模型（Lake Formation 权限），该模型可以对数据目录资源进行精细的访问控制。

有关更多信息，请参阅《AWS Lake Formation Developer Guide》**中的 [Overview of Lake Formation permissions](https://docs.aws.amazon.com//lake-formation/latest/dg/lf-permissions-overview.html)。

AWS Lake Formation 中有两种主要类型的权限：

1. 元数据访问权限控制着在数据目录中创建、读取、更新和删除元数据数据库和表的能力。

1. 基础数据访问权限控制着对数据目录资源指向的基础 Amazon S3 位置读取和写入数据的能力。

Lake Formation 结合使用自己的权限模型和 IAM 权限模型，来控制对数据目录资源和基础数据的访问权限：
+ 为了使访问数据目录资源或基础数据的请求取得成功，请求必须通过由 IAM 和 Lake Formation 进行的权限检查。
+ IAM 权限控制对 Lake Formation 和 AWS Glue API 以及资源的访问权限，而 Lake Formation 权限控制对数据目录资源、Amazon S3 位置和基础数据的访问权限。

Lake Formation 权限仅适用于授予这些权限的区域，并且主体必须由数据湖管理员或其它具有必要权限的主体授权，才能获得 Lake Formation 权限。

**注意**  
如果您是执行表存储桶集成的用户，则您已经拥有对表的 Lake Formation 权限。如果您是唯一将访问表的主体，则可以跳过此步骤。您只需向其它 IAM 主体授予对表的 Lake Formation 权限即可。这可让其它主体在运行查询时访问该表。有关更多信息，请参阅 [授予对表或数据库的 Lake Formation 权限](#grant-lf-table)。

## 授予对表或数据库的 Lake Formation 权限
<a name="grant-lf-table"></a>

您可以通过 Lake Formation 控制台或 AWS CLI，向主体授予对表存储桶中表或数据库的 Lake Formation 权限。

**注意**  
当您将对数据目录资源的 Lake Formation 权限授予外部账户或直接授予其他账户中的 IAM 主体时，Lake Formation 会使用 AWS Resource Access Manager (AWS RAM) 服务共享该资源。如果被授权者账户与授予者账户在同一个组织中，则被授权者立即可以使用共享资源。如果被授权者账户不在同一个组织中，则 AWS RAM 会向被授权者账户发送邀请，以便其接受或拒绝资源授权。然后，要使共享资源可用，被授权者账户中的数据湖管理员必须使用 AWS RAM 控制台或 AWS CLI 接受邀请。有关跨账户数据共享的更多信息，请参阅《AWS Lake Formation Developer Guide》**中的 [Cross-account data sharing in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html)。

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

1. 打开 AWS Lake Formation 控制台（网址为 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)），并以数据湖管理员身份登录。有关如何创建数据湖管理员的更多信息，请参阅《AWS Lake Formation Developer Guide》**中的 [Create a data lake administrator](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

1. 在导航窗格中，选择**数据权限**，然后选择**授予**。

1. 在**授予权限**页面的**主体**下，执行以下操作之一：
   + 对于 Amazon Athena 或 Amazon Redshift，选择 **IAM 用户和角色**，然后选择您用于查询的 IAM 主体。
   + 对于 Amazon Data Firehose，选择 **IAM 用户和角色**，然后选择您创建的服务角色以流式传输到表中。
   + 对于 Quick，选择 **SAML 用户和组**，然后输入 Quick 管理员用户的 Amazon 资源名称（ARN）。
   + 要访问 AWS Glue Iceberg REST 端点，请选择 **IAM 用户和角色**，然后选择您为客户端创建的 IAM 角色。有关更多信息，请参阅 [为客户端创建 IAM 角色](s3-tables-integrating-glue-endpoint.md#glue-endpoint-create-iam-role)。

1. 在 **LF 标签或目录资源**下，选择**命名 Data Catalog 资源**。

1. 对于**目录**，请选择您在集成表存储桶时创建的子目录，例如 `account-id:s3tablescatalog/amzn-s3-demo-bucket`。

1. 对于**数据库**，选择您创建的 S3 表存储桶命名空间。

1. （可选）对于**表**，请选择您在表存储桶中创建的 S3 表。
**注意**  
如果您要在 Athena 查询编辑器中创建新表，请不要选择表。

1. 请执行以下操作之一：
   + 如果您在之前的步骤中指定了表，请为**表权限**选择 **Super**。
   + 如果您未在之前的步骤中指定表，请转到**数据库权限**。对于跨账户数据共享，您不能选择 **Super** 来向另一个主体授予对数据库的所有权限。而是应选择更精细的权限，例如**描述**。

1. 选择**授权**。

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

1. 务必要以数据湖管理员身份运行以下 AWS CLI 命令。有关更多信息，请参阅《AWS Lake Formation Developer Guide》**中的 [Create a data lake administrator](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

1. 运行以下命令，向 IAM 主体授予对 S3 表存储桶中表的 Lake Formation 权限以访问该表。要使用此示例，请将 *`user input placeholders`* 替换为您自己的信息。

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role"
       },
       "Resource": {
           "Table": {
               "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
               "DatabaseName": "S3 table bucket namespace, for example, test_namespace",
               "Name": "S3 table bucket table name, for example test_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

------