从 Athena 访问 Amazon S3 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从 Athena 访问 Amazon S3

您可以使用基于身份的策略、存储桶资源策略、访问点策略或上述内容的任意组合授予对 Amazon S3 位置的访问权限。当参与者与 Athena 交互时,其权限会通过 Athena 传递,以确定 Athena 可以访问的内容。这意味着用户必须具有 Amazon S3 存储桶的访问权限,才能使用 Athena 进行查询。

每当您使用 IAM policy 时,请确保遵循 IAM 最佳实践。有关更多信息,请参阅《IAM 用户指南》中的 IAM 安全最佳实践

请注意,对 Amazon S3 的请求来自 Athena 的私有 IPv4 地址,而不是 aws:SourceIp 中指定的源 IP。因此,不能使用 aws:SourceIp 条件拒绝访问给定 IAM 策略中的 Amazon S3 操作。也无法根据 aws:SourceVpcaws:SourceVpce 条件键限制或允许对 Amazon S3 资源的访问。

注意

使用 IAM Identity Center 身份验证的 Athena 工作组要求将 S3 Access Grants 配置为使用可信身份传播身份。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 S3 Access Grants and directory identities

使用基于身份的策略控制对 Amazon S3 存储桶的访问

基于身份的策略附加到 IAM 用户、组或角色。这些策略可让您指定该身份可执行哪些操作(其权限)。可以使用基于身份的策略来控制对 Amazon S3 存储桶的访问。

以下基于身份的策略允许 ReadWrite 访问特定 Amazon S3 存储桶中的对象。要使用此策略,请将斜体占位符文本替换为您自己的值。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"] }, { "Sid": "AllObjectActions", "Effect": "Allow", "Action": "s3:*Object", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] } ] }

使用存储桶资源策略控制对 Amazon S3 存储桶的访问

可以使用 Amazon S3 存储桶策略来保护对存储桶中对象的访问,以便只有具有适当权限的用户才能访问这些对象。有关创建 Amazon S3 策略的指导,请参阅《Amazon S3 用户指南》中的使用 Amazon S3 控制台添加存储桶策略

以下示例权限策略限制用户读取具有 environment: production 标签键和值的对象。该示例策略使用 s3:ExistingObjectTag 条件键来指定标签键和值。

{ "Version":"2012-10-17", "Statement": [ { "Principal":{"AWS":"arn:aws:iam::111122223333:role/JohnDoe" }, "Effect":"Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals":{"s3:ExistingObjectTag/environment":"production" } ] }

有关更多存储桶策略示例,请参阅《Amazon S3 用户指南》中的 Amazon S3 存储桶策略的示例

Amazon S3 接入点、接入点别名和接入点策略

如果您在 Amazon S3 存储桶中拥有共享数据集,则维护单个存储桶策略以管理数百个使用案例的访问权限可能会非常困难。

Amazon S3 存储桶访问点有助于解决此问题。一个存储桶可以有多个访问点,每个访问点都有一个策略,能够以不同方式控制对存储桶的访问。

对于您创建的每个访问点,Amazon S3 都会生成一个代表访问点的别名。由于别名采用 Amazon S3 存储桶名称格式,因此您可以在 Athena 中 CREATE TABLE 语句的 LOCATION 子句中使用别名。然后,Athena 对存储桶的访问由别名所代表的访问点策略控制。

有关更多信息,请参阅《Amazon S3 用户指南》中的 Amazon S3 中的表位置使用访问点

使用 CalledVia 下文键

为了增加安全性,您可以使用 aws:CalledVia 全局条件上下文键。aws:CalledVia 键包含链中代表主体发出请求的每个服务的有序列表。通过为 aws:CalledVia 上下文键指定 Athena 服务主体名称 athena.amazonaws.com,您可以将请求限制为仅从 Athena 发出的请求。有关更多信息,请参阅 将 Athena 与 CalledVia 上下文键结合使用

其他 资源

有关如何授予 Amazon S3 访问权限的详细信息和示例,请参阅以下资源: