

 Amazon Redshift は、パッチ 198 以降、新しい 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/)を参照してください。

# 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 コマンドの例では、Redshift クライアントと Apache Kafka サーバー間の認証に mTLS を使用する外部スキーマの作成方法を示します。このトピックの手順は、Apache Kafka ソースからのストリーミング取り込みを設定するひと通りの手順を補うものです。詳細については、「[Apache Kafka ソースからのストリーミング取り込みの開始方法](materialized-view-streaming-ingestion-getting-started-MSK.md)」を参照してください。

## ストリーミング取り込みに mTLS を使用するための前提条件
<a name="materialized-view-streaming-ingestion-mtls-prerequisites"></a>

このセクションでは、ストリーミング取り込みで AWS Certificate Manager または AWS Secrets Manager による mTLS を使用するための前提となる手順を説明します。

事前の手順として、プライベート CA (PCA) を所有または作成する必要があります。PCA を使用すると、他の機能の中でも特に、安全な通信チャネルを介した安全な通信を可能にする証明書を発行できます。 AWS Private Certificate Authority(Private CA) は、この機能を実行する利用可能なサービスです。詳細については、「AWS Private Certificate Authority ユーザーガイド」の「[Creating a private 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 デベロッパーガイド*」の「[Mutual TLS client authentication for Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html#msk-authentication-cluster)」を参照してください。

1. Amazon MSK クラスターのセキュリティ設定を編集し、AWS Certificate Manager (ACM) を使用して TLS クライアント認証を有効にして、以前に作成した AWS Private CA (PCA) を選択します。詳細については、「Amazon Managed Streaming for Apache Kafka 開発者ガイド」の「[Updating security settings of a cluster](https://docs.aws.amazon.com/msk/latest/developerguide/msk-update-security.html)」を参照してください。**

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

1. 専用の Confluent Cloud クラスターを、できれば Amazon Redshift クラスターと同じ AWS リージョンに作成します。Confluent Cloud クラスターの作成の詳細については、「[Create a Kafka cluster in Confluent Cloud](https://docs.confluent.io/cloud/current/get-started/index.html#step-1-create-a-ak-cluster-in-ccloud)」を参照してください。

1. 先ほど作成し、エクスポートした AWS Private CA ルート CA 証明書の pem ファイルをアップロードします。詳細については、「[Manage certificate authority for mTLS authentication for Confluent Cloud](https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/mtls/certificate-authority.html)」を参照してください。Confluent Cloud は、この証明書を使用して Amazon Redshift のクライアント証明書を検証します。

------

## AWS Certificate Manager でのストリーミング取り込みに mTLS を使用する
<a name="materialized-view-streaming-ingestion-mtls-acm"></a>

次の手順では、証明書の保存と管理に AWS Certificate Manager (ACM) を使用して、Redshift ストリーミング取り込み用に mTLS を設定する方法を示します。

1. ACM からプライベート証明書をリクエストします。これを実行するには、前提条件セクションで作成した PCA を認証機関として選択します。ACM は、署名付き証明書とアタッチされたプライベートキーを安全な通信のために保存します。詳細については、「**AWS Certificate Manager ユーザーガイド」の「[Issuing and managing certificates](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 ロールを指定して、外部スキーマを作成します。
**注記**  
AWS Certificate Manager へのリクエストには、VPC にインターネットゲートウェイ (IGW) または NAT ゲートウェイ (NGW) が必要です。VPC に IGW または NGW のいずれも存在しない場合は、以下を実行します。  
ACM の代わりに Secrets Manager を使用して証明書を保存します。
Secrets Manager VPC エンドポイントを VPC にアタッチします。
ストリーミング取り込みに Secrets Manager を mTLS で使用する方法については、次の [AWS Secrets Manager でのストリーミング取り込みに mTLS を使用する](#materialized-view-streaming-ingestion-mtls-secrets-manager) を参照してください。

1. Amazon MSK、Apache Kafka、または Confluent Cloud クラスターのブートストラップブローカー URI を取得します。Amazon MSK のブートストラップブローカー URI の取得の詳細については、「*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*」の「[Getting the bootstrap brokers for an Amazon MSK cluster](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 については、TLS 暗号化のブローカーとの通信用にポート 9094 が指定されています。
   + AUTHENTICATION\$1ARN – ACM 証明書の ARN。ARN は、発行された証明書を選択する際に ACM コンソールで利用できます。

これらの設定手順を実行したら、サンプルで定義されたスキーマを参照する Redshift マテリアライズドビューを作成し、REFRESH MATERIALIZED VIEW を使用してデータをストリーミングできます。詳細については、「[Apache Kafka ソースからのストリーミング取り込みの開始方法](materialized-view-streaming-ingestion-getting-started-MSK.md)」を参照してください。

## AWS Secrets Manager でのストリーミング取り込みに mTLS を使用する
<a name="materialized-view-streaming-ingestion-mtls-secrets-manager"></a>

AWS Certificate Manager の証明書を参照しない場合は、AWS Secrets Manager を使用して証明書管理を行うことで、Redshift ストリーミング取り込みに対して mTLS を設定できます。次の手順では、Secrets Manager を使用して mTLS を設定する方法について説明します。

1. 任意のツールを使用して、証明書署名リクエストとプライベートキーを作成します。次に、署名リクエストを使用して、クラスターの証明書の生成に使用したのと同じ AWS Private CA (PCA) を使用して、署名付き証明書を生成します。証明書の発行の詳細については、「**AWS Private Certificate Authority API リファレンス」の「[IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)」を参照してください。

1. AWS Private Certificate Authority を使用して証明書を抽出します。詳細については、「*AWS Private Certificate Authority ユーザーガイド*」の「[Retrieve a private certificate](https://docs.aws.amazon.com/privateca/latest/userguide/PcaGetCert.html)」を参照してください。

1. AWS Secrets Manager の前の手順で生成した証明書とプライベートキーを保存します。`Other type of secret` を選択して、プレーンテキスト形式を使用します。key-value ペアは、次の例のように `{"certificate":"<cert value>","privateKey":"<pkey value>"}` 形式である必要があります。AWS Secrets Manager でのシークレットの作成と管理の詳細については、「AWS Secrets Manager ユーザーガイド」の「[Create and manage secrets with 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` を使用します。また、クラスターの URI と AWS Secrets Manager のシークレット 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 については、TLS 暗号化のブローカーとの通信用にポート 9094 が指定されています。
+ 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';
```

または、AWS Secrets Manager のシークレット ARN を参照して、mTLS 認証を指定できます。

```
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)」を参照してください。