

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

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

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

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

**注意**  
每个授予修改表的权限的策略都应包括供 `GetTableMetadataLocation` 访问表根文件的权限。有关更多信息，请参阅 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_s3TableBuckets_GetTableMetadataLocation.html](https://docs.amazonaws.cn/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（来自 Amazon Web Services 账户 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"
        }
    ]
}
```

------