

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用 Redshift 增强型 VPC 路由控制网络流量
<a name="enhanced-vpc-routing"></a>

在使用 Amazon Redshift 增强型 VPC 路由时，Amazon Redshift 会强制通过基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 路由集群和数据存储库之间的所有 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 和 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 流量。通过使用增强型 VPC 路由，您可以使用标准 VPC 功能，例如 [VPC 安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)、[网络访问控制列表 (ACL)](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html)、[VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)、[VPC 终端节点策略](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)、[互联网 网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)和[域名系统 (DNS)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) 服务器，如 *Amazon VPC 用户指南*中所述。您可以使用这些功能来扩展 Amazon Redshift 集群与其他资源之间的数据流。在使用增强型 VPC 路由以通过 VPC 路由流量时，您还可以使用 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)监视 COPY 和 UNLOAD 流量。

 Amazon Redshift 集群和 Amazon Redshift Serverless 工作组均支持增强型 VPC 路由。您不能将增强型 VPC 路由与 Redshift Spectrum 一起使用。有关更多信息，请参阅 [使用 Redshift Spectrum 访问 Amazon S3 存储桶](spectrum-enhanced-vpc.md)。

如果未开启增强型 VPC 路由，则 Amazon Redshift 会通过互联网路由流量，包括至 AWS 网络中的其他服务的流量。

**重要**  
由于增强型 VPC 路由影响 Amazon Redshift 访问其他资源的方式，除非您正确配置了 VPC，否则 COPY 和 UNLOAD 命令可能会失败。您必须专门在集群的 VPC 和数据资源之间创建网络路径，如下所述。

在对开启了增强型 VPC 路由的集群运行 COPY 或 UNLOAD 命令时，VPC 使用*最严格*或最具体的可用网络路径将流量路由到指定的资源。

例如，可以在您的 VPC 中配置以下路径：
+ **VPC 端点** – 对于传输到集群或工作组所在 AWS 区域中的 Amazon S3 存储桶的流量，您可以创建 VPC 端点来将流量直接传送到该存储桶。在使用 VPC 终端节点时，您可以附加端点策略来管理对 Amazon S3 的访问。有关将端点与 Redshift 结合使用的更多信息，请参阅[使用 VPC 端点控制数据库流量](enhanced-vpc-working-with-endpoints.md)。如果您使用的是 Lake Formation，则可以在 [AWS Lake Formation 和接口 VPC 端点 (AWS PrivateLink)](https://docs.aws.amazon.com/lake-formation/latest/dg/privatelink.html) 中找到有关在 VPC 和 AWS Lake Formation 之间建立私有连接的更多信息。
**注意**  
将 Redshift VPC 端点与 Amazon S3 VPC 网关端点一起使用时，您必须在 Redshift 中启用增强型 VPC 路由。有关更多信息，请参阅[用于 Amazon S3 的网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)。
+ **NAT 网关** – 您可以连接到另一个 AWS 区域中的 Amazon S3 存储桶，并且可以连接到 AWS 网络中的另一个服务。您还可以访问 AWS 网络外部的主机实例。为此，请配置[网络地址转换 (NAT) 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)，如 *Amazon VPC 用户指南*中所述。
+ **互联网网关** – 要连接到 VPC 外部的 AWS 服务，您可以将[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)附加到您的 VPC 子网，如 *Amazon VPC 用户指南*中所述。要使用互联网网关，您的集群或工作组必须可以公开访问，来允许其他服务与您的集群或工作组通信。

有关更多信息，请参阅 Amazon VPC 用户指南中的 [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。

使用增强型 VPC 路由不会产生任何额外的费用。您可能需要为某些操作支付额外的数据传输费用。其中包括在不同 AWS 区域中 UNLOAD 到 Amazon S3 之类的操作。使用公有 IP 地址从 Amazon EMR 或安全外壳 (SSH) 执行 COPY。有关定价的更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)。

**Topics**
+ [使用 VPC 端点控制数据库流量](enhanced-vpc-working-with-endpoints.md)
+ [启用增强型 VPC 路由](enhanced-vpc-enabling-cluster.md)
+ [使用 Redshift Spectrum 访问 Amazon S3 存储桶](spectrum-enhanced-vpc.md)

# 使用 VPC 端点控制数据库流量
<a name="enhanced-vpc-working-with-endpoints"></a>

您可以使用 VPC 端点，创建 VPC 中的 Amazon Redshift 集群或 Serverless 工作组与 Amazon Simple Storage Service（Amazon S3）之间的托管连接。在执行此操作时，您的数据库与 Amazon S3 数据之间的 COPY 和 UNLOAD 流量将保留在您的 Amazon VPC 中。可以将终端节点策略附加到您的终端节点，以便更严格地管理对数据的访问。例如，可以向 VPC 终端节点添加策略以仅允许将数据上载到您账户中的特定 Amazon S3 存储桶。

要使用 VPC 终端节点，请为数据仓库所在的 VPC 创建 VPC 端点，然后开启增强型 VPC 路由。可以在 VPC 中创建集群时开启增强型 VPC 路由，也可以修改 VPC 中的集群或工作组以使用增强型 VPC 路由。

VPC 端点使用路由表来控制 VPC 中的集群或工作组和 Amazon S3 之间的流量路由。与指定路由表关联的子网中的所有集群和工作组会自动使用该端点来访问服务。

您的 VPC 使用与流量匹配的最具体的或最严格的路由来决定路由流量的方式。例如，假设路由表中有一条路由用于所有指向互联网网关和 Amazon S3 端点的互联网流量 (0.0.0.0/0)。在这种情况下，对所有传送到 Amazon S3 的流量优先使用端点路由。这是因为 Amazon S3 服务的 IP 地址范围比 0.0.0.0/0 更具体。在此示例中，所有其他互联网流量（包括定位到其他 AWS 区域 区域内的 Amazon S3 存储桶的流量）将流向互联网网关。

有关创建端点的更多信息，请参阅《Amazon VPC User Guide》**中的 [Create a VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

您使用端点策略控制从集群或工作组到包含数据文件的 Amazon S3 存储桶的访问。要实现更具体的控制，您可以选择附加一个自定义终端节点策略。有关更多信息，请参阅《AWS PrivateLink 指南》**中的[使用端点策略控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

**注意**  
 AWS Database Migration Service（AWS DMS）是一项云服务，可轻松迁移关系数据库、数据仓库及其他类型的数据存储。这项服务可以连接到任何 AWS 源数据库或目标数据库，包括启用了 VPC 的 Amazon Redshift 数据库，但有一些配置限制。支持 Amazon VPC 端点可使 AWS DMS 更轻松地维护复制任务的端到端网络安全。有关将 Redshift 与 AWS DMS 结合使用的详细信息，请参阅《AWS Database Migration Service 用户指南》**中的[将 VPC 端点配置为 AWS DMS 源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_VPC_Endpoints.html)。

使用终端节点不收取任何额外费用。采用标准的数据传输和资源使用计费方式。有关定价的更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/redshift/pricing/#Data_Transfer)。

# 启用增强型 VPC 路由
<a name="enhanced-vpc-enabling-cluster"></a>

您可以在创建或修改集群以及创建或修改 Amazon Redshift Serverless 工作组时开启增强型 VPC 路由。

要使用增强型 VPC 路由，集群或 Serverless 工作组，必须满足以下要求和约束：
+ 集群必须在 VPC 中。

  如果您附加一个 Amazon S3 VPC 端点，则该 VPC 端点仅用于访问同一 AWS 区域中的 Amazon S3 存储桶。要访问其他 AWS 区域中的存储桶（不使用 VPC 端点）或访问其他 AWS 服务，请使您的集群或 Serverless 工作组可公开访问，或者使用[网络地址转换（NAT）网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。有关更多信息，请参阅 [在 VPC 中创建 Redshift 预置集群或 Amazon Redshift Serverless 工作组](getting-started-cluster-in-vpc.md)。
+ 您必须在 VPC 中启用域名服务 (DNS) 解析。或者，如果您使用自己的 DNS 服务器，请确保将针对 Amazon S3 的 DNS 请求正确解析为 AWS 维护的 IP 地址。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[在您的 VPC 中使用 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。
+ 必须在 VPC 中启用 DNS 主机名。DNS 主机名默认处于启用状态。
+ 您的 VPC 终端节点策略必须允许访问用于 Amazon Redshift 中的 COPY、UNLOAD 或 CREATE LIBRARY 调用的任何 Amazon S3 存储桶，包括访问涉及的任何清单文件。对于从远程主机执行的 COPY 操作，您的终端节点策略必须允许访问每台主机。有关更多信息，请参阅 *Amazon Redshift 数据库开发人员指南*中的 [COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 权限](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html#copy-usage_notes-iam-permissions)。

**为预置集群开启增强型 VPC 路由**

1. 登录到 AWS 管理控制台并打开 Amazon Redshift 控制台，网址：[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)。

1. 在导航菜单上，选择 **Provisioned clusters dashboard**（预置集群控制面板），然后选择 **Create cluster**（创建集群）并输入 **Cluster details**（集群详细信息）属性。

1. 要显示 **Additional configurations (其他配置)** 部分，请选择关闭 **Use defaults (使用默认值)**。

1. 导航到 **Network and security**（网络和安全）部分。

1. 要开启 **Enhanced VPC routing**（增强型 VPC 路由），请选择 **Turn on**（开启）以强制集群流量通过 VPC。

1. 选择**创建集群**以创建集群。集群可能需要几分钟才可以使用。

**为 Amazon Redshift Serverless 开启增强型 VPC 路由**

1. 登录到 AWS 管理控制台并打开 Amazon Redshift 控制台，网址：[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)。

1. 在导航菜单上，选择 **Serverless dashboard**（Serverless 控制面板），然后选择 **Create workgroup**（创建工作组）并输入工作组的属性。

1. 导航到 **Network and security**（网络和安全）部分。

1. 选择 **Turn on enhanced VPC routing**（开启增强型 VPC 路由），通过 VPC 路由网络流量。

1. 选择 **Next**（下一步），输入工作组属性，直到 **Create**（创建）工作组。

# 使用 Redshift Spectrum 访问 Amazon S3 存储桶
<a name="spectrum-enhanced-vpc"></a>

通常，Amazon Redshift Spectrum 对于预置集群不支持增强型 VPC 路由，即使在启用增强型 VPC 路由后，预置集群也可以从 Amazon S3 查询外部表。

Amazon Redshift 增强型 VPC 路由通过您的 VPC 发送特定的流量，这意味着将强制集群与 Amazon S3 存储桶之间的所有流量均通过您的 Amazon VPC 进行传递。由于 Redshift Spectrum 在 Amazon Redshift 拥有但位于 VPC 之外的 AWS 托管式资源上运行，因此 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，否则查询可能会失败。有关更多信息，请参阅[使用 Redshift 增强型 VPC 路由控制网络流量](enhanced-vpc-routing.md)，其中更详细地讨论了如何创建 VPC 端点、NAT 网关和其他联网资源以将流量引导到 Amazon S3 存储桶。

**注意**  
Amazon Redshift Serverless 支持增强型 VPC 路由，用于查询 Amazon S3 上的外部表。有关配置的更多信息，请参阅《Amazon Redshift Serverless 入门指南》中的[从 Amazon S3 加载数据](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html#serverless-load-data-from-s3)。

## 使用 Amazon Redshift Spectrum 时的权限策略配置
<a name="spectrum-enhanced-vpc-considerations"></a>

使用 Redshift Spectrum 时，请考虑以下事项：
+ [Amazon S3 存储桶访问策略和 IAM 角色](#spectrum-enhanced-vpc-considerations-policies)
+ [代入 IAM 角色的权限](#spectrum-enhanced-vpc-considerations-cluster-role)
+ [记录和审计 Amazon S3 访问](#spectrum-enhanced-vpc-considerations-logging-s3)
+ [访问 AWS Glue 或 Amazon Athena](#spectrum-enhanced-vpc-considerations-glue-access)

### Amazon S3 存储桶访问策略和 IAM 角色
<a name="spectrum-enhanced-vpc-considerations-policies"></a>

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

预置集群上的 Redshift Spectrum 无法访问存储在下面这样的 Amazon S3 存储桶中的数据：此类存储桶使用的存储桶策略限制仅访问指定的 VPC 端点。相反，应使用限制仅访问特定委托人（例如特定AWS账户或特定用户）的存储桶策略。

对于被授予存储桶访问权限的 IAM 角色，请使用允许仅由 Amazon Redshift 服务委托人代入该角色的信任关系。该角色附加到集群时，只能在 Amazon Redshift 的上下文中使用，并且不能在集群外部共享。有关更多信息，请参阅 [限制对 IAM 角色的访问](authorizing-redshift-service-database-users.md)。服务控制策略（SCP）也可用于进一步限制角色，请参阅《AWS Organizations 用户指南》**中的[阻止 IAM 用户和角色进行指定的更改，但指定的管理员角色除外](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples_general.html#example-scp-restricts-with-exception)。

**注意**  
要使用 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` 拥有的指定存储桶。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BucketPolicyForSpectrum",
            "Effect": "Allow",
            "Principal": {
                "AWS": ["arn:aws:iam::123456789012:role/redshift"]
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucketVersions",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

### 代入 IAM 角色的权限
<a name="spectrum-enhanced-vpc-considerations-cluster-role"></a>

附加到集群的角色应该具有信任关系，只允许 Amazon Redshift 服务代入它，如下所示。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [Redshift Spectrum 的 IAM 策略](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-iam-policies.html)。

### 记录和审计 Amazon S3 访问
<a name="spectrum-enhanced-vpc-considerations-logging-s3"></a>

使用 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](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)（网络隔离）。

**AWS CloudTrail 日志** 

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

您可以使用 CloudTrail 来查看、搜索、下载、归档、分析和响应您的 AWS 基础设施中的账户活动。有关更多信息，请参阅 [CloudTrail 入门](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-getting-started.html)。

预设情况下，CloudTrail 仅跟踪存储桶级别的操作。要跟踪对象级别的操作（例如 `GetObject`），请为每个已记录的存储桶启用数据和管理事件。

**Amazon S3 服务器访问日志记录** 

服务器访问日志记录详细地记录对存储桶提出的各种请求。访问日志信息可能在安全和访问审计方面十分有用。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[如何启用服务器访问日志记录](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html#server-access-logging-overview)。

有关更多信息，请参阅 AWS 安全博客文章[如何使用存储桶策略并应用深度防御来帮助保护您的 Simple Storage Service（Amazon S3）数据](https://aws.amazon.com/blogs/security/how-to-use-bucket-policies-and-apply-defense-in-depth-to-help-secure-your-amazon-s3-data/)。

### 访问 AWS Glue 或 Amazon Athena
<a name="spectrum-enhanced-vpc-considerations-glue-access"></a>

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 网络内进行。有关更多信息，请参阅[创建接口终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

可以在您的 VPC 中配置以下通道：
+ **互联网网关** – 要连接到 VPC 外部的 AWS 服务，您可以将[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)附加到您的 VPC 子网，如 *Amazon VPC 用户指南*中所述。要使用互联网网关，预置集群必须具有一个公有 IP 地址来允许其他服务与其通信。
+ **NAT 网关** – 要连接到另一个 AWS 区域中的 Simple Storage Service（Amazon S3）存储桶或 AWS 网络中的另一种服务，可以配置[网络地址转换（NAT）网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)，如 *Amazon VPC 用户指南*中所述。使用此配置还可以访问 AWS 网络外部的主机实例。

有关更多信息，请参阅 [使用 Redshift 增强型 VPC 路由控制网络流量](enhanced-vpc-routing.md)。