Amazon Redshift
集群管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Amazon Redshift Spectrum 与增强型 VPC 路由结合使用

Amazon Redshift 增强型 VPC 路由通过您的 VPC 路由特定流量。集群与 Amazon S3 存储桶之间的所有流量都强制通过您的 Amazon VPC 传送。Redshift Spectrum 在 Amazon Redshift 拥有的 AWS 托管资源上运行。由于这些资源不在您的 VPC 中,因此 Redshift Spectrum 不使用增强型 VPC 路由。

当您的集群配置为使用增强型 VPC 路由时,Redshift Spectrum 和 Amazon S3 之间的流量将通过 VPC 外部的 AWS 私有网络进行安全路由。使用 Amazon 签名版本 4 协议 (SIGv4) 签署正在传输的流量并使用 HTTPS 对该流量加密。此流量基于附加到 Amazon Redshift 集群的 IAM 角色进行授权。要进一步管理 Redshift Spectrum 流量,您可以修改集群的 IAM 角色以及附加到 Amazon S3 存储桶的策略。您可能还需要配置 VPC 以允许集群访问 AWS Glue 或 Athena,如下详述。

为 Redshift Spectrum 使用增强型 VPC 路由的注意事项

下面是使用 Redshift Spectrum 增强型 VPC 路由时的注意事项:

存储桶访问策略

您可以使用附加到存储桶的存储桶策略以及使用连接到集群的 IAM 角色来控制对 Amazon S3 存储桶中数据的访问。

Redshift Spectrum 无法访问存储在下面这样的 Amazon S3 存储桶中的数据:此类存储桶使用的存储桶策略限制仅访问指定的 VPC 终端节点。相反,应使用限制仅访问特定委托人(例如特定 AWS 账户或特定用户)的存储桶策略。

对于被授予存储桶访问权限的 IAM 角色,请使用允许仅由 Amazon Redshift 服务委托人代入该角色的信任关系。该角色附加到集群时,只能在 Amazon Redshift 的上下文中使用,并且不能在集群外部共享。有关更多信息,请参阅 限制对 IAM 角色的访问

以下示例存储桶策略仅允许从 AWS 账户 123456789012 拥有的 Redshift Spectrum 发起的流量访问指定存储桶。

{ "Version":"2012-10-17", "Statement":[ { "Sid”:”BucketPolicyForSpectrum", "Effect":"Allow", "Principal": {"AWS": ["arn:aws:iam::123456789012:root"]}, "Action":[“s3:GetObject",”s3:List*"], "Resource":["arn:aws:s3:::examplebucket/*"], "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:::myBucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的适用于 Amazon Redshift Spectrum 的 IAM 策略

记录和审计 Amazon S3 访问

使用 Amazon Redshift 增强型 VPC 路由的一个好处是,所有 COPY 和 UNLOAD 流量都记录在 VPC 流日志中。源自 Redshift Spectrum 且传入 Amazon S3 的流量不会通过您的 VPC,因此它不会记录在 VPC 流日志中。当 Redshift Spectrum 访问 Amazon S3 中的数据时,它会在 AWS 账户和相应角色权限的上下文中执行这些操作。您可以使用 AWS CloudTrail 和 Amazon S3 中的服务器访问日志记录来记录和审计 Amazon S3 访问权限。

AWS CloudTrail 日志

要跟踪 Amazon S3 中对象的所有访问,包括 Redshift Spectrum 访问,请为 Amazon S3 对象启用 CloudTrail 日志记录。

您可以使用 CloudTrail 来查看、搜索、下载、归档、分析和响应您的 AWS 基础设施中的账户活动。有关更多信息,请参阅 CloudTrail 入门

默认情况下,CloudTrail 仅跟踪存储桶级别的操作。要跟踪对象级别的操作(例如 GetObject),请为每个已记录的存储桶启用数据和管理事件。

Amazon S3 服务器访问日志记录

服务器访问日志记录详细地记录对存储桶提出的各种请求。访问日志信息可能在安全和访问审核方面十分有用。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的如何启用服务器访问日志记录

有关更多信息,请参阅 AWS 安全博客文章如何使用存储桶策略并应用深度防御来帮助保护您的 Amazon S3 数据

访问 AWS Glue 或 Amazon Athena

Redshift Spectrum 会访问您在 AWS Glue 或 Athena 中的数据目录。另一种选择是为您的数据目录使用专用的 Hive Metastore。

要允许访问 AWS Glue 或 Athena,请使用 Internet 网关或 NAT 网关配置 VPC。配置 VPC 安全组以允许 AWS Glue 和 Athena 的公有终端节点的出站流量。或者,您可以为 AWS Glue 配置接口 VPC 终端节点以访问您的 AWS Glue 数据目录。当您使用 VPC 接口终端节点时,您的 VPC 与 AWS Glue 之间的通信会在 AWS 网络内进行。有关更多信息,请参阅创建接口终端节点

可以在您的 VPC 中配置以下通道:

  • Internet 网关 – 要连接到 VPC 外部的 AWS 服务,您可以将 Internet 网关附加到您的 VPC 子网,如 Amazon VPC 用户指南 中所述。 要使用 Internet 网关,您的集群必须具有一个公有 IP 地址来允许其他服务与您的集群进行通信。

  • NAT 网关 – 要连接到另一个 AWS 区域中的 Amazon S3 存储桶或 AWS 网络中的另一种服务,可以配置网络地址转换 (NAT) 网关,如 Amazon VPC 用户指南 中所述。 使用此配置还可以访问 AWS 网络外部的主机实例。

有关更多信息,请参阅Amazon Redshift 增强型 VPC 路由