

 从补丁 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 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)。