

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 Apache Kafka 來源執行 Redshift 串流擷取時使用 mTLS 進行身分驗證
<a name="materialized-view-streaming-ingestion-mtls"></a>

雙向 Transport Layer Security (mTLS) 為提供身分驗證的方法，讓伺服器對其傳送資訊的用戶端進行身分驗證，以及讓用戶端對伺服器進行身分驗證。使用 mTLS 的好處在於提供信任的身分驗證，供數種垂直產業應用程式中的各種使用案例使用。這些包括金融、零售、政府和醫療保健產業的使用案例。在串流擷取至 Redshift 的案例中，身分驗證會發生在伺服器 (如 Amazon MSK、Apache Kafka 或 Confluent Cloud) 與 Amazon Redshift 佈建叢集或 Amazon Redshift Serverless 工作群組之間。

本主題提供多項程序和 SQL 命令範例，示範如何建立外部結構描述，以使用 mTLS 在 Redshift 用戶端與任何 Apache Kafka 伺服器之間進行身分驗證。本主題中的步驟補充了設定從 Apache Kafka 來源進行串流擷取的完整步驟。如需詳細資訊，請參閱[開始從 Apache Kafka 來源進行串流擷取](materialized-view-streaming-ingestion-getting-started-MSK.md)。

## 使用 mTLS 進行串流擷取的先決條件
<a name="materialized-view-streaming-ingestion-mtls-prerequisites"></a>

本節提供使用 mTLS 搭配 AWS Certificate Manager 或 AWS Secrets Manager進行串流擷取的先決條件步驟。

作為初步步驟，您必須擁有或建立私有憑證授權機構 (PCA)，可用來發行憑證，以透過安全通訊管道啟用安全通訊。 AWS 私有憑證授權單位 (私有 CA) 是執行此功能的可用服務。如需詳細資訊，請參閱《AWS 私有憑證授權單位 使用者指南》**中的[建立私有 CA](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html)。建立私有 CA 之後，匯出根 CA 憑證，並將其儲存至副檔名為 .pem 的檔案。

若要建立使用 CA 憑證的叢集，請執行下列操作：

------
#### [ Amazon MSK ]

1. 建立支援 mtls 用戶端身分驗證的 Amazon MSK 叢集。如需設定 Amazon MSK 叢集的詳細資訊，請參閱《Amazon Managed Streaming for Apache Kafka 開發人員指南》**中的 [Amazon MSK 的雙向 TLS 用戶端身分驗證](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html#msk-authentication-cluster)。

1. 編輯 Amazon MSK 叢集的安全設定，使用 AWS Certificate Manager (ACM) 開啟 TLS 用戶端身分驗證，然後選取您先前建立的 AWS 私有 CA (PCA)。如需詳細資訊，請參閱《Amazon Managed Streaming for Apache Kafka 開發人員指南》**中的[更新叢集的安全設定](https://docs.aws.amazon.com/msk/latest/developerguide/msk-update-security.html)。

------
#### [ Confluent Cloud ]

1. 建立專用的 Confluent Cloud 叢集，最好與 Amazon Redshift 叢集位於相同的 AWS 區域 中。如需建立 Confluent Cloud 叢集的詳細資訊，請參閱[在 Confluent Cloud 中建立 Kafka 叢集](https://docs.confluent.io/cloud/current/get-started/index.html#step-1-create-a-ak-cluster-in-ccloud)。

1. 上傳您先前建立的匯出 AWS 私有 CA 根 CA 憑證 pem 檔案。如需詳細資訊，請參閱[管理 Confluent Cloud 的 mTLS 身分驗證的憑證認證機構](https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/mtls/certificate-authority.html)。Confluent Cloud 使用此憑證來驗證 Amazon Redshift 用戶端憑證。

------

## 使用 mTLS 搭配 進行串流擷取 AWS Certificate Manager
<a name="materialized-view-streaming-ingestion-mtls-acm"></a>

下列程序說明如何使用 AWS Certificate Manager (ACM) 儲存和管理憑證，以設定 Redshift 串流擷取使用的 mTLS：

1. 透過 ACM 請求私有憑證。當您執行此操作時，請選取您在「先決條件」一節中建立的 PCA 作為憑證認證機構。ACM 會儲存已簽署的憑證和附加的私有金鑰，以進行安全通訊。如需使用 ACM 管理憑證的詳細資訊，請參閱《AWS Certificate Manager 使用者指南》**中的[發行和管理憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs.html)。

1. 對於您用來管理 Redshift 叢集或 Amazon Redshift Serverless 工作群組的 IAM 角色，請附加許可以匯出憑證，即 **acm:ExportCertificate**。如需設定串流擷取所需 IAM 資源的詳細資訊，請參閱 [設定從 Kafka 執行串流擷取](materialized-view-streaming-ingestion-getting-started-MSK.md#materialized-view-streaming-ingestion-getting-started-MSK-setup)。在下一個步驟中指定相同的 IAM 角色，以建立外部結構描述。
**注意**  
請求在您的 VPC 中 AWS Certificate Manager 需要網際網路閘道 (IGW) 或 NAT 閘道 (NGW)。如果您的 VPC 沒有 IGW 或 NGW，請執行下列操作：  
使用 Secrets Manager 儲存您的憑證，而不要使用 ACM。
將 Secrets Manager VPC 端點附加至您的 VPC。
如需使用 Secrets Manager 搭配 mTLS 進行串流擷取的詳細資訊，請參閱後續的 [使用 mTLS 搭配 進行串流擷取 AWS Secrets Manager](#materialized-view-streaming-ingestion-mtls-secrets-manager)。

1. 取得 Amazon MSK、Apache Kafka 或 Confluent Cloud 叢集的啟動程序代理系統 URI。如需取得 Amazon MSK 的啟動程序代理系統 URI 的相關資訊，請參閱《Amazon Managed Streaming for Apache Kafka 開發人員指南》**中的[取得 Amazon MSK 叢集的啟動程序代理系統](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html)。

1.  執行如下列範例所示的 SQL 命令，以使用 `mtls` 建立將叢集對應至 Redshift 外部結構描述的外部結構描述。

------
#### [ Amazon MSK ]

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094'
   AUTHENTICATION_ARN 'arn:aws:acm:Region:444455556666:certificate/certificate_ID';
   ```

------
#### [ Apache Kafka or Confluent Cloud ]

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'lkc-2v531.domz6wj0p.us-west-1.aws.confluent.cloud:9092'
   AUTHENTICATION_ARN 'arn:aws:acm:region:444455556666:certificate/certificate_ID';
   ```

------

   重要參數：
   + IAM\$1ROLE - 與叢集相關聯的 IAM 角色，用於串流擷取。
   + URI - 叢集的啟動程序代理系統 URI。請注意，對於 Amazon MSK，指定連接埠 9094 與代理系統通訊以進行 TLS 加密。
   + AUTHENTICATION\$1ARN - ACM 憑證的 ARN。當您選擇發出憑證時，ACM 主控台中就會提供 ARN。

執行這些組態設定步驟後，您可以建立 Redshift 具體化視觀表，以參考範例中定義的結構描述，然後使用 REFRESH MATERIALIZED VIEW 來串流資料。如需詳細資訊，請參閱[開始從 Apache Kafka 來源進行串流擷取](materialized-view-streaming-ingestion-getting-started-MSK.md)。

## 使用 mTLS 搭配 進行串流擷取 AWS Secrets Manager
<a name="materialized-view-streaming-ingestion-mtls-secrets-manager"></a>

如果您不想在 AWS Certificate Manager中參考憑證，您可以使用 AWS Secrets Manager 進行憑證管理，藉此為 Redshift 串流擷取設定 mTLS。下列步驟說明如何使用 Secrets Manager 設定 mTLS。

1. 使用您選擇的工具建立憑證簽署請求和私有金鑰。然後，您可以使用簽署請求來產生已簽署憑證，以使用您用來為叢集產生憑證的相同 AWS 私有 CA (PCA)。如需發行憑證的詳細資訊，請參閱 *AWS 私有憑證授權單位 API 參考*中的 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)。

1. 使用 擷取憑證 AWS 私有憑證授權單位。如需詳細資訊，請參閱《AWS 私有憑證授權單位 使用者指南》**中的[擷取私有憑證](https://docs.aws.amazon.com/privateca/latest/userguide/PcaGetCert.html)。

1. 將上一個步驟中產生的憑證和私有金鑰儲存在 AWS Secrets Manager中。選擇 `Other type of secret` 並使用純文字格式。索引鍵/值對的格式應為 `{"certificate":"<cert value>","privateKey":"<pkey value>"}`，如下列範例所示。如需在 中建立和管理秘密的詳細資訊 AWS Secrets Manager，請參閱*AWS Secrets Manager 《 使用者指南*》中的[使用 建立和管理秘密 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)。

   ```
   {"certificate":"-----BEGIN CERTIFICATE-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi 
   H4hAX8/eE96qCcjkpfT84EdvHzp6fC+/WwM0oXlwUEWlvfMCXNaG5D8SqRq3qA==
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi 
   wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   -----END CERTIFICATE-----",
   "privateKey":"-----BEGIN PRIVATE KEY-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi
   7OD4m1dBEs3Fj++hDMH9rYRp99RqtCOf0EWOUe139KOilOsW+cyhAoc9Ci2+Jo/k
   17u2N1iGILMQEZuCRtnJOkFYkw==
   -----END PRIVATE KEY-----"}
   ```

1. 連接許可政策以將機密擷取至您用來管理 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組的 IAM 角色。此許可為 `secretsmanager:GetSecretValue`。如需詳細資訊，請參閱[設定身分驗證](materialized-view-streaming-ingestion-getting-started-MSK.md#materialized-view-streaming-ingestion-getting-started-MSK-setup-auth)。如需管理 IAM 政策的詳細資訊，請參閱[編輯 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。在下一個步驟中指定相同的 IAM 角色，以建立外部結構描述。

1. 在 Redshift 中執行 SQL 命令，以建立外部結構描述。您使用 AUTHENTICATION 類型 `mtls`。您也可以在 AWS Secrets Manager中指定叢集的 URI 和機密 ARN。

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094'
   SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
   ```

重要參數：
+ IAM\$1ROLE - 與叢集相關聯的 IAM 角色，用於串流擷取。
+ URI - 叢集的啟動程序代理系統 URI。請注意，對於 Amazon MSK，指定連接埠 9094 與代理系統通訊以進行 TLS 加密。
+ SECRET\$1ARN - Secrets Manager 中機密的 ARN，包含用於 mTLS 的憑證。

## 針對現有外部結構描述啟用 mTLS 身分驗證
<a name="materialized-view-streaming-ingestion-mtls-alter"></a>

如果您有用於串流擷取的現有外部結構描述，而且想要實作雙向 TLS 進行身分驗證，您可以執行下列命令，以指定 mTLS 身分驗證和 ACM 中的 ACM 憑證 ARN。

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:Region:444455556666:certificate/certificate_ID';
```

或者，您可以指定 mTLS 身分驗證，並參考 AWS Secrets Manager中的機密 ARN。

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

如需 ALTER EXTERNAL SCHEMA 命令的相關資訊，請參閱 [ALTER EXTERNAL SCHEMA](r_ALTER_EXTERNAL_SCHEMA.md)。