

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

# Amazon Redshift 中的基础设施安全性
<a name="security-network-isolation"></a>

作为一项托管式服务，Amazon Redshift 受 AWS 全球网络安全保护。有关 AWS 安全服务以及 AWS 如何保护基础设施的信息，请参阅 [AWS 云安全性](https://aws.amazon.com/security/)。要按照基础设施安全最佳实践设计您的 AWS 环境，请参阅《安全性支柱 AWS Well‐Architected Framework》**中的[基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 发布的 API 调用通过网络访问 Amazon Redshift。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

## 网络隔离
<a name="network-isolation"></a>

基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 是您在AWS云中的逻辑上隔离的私有网络。可以通过执行以下步骤，在 VPC 中部署 Amazon Redshift 集群或 Redshift Serverless 组：
+ 在 AWS 区域中创建 VPC。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[什么是 Amazon VPC？](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。
+ 创建两个或更多私有 VPC 子网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。
+ 部署 Amazon Redshift 集群或 Redshift Serverless 工作组。有关更多信息，请参阅 [Redshift 资源的子网](working-with-cluster-subnet-groups.md) 或 [工作组和命名空间](serverless-workgroup-namespace.md)。

预设情况下，Amazon Redshift 集群在预置时被锁定。要允许来自 Amazon Redshift 客户端的入站网络流量，请将 VPC 安全组与 Amazon Redshift 集群相关联。有关更多信息，请参阅 [Redshift 资源的子网](working-with-cluster-subnet-groups.md)。

要仅允许来往于特定 IP 地址范围的流量，请使用 VPC 更新安全组。例如，仅允许来自或流入公司网络的流量。

在配置与您的 Amazon Redshift 集群标记的子网关联的网络访问控制列表时，请确保将相应的 AWS 区域的 S3 CIDR 范围添加到入口和出口规则的允许列表中。这样做可以让您在没有任何中断的情况下执行基于 S3 的操作，如 Redshift Spectrum、COPY 和 UNLOAD。

以下示例命令解析了 us-east-1 区域内的 Amazon S3 中使用的所有 IPv4 地址的 JSON 响应。

```
curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="S3") | .ip_prefix'

54.231.0.0/17

52.92.16.0/20

52.216.0.0/15
```

有关如何获取特定区域的 S3 IP 范围的说明，请参阅 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)。

Amazon Redshift 支持将集群部署到专用租赁 VPC 中。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[专用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)。

## Amazon Redshift 安全组
<a name="working-with-security-groups"></a>

在您预置 Amazon Redshift 集群时，它默认处于锁定状态，因此任何人都无法访问。要为其他用户授予针对 Amazon Redshift 集群的入站访问权限，您可以将该集群与安全组关联起来。如果您处于 EC2-VPC 平台上，您可以使用现有的 Amazon VPC 安全组或者定义一个新的安全组，然后将其与集群关联。有关在 EC2-VPC 平台上管理集群的更多信息，请参阅[VPC 中的 Redshift 资源](managing-clusters-vpc.md)。

## 接口 VPC 端点
<a name="security-private-link"></a>

可以使用虚拟私有云（VPC）中的接口 VPC 端点（AWS PrivateLink）直接连接到 Amazon Redshift 和 Amazon Redshift Serverless API 服务，而不是通过互联网进行连接。有关 Amazon Redshift API 操作的信息，请参阅 *Amazon Redshift API 参考*中的[操作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)。有关 Redshift Serverless API 操作的信息，请参阅《Amazon Redshift Serverless API 参考》**中的 [Actions](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。有关 AWS PrivateLink 的更多信息，请参阅 *Amazon VPC 用户指南*中的[接口 VPC 终端节点 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。请注意，与集群或工作区的 JDBC/ODBC 连接不是 Amazon Redshift API 服务的一部分。

使用接口 VPC 端点时，VPC 和 Amazon Redshift 或 Redshift Serverless 之间的通信完全在 AWS 网络内进行，从而可以提供更好的安全性。每个 VPC 终端节点都由您的 VPC 子网中一个或多个使用私有 IP 地址的弹性网络接口代表。有关弹性网络接口的更多信息，请参阅*《Amazon EC2 用户指南》*中的[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。

一个接口 VPC 终端节点将您的 VPC 直接连接到 Amazon Redshift。它不使用互联网网关、网络地址转换 (NAT) 设备、虚拟专用网络 (VPN) 连接或 Direct Connect 连接。VPC 中的实例不需要公有 IP 地址便可与 Amazon Redshift API 进行通信。

要在 VPC 中使用 Amazon Redshift 或 Redshift Serverless，您有两种选择。一种是从 VPC 内的实例进行连接。另一种方法是将您的私有网络连接到您的 VPC，方法是使用 Site-to-Site VPN 选项或 Direct Connect。有关 Site-to-Site VPN 选项的更多信息，请参阅 *Amazon VPC 用户指南*中的 [VPN 连接](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。有关 Direct Connect 的信息,请参阅 *Direct Connect 用户指南*中的[创建连接](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)。

您可以创建接口 VPC 终端节点以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 命令连接到 Amazon Redshift。有关更多信息，请参阅[创建接口端点](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpce-interface.html#create-interface-endpoint)。

在创建接口 VPC 终端节点后，您可以为端点启用私有 DNS 主机名。当您启用时，默认端点如下所示：
+ **Amazon Redshift 预置**：`https://redshift.Region.amazonaws.com`
+ **Amazon Redshift Serverless**：`https://redshift-serverless.Region.amazonaws.com`

如果您不启用私有 DNS 主机名，Amazon VPC 将提供一个您可以使用的 DNS 端点名称，格式如下。
+ **Amazon Redshift 预置**：`VPC_endpoint_ID.redshift.Region.vpce.amazonaws.com`
+ **Amazon Redshift Serverless**：`VPC_endpoint_ID.redshift-serverless.Region.vpce.amazonaws.com`

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[接口 VPC 端点 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。

Amazon Redshift 和 Redshift Serverless 支持在 VPC 内调用所有 [Amazon Redshift API operations](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html) 和 [Redshift Serverless API operations](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。

您可以将 VPC 终端节点策略附加到 VPC 终端节点，以控制 AWS Identity and Access Management (IAM) 委托人的访问权限。您还可以将安全组与 VPC 终端节点关联，以便根据网络流量的源和目标控制入站和出站访问。示例为 IP 地址的范围。有关更多信息，请参阅**《Amazon VPC 用户指南》中的[使用 VPC 端点控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

### Amazon Redshift 的 VPC 端点策略
<a name="security-private-link-vpc_endpoint-policy"></a>

您可以为 Amazon Redshift 的 VPC 终端节点创建一个策略，在该策略中指定以下内容：
+ 可以或不能执行操作的委托人
+ 可执行的操作
+ 可对其执行操作的资源

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[使用 VPC 端点控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

接下来，您可以查找 VPC 终端节点策略示例。

#### Amazon Redshift 预置端点策略示例
<a name="security-private-link-examples-provisioned"></a>

接下来，可以查找适用于 Amazon Redshift 预置的 VPC 端点策略示例。

##### 示例：用于拒绝来自指定 AWS 账户的所有访问的 VPC 终端节点策略
<a name="security-private-link-example-1"></a>

以下 VPC 终端节点策略会拒绝 AWS 账户 `123456789012` 使用此端点访问资源的所有权限。

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：仅向指定的 IAM 角色授予 VPC 访问权限的 VPC 端点策略
<a name="security-private-link-example-1.1"></a>

以下 VPC 端点策略仅向 AWS 账户 *123456789012* 中的 IAM 角色 *`redshiftrole`* 授予完全访问权限。使用终端节点拒绝所有其它 IAM 委托人进行访问。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/redshiftrole"
                ]
            }
        }]
}
```

这只是一个示例。在大多数应用场景中，我们建议附加特定操作的权限，以缩小权限范围。

##### 示例：仅允许 VPC 访问指定的 IAM 委托人（用户）的 VPC 终端节点策略
<a name="security-private-link-example-2"></a>

以下 VPC 终端节点策略仅允许对 AWS 账户 *123456789012* 中的 IAM 用户 *`redshiftadmin`* 进行完全访问。使用端点拒绝所有其他 IAM 委托人进行访问。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/redshiftadmin"
                ]
            }
        }]
}
```

这只是一个示例。在大多数应用场景中，我们建议在将权限分配给用户之前为角色附加权限。此外，我们建议使用特定操作来缩小权限范围。

##### 示例：允许只读 Amazon Redshift 操作的 VPC 终端节点策略
<a name="security-private-link-example-3"></a>

以下 VPC 终端节点策略仅允许 AWS 账户 *`123456789012`* 执行指定的 Amazon Redshift 操作。

指定的操作为 Amazon Redshift 提供等效的只读访问权限。针对指定账户拒绝 VPC 上的所有其它操作。同样，所有其他帐户都被拒绝进行任何访问。有关 Amazon Redshift 操作的列表，请参阅 *IAM 用户指南*中的 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift:DescribeAccountAttributes",
                "redshift:DescribeClusterParameterGroups",
                "redshift:DescribeClusterParameters",
                "redshift:DescribeClusterSecurityGroups",
                "redshift:DescribeClusterSnapshots",
                "redshift:DescribeClusterSubnetGroups",
                "redshift:DescribeClusterVersions",
                "redshift:DescribeDefaultClusterParameters",
                "redshift:DescribeEventCategories",
                "redshift:DescribeEventSubscriptions",
                "redshift:DescribeHsmClientCertificates",
                "redshift:DescribeHsmConfigurations",
                "redshift:DescribeLoggingStatus",
                "redshift:DescribeOrderableClusterOptions",
                "redshift:DescribeQuery",
                "redshift:DescribeReservedNodeOfferings",
                "redshift:DescribeReservedNodes",
                "redshift:DescribeResize",
                "redshift:DescribeSavedQueries",
                "redshift:DescribeScheduledActions",
                "redshift:DescribeSnapshotCopyGrants",
                "redshift:DescribeSnapshotSchedules",
                "redshift:DescribeStorage",
                "redshift:DescribeTable",
                "redshift:DescribeTableRestoreStatus",
                "redshift:DescribeTags",
                "redshift:FetchResults",
                "redshift:GetReservedNodeExchangeOfferings"            
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：拒绝访问指定集群的 VPC 终端节点策略
<a name="security-private-link-example-4"></a>

以下 VPC 终端节点策略允许所有账户和委托人的完全访问权限。与此同时，它拒绝 AWS 账户 *`123456789012`* 对于在具有集群 ID `my-redshift-cluster` 的 Amazon Redshift 集群上执行的操作的任何访问。仍然允许其他不支持集群资源级权限的 Amazon Redshift 操作。有关 Amazon Redshift 操作及其相应资源类型的列表，请参阅 *IAM 用户指南*中的 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

#### Amazon Redshift Serverless 端点策略示例
<a name="security-private-link-examples-serverless"></a>

接下来，可以查找适用于 Redshift Serverless 的 VPC 端点策略示例。

##### 示例：支持只读 Redshift Serverless 操作的 VPC 端点策略
<a name="security-private-link-serverless-example-1"></a>

以下 VPC 端点策略仅支持 AWS 账户 *`123456789012`* 执行指定的 Redshift Serverless 操作。

指定的操作为 Redshift Serverless 提供等效的只读访问权限。针对指定账户拒绝 VPC 上的所有其它操作。同样，所有其他帐户都被拒绝进行任何访问。有关 Redshift Serverless 操作的列表，请参阅《IAM 用户指南》**中的 [Actions, Resources, and Condition Keys for Redshift Serverless](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift-serverless:DescribeOneTimeCredit",
                "redshift-serverless:GetCustomDomainAssociation",
                "redshift-serverless:GetEndpointAccess",
                "redshift-serverless:GetNamespace",
                "redshift-serverless:GetRecoveryPoint",
                "redshift-serverless:GetResourcePolicy",
                "redshift-serverless:GetScheduledAction",
                "redshift-serverless:GetSnapshot",
                "redshift-serverless:GetTableRestoreStatus",
                "redshift-serverless:GetUsageLimit",
                "redshift-serverless:GetWorkgroup"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：拒绝访问指定工作组的 VPC 端点策略
<a name="security-private-link-serverless-example-2"></a>

以下 VPC 终端节点策略允许所有账户和委托人的完全访问权限。同时，它拒绝 AWS 账户 *`123456789012`* 对于在工作组 ID 为 `my-redshift-workgroup` 的 Amazon Redshift 工作组上执行的操作进行任何访问。仍然可以执行其它不支持工作组资源级权限的 Amazon Redshift 操作。有关 Redshift Serverless 操作及其相应资源类型的列表，请参阅《IAM 用户指南》**中的 [Actions, Resources, and Condition Keys for Redshift Serverless](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup:my-redshift-workgroup",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```