Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
Amazon Redshift 的基礎設施安全
Amazon Redshift 是一項受管服務,受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及 AWS 如何保護基礎設施的相關資訊,請參閱 AWS 雲端安全
您可使用 AWS 發佈的 API 呼叫,透過網路存取 Amazon Redshift。使用者端必須支援下列專案:
-
Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
-
具備完美轉送私密(PFS)的密碼套件,例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。
網路隔離
以 Amazon VPC 服務為基礎的虛擬私有雲端 (VPC) 為您在 AWS 雲端中的私有、邏輯上隔離的網路。您可以執行下列步驟,在 VPC 內部署 Amazon Redshift 叢集或 Redshift Serverless 工作群組:
-
在 AWS 區域中建立 VPC。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的什麼是 Amazon VPC?。
-
建立兩個或多個私有 VPC 子網路。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 VPC 和子網路。
-
部署 Amazon Redshift 叢集或 Redshift Serverless 工作群組。如需詳細資訊,請參閱 Redshift 資源的子網路 或 工作群組和命名空間 。
依預設會在佈建時鎖定 Amazon Redshift 叢集。若要允許來自 Amazon Redshift 用戶端的傳入網路流量,請將 VPC 安全群組與 Amazon Redshift 叢集相關聯。如需更多詳細資訊,請參閱 Redshift 資源的子網路。
若要僅允許往返特定 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 地址範圍。
Amazon Redshift 支援將叢集部署至專用租用 VPC。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的專用預留執行個體。
Amazon Redshift 安全群組
當您佈建 Amazon Redshift 叢集時,依預設它會遭鎖定,以便沒有人可以存取它。若要授予其他使用者 Amazon Redshift 叢集的傳入存取,您可使叢集與安全群組建立關聯。如果您是在 EC2-VPC 平台上,則可以使用現有的 Amazon VPC 安全群組,或定義新的安全群組,然後使它與叢集建立關聯。如需在 EC2-VPC 平台上管理叢集的相關資訊,請參閱VPC 中的 Redshift 資源。
介面 VPC 端點
您可以在虛擬私有雲端 (VPC) 中使用介面 VPC 端點 (AWS PrivateLink) 直接連線至 Amazon Redshift 和 Amazon Redshift Serverless API 服務,而非透過網際網路進行連線。如需 Amazon Redshift API 動作的相關資訊,請參閱《Amazon Redshift API 參考》中的動作。如需 Redshift Serverless API 動作的相關資訊,請參閱《Amazon Redshift Serverless API 參考》中的動作。如需 AWS PrivateLink 的相關資訊,請參閱《Amazon VPC 使用者指南》中的界面 VPC 端點 (AWS PrivateLink)。請注意,叢集或工作群組的 JDBC/ODBC 連線不屬於 Amazon Redshift API 服務的一部分。
使用介面 VPC 端點時,VPC 和 Amazon Redshift 或 Redshift Serverless 之間的通訊會完全在 AWS 網路內進行,這可讓過程更加安全。每個 VPC 端點皆會由一個或多個具私有 IP 地址彈性網路界面來表示,而該界面位於 VPC 子網路中。如需彈性網路界面的詳細資訊,請參閱 Amazon EC2 使用者指南中的彈性網路界面。
界面 VPC 端點會將 VPC 直接連線到 Amazon Redshift。它不會使用網際網路閘道、網路位址轉譯 (NAT) 裝置、虛擬私有網路 (VPN) 連線,或 Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址,就能與 Amazon Redshift API 進行通訊。
若要透過 VPC 使用 Amazon Redshift 或 Redshift Serverless,您有兩個選項。一個是從 VPC 內部的執行個體進行連線。另一個是使用 Site-to-Site VPN 選項或 Direct Connect 將私有網路連線到 VPC。如需 Site-to-Site VPN 選項的相關資訊,請參閱《Amazon VPC 使用者指南》中的 VPN 連線。如需有關 Direct Connect 的資訊,請參閱《Direct Connect 使用者指南》中的建立連線。
您可以使用 AWS 管理主控台 或 AWS Command Line Interface (AWS CLI) 命令建立界面 VPC 端點來連線至 Amazon Redshift。如需詳細資訊,請參閱建立界面端點。
在您建立界面 VPC 端點後,您可以為該端點啟用私有 DNS 主機名稱。若您這樣做,預設端點如下所示:
-
Amazon Redshift 佈建:
https://redshift..amazonaws.com.rproxy.govskope.caRegion -
Amazon Redshift Serverless:
https://redshift-serverless..amazonaws.com.rproxy.govskope.caRegion
如果您未啟用私有 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)。
Amazon Redshift 和 Redshift Serverless 支援會在 VPC 內呼叫所有 Amazon Redshift API 操作和 Redshift Serverless API 操作。
可以將 VPC 端點政策附接至某個 VPC 端點,以控制 AWS Identity and Access Management (IAM) 主體的存取權。您也可以將安全群組與 VPC 端點建立關聯,以根據網路流量的來源和目的地來控制傳入和傳出存取。範例是 IP 地址範圍。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的使用 VPC 端點控制服務的存取。
Amazon Redshift 的 VPC 端點政策
您可以為 Amazon Redshift 的 VPC 端點建立政策,以指定下列各項:
-
可執行或不可執行動作的主體
-
可執行的動作
-
可在其中執行動作的資源
如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的使用 VPC 端點控制對服務的存取。
接下來,您可以找到 VPC 端點政策的範例。
Amazon Redshift 佈建端點政策範例
接下來,您可以找到 Amazon Redshift 佈建的 VPC 端點政策範例。
範例:可用來拒絕所有來自指定 AWS 帳戶之存取的 VPC 端點政策
下列 VPC 端點政策會拒絕 AWS 帳戶 對使用該端點之資源的所有存取。123456789012
{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": "*", "Effect": "Deny", "Resource": "*", "Principal": { "AWS": [ "123456789012" ] } } ] }
範例:可用來只向指定 IAM 角色允許 VPC 存取的 VPC 端點政策
下列 VPC 端點政策只會向 AWS 帳戶 123456789012 中的 IAM 角色 允許完整存取權。所有其他 IAM 主體均無法存取該端點。redshiftrole
{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/redshiftrole" ] } }] }
這只是範例。在大多數使用案例中,建議您附加特定動作的許可,以縮小許可範圍。
範例:可用來只向指定 IAM 主體 (使用者) 允許 VPC 存取的 VPC 端點政策
下列 VPC 端點政策只會向 AWS 帳戶 123456789012 中的 IAM 使用者 允許完整存取權。所有其他 IAM 主體均無法存取該端點。redshiftadmin
{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/redshiftadmin" ] } }] }
這只是範例。在大多數使用案例中,建議您先附加許可給某個角色,再指派給使用者。此外,也建議您使用特定動作來縮小許可範圍。
範例:可用來允許唯讀 Amazon Redshift 操作的 VPC 端點政策
下列 VPC 端點政策僅允許 AWS 帳戶 執行指定的 Amazon Redshift 動作。123456789012
指定的動作會為 Amazon Redshift 提供等效的唯讀存取權。拒絕指定的帳戶存取在該 VPC 上的所有其他動作。此外,也會拒絕所有其他帳戶的任何存取。如需 Amazon Redshift 動作的清單,請參閱《IAM 使用者指南》中的 Amazon Redshift 的動作、資源和條件金鑰。
{ "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 端點政策
下列 VPC 端點政策會允許所有帳戶和主體擁有完整存取權。同時,也會拒絕 AWS 帳戶 存取在具有叢集 ID 123456789012 的 Amazon Redshift 叢集上執行的動作。仍然允許其他不支援叢集資源層級許可的 Amazon Redshift 動作。如需 Amazon Redshift 動作及其對應資源類型的清單,請參閱《IAM 使用者指南》中的 Amazon Redshift 的動作、資源和條件金鑰。my-redshift-cluster
{ "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 端點政策範例
接下來,您可以找到 Redshift Serverless 的 VPC 端點政策範例。
範例:允許唯讀 Redshift Serverless 操作的 VPC 端點政策
下列 VPC 端點政策僅允許 AWS 帳戶 執行指定的 Redshift Serverless 動作。123456789012
指定的動作會為 Redshift Serverless 提供同等的唯讀存取權。拒絕指定的帳戶存取在該 VPC 上的所有其他動作。此外,也會拒絕所有其他帳戶的任何存取。如需 Redshift Serverless 動作的清單,請參閱《IAM 使用者指南》中的 Redshift Serverless 的動作、資源和條件索引鍵。
{ "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 端點政策
下列 VPC 端點政策會允許所有帳戶和主體擁有完整存取權。同時,此政策也會拒絕 AWS 帳戶 存取在具有工作群組 ID 123456789012 的 Amazon Redshift 工作群組上執行的動作。仍然允許其他不支援工作群組的資源層級許可的 Amazon Redshift 動作。如需 Redshift Serverless 動作及其對應資源類型的清單,請參閱《IAM 使用者指南》中的 Redshift Serverless 的動作、資源和條件索引鍵。my-redshift-workgroup
{ "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" ] } } ] }