了解 Redshift Spectrum 和访问 Amazon S3 存储桶
Amazon Redshift Spectrum 不支持预置集群的增强型 VPC 路由。Amazon Redshift 增强型 VPC 路由通过 VPC 路由特定的流量。集群与 Amazon S3 存储桶之间的所有流量都强制通过您的 Amazon VPC 传送。Redshift Spectrum 在 Amazon Redshift 拥有的 AWS 托管资源上运行。由于这些资源位于 VPC 外部,Redshift Spectrum 不使用增强型 VPC 路由。
将通过 VPC 外部的 AWS 私有网络,安全地路由 Redshift Spectrum 和 Amazon S3 之间的流量。使用 Amazon 签名版本 4 协议 (SIGv4) 签署正在传输的流量并使用 HTTPS 对该流量加密。此流量基于附加到 Amazon Redshift 集群的 IAM 角色进行授权。要进一步管理 Redshift Spectrum 流量,您可以修改集群的 IAM 角色以及附加到 Amazon S3 存储桶的策略。您可能还需要配置 VPC 以允许集群访问 AWS Glue 或 Athena,如下详述。
请注意,由于增强型 VPC 路由影响 Amazon Redshift 访问其他资源的方式,除非您正确配置了 VPC,否则查询可能会失败。有关更多信息,请参阅使用增强型 VPC 路由控制与 Redshift 的网络流量,其中更详细地讨论了如何创建 VPC 端点、NAT 网关和其他联网资源以将流量引导到 Amazon S3 存储桶。
注意
Amazon Redshift Serverless 支持增强型 VPC 路由,用于查询 Amazon S3 上的外部表。有关配置的更多信息,请参阅《Amazon Redshift Serverless 入门指南》中的从 Amazon S3 加载数据。
使用 Amazon Redshift Spectrum 时的权限策略配置
以下是使用 Redshift Spectrum 时的注意事项:
Amazon S3 存储桶访问策略和 IAM 角色
您可以使用附加到存储桶的存储桶策略以及使用附加到预置集群的 IAM 角色,来控制对 Amazon S3 存储桶中数据的访问。
预置集群上的 Redshift Spectrum 无法访问存储在下面这样的 Amazon S3 存储桶中的数据:此类存储桶使用的存储桶策略限制仅访问指定的 VPC 端点。相反,应使用限制仅访问特定委托人(例如特定AWS账户或特定用户)的存储桶策略。
对于被授予存储桶访问权限的 IAM 角色,请使用允许仅由 Amazon Redshift 服务委托人代入该角色的信任关系。该角色附加到集群时,只能在 Amazon Redshift 的上下文中使用,并且不能在集群外部共享。有关更多信息,请参阅 限制对 IAM 角色的访问。服务控制策略(SCP)也可用于进一步限制角色,请参阅《AWS Organizations 用户指南》中的阻止 IAM 用户和角色进行指定的更改,但指定的管理员角色除外。
注意
要使用 Redshift Spectrum,不能制定任何阻止使用 Amazon S3 预签名 URL 的 IAM 策略。Amazon Redshift Spectrum 生成的预签名 URL 有效期为 1 小时,这样 Amazon Redshift 就有足够的时间从 Amazon S3 存储桶中加载所有文件。Redshift Spectrum 扫描的每个文件都会生成一个唯一的预签名 URL。对于包含 s3:signatureAge
操作的存储桶策略,请确保将该值至少设置为 3,600,000 毫秒。
以下示例存储桶策略仅允许从AWS账户 123456789012
拥有的 Redshift Spectrum 发起的流量访问指定存储桶。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "BucketPolicyForSpectrum", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::123456789012:role/redshift"] }, "Action": ["s3:GetObject", "s3:List*"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"], "Condition": { "StringEquals": { "aws:UserAgent": "AWS Redshift/Spectrum" } } }] }
代入 IAM 角色的权限
附加到集群的角色应该具有信任关系,只允许 Amazon Redshift 服务代入它,如下所示。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
您可以向集群角色添加策略,以防止 COPY 和 UNLOAD 访问特定存储桶。以下策略仅允许从 Redshift Spectrum 到指定存储桶的流量。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }
有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 Redshift Spectrum 的 IAM 策略。
记录和审计 Amazon S3 访问
使用 Amazon Redshift 增强型 VPC 路由的一个好处是,在 VPC 流日志中记录所有 COPY 和 UNLOAD 流量。源自 Redshift Spectrum 且传入 Amazon S3 的流量不会通过您的 VPC,因此它不会记录在 VPC 流日志中。当 Redshift Spectrum 访问 Amazon S3 中的数据时,它会在 AWS 账户和相应角色权限的上下文中执行这些操作。您可以使用 AWS CloudTrail 和 Amazon S3 中的服务器访问日志记录来记录和审计 Amazon S3 访问。
确保将 S3 IP 范围添加到您的允许列表中。要了解有关所需 S3 IP 范围的更多信息,请参阅 Network isolation(网络隔离)。
AWS CloudTrail 日志
要跟踪 Amazon S3 中对象的所有访问,包括 Redshift Spectrum 访问,请为 Amazon S3 对象启用 CloudTrail 日志记录。
您可以使用 CloudTrail 来查看、搜索、下载、归档、分析和响应您的 AWS 基础设施中的账户活动。有关更多信息,请参阅 CloudTrail 入门。
预设情况下,CloudTrail 仅跟踪存储桶级别的操作。要跟踪对象级别的操作(例如 GetObject
),请为每个已记录的存储桶启用数据和管理事件。
Amazon S3 服务器访问日志记录
服务器访问日志记录详细地记录对存储桶提出的各种请求。访问日志信息可能在安全和访问审计方面十分有用。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的如何启用服务器访问日志记录。
有关更多信息,请参阅 AWS 安全博客文章如何使用存储桶策略并应用深度防御来帮助保护您的 Simple Storage Service(Amazon S3)数据
访问 AWS Glue 或 Amazon Athena
Redshift Spectrum 访问您在 AWS Glue 或 Athena 中的数据目录。另一种选择是为您的数据目录使用专用的 Hive 元存储。
要允许访问 AWS Glue 或 Athena,请使用互联网网关或 NAT 网关配置 VPC。配置 VPC 安全组以允许 AWS Glue 和 Athena 的公有端点的出站流量。或者,您可以为 AWS Glue 配置接口 VPC 终端节点以访问您的 AWS Glue Data Catalog。当您使用 VPC 接口端点时,您的 VPC 与 AWS Glue 之间的通信会在 AWS 网络内进行。有关更多信息,请参阅创建接口终端节点。
可以在您的 VPC 中配置以下通道:
-
互联网网关 – 要连接到 VPC 外部的 AWS 服务,您可以将互联网网关附加到您的 VPC 子网,如 Amazon VPC 用户指南中所述。要使用互联网网关,预置集群必须具有一个公有 IP 地址来允许其他服务与其通信。
-
NAT 网关 – 要连接到另一个 AWS 区域中的 Simple Storage Service(Amazon S3)存储桶或 AWS 网络中的另一种服务,可以配置网络地址转换(NAT)网关,如 Amazon VPC 用户指南中所述。使用此配置还可以访问 AWS 网络外部的主机实例。
有关更多信息,请参阅 使用增强型 VPC 路由控制与 Redshift 的网络流量。