S3 表类数据存储服务提供了基于资源的策略,用于管理对表存储桶和表的访问权限:表存储桶策略和表策略。可以使用表存储桶策略在表存储桶、命名空间或表级授予 API 访问权限。附加到表存储桶的权限可以应用于存储桶中的所有表,也可以应用于存储桶中的特定表,具体取决于策略定义。可以使用表策略在表级授予权限。
当 S3 表类数据存储服务收到请求时,它首先验证请求者是否拥有必要的权限。它对所有相关访问策略、用户策略和基于资源的策略(IAM 用户策略、IAM 角色策略、表存储桶策略和表策略)进行评估,以决定是否对该请求进行授权。例如,如果表存储桶策略授予用户对存储桶中的表执行所有操作(包括 DeleteTable
)的权限,但单个表的表策略拒绝所有用户执行 DeleteTable
操作,则该用户无法删除该表。
以下主题包括表和表存储桶策略的示例。要使用这些策略,请将用户输入占位符
替换为您自己的信息。
注意
-
每个授予修改表的权限的策略都应包括供
GetTableMetadataLocation
访问表根文件的权限。有关更多信息,请参阅GetTableMetadataLocation
。 -
每次对表执行写入或删除活动时,都要在访问策略中包含对
UpdateTableMetadataLocation
的权限。 -
我们建议使用表存储桶策略来管理对存储桶级操作的访问权限,并使用表策略来管理对表级操作的访问权限。如果您想在多个表中定义相同的权限集,那么我们建议使用表存储桶策略。
主题
示例 1:表存储桶策略支持对账户中的存储桶执行 PutBucketMaintenanceConfiguration
的访问权限
以下示例表存储桶策略通过支持访问 PutBucketMaintenanceConfiguration
,可让 IAM data steward
删除账户中所有存储桶的未引用对象。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account_id
:role/datasteward"
},
"Action": ["s3tables:PutTableBucketMaintenanceConfiguration”],
"Resource":"arn:aws:s3tables:region:account_id
:bucket/*”
}]
}
示例 2:支持对存储在 hr
命名空间中的表进行读取(SELECT)访问的表存储桶策略
以下示例表存储桶策略支持 Jane(来自 AWS 账户 ID 123456789012
的用户)访问存储在表存储桶的 hr
命名空间中的表。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Jane"
},
"Action": [
"s3tables:GetTableData",
"s3tables:GetTableMetadataLocation"
],
"Resource":{ "arn:aws:s3tables:region
:account_id
:bucket/amzn-s3-demo-bucket1
/table/*”}
"Condition": {
"StringLike": { "s3tables:namespace": "hr" }
}
]
}
示例 3:支持用户删除表的表策略
以下示例表策略支持 IAM 角色 data steward
删除表。
{
"Version": "2012-10-17",
"Id": "DeleteTable",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account_id
:role/datasteward
"
},
"Action": [
"s3tables:DeleteTable",
"s3tables:UpdateTableMetadataLocation",
"s3tables:PutTableData",
"s3tables:GetTableMetadataLocation"
],
"Resource":"arn:aws:s3tables:region
:account_id
:bucket/amzn-s3-demo-bucket1
/table/tableUUID
"
}]
}