Amazon MSK からの Redshift ストリーミング取り込みにおける mTLS による認証
相互 Transport Layer Security (mTLS) は、情報の送信先のクライアントをサーバーが認証し、クライアントがサーバーを認証する手段を提供します。mTLS を使用する利点は、業界特有のいくつかのアプリケーションのさまざまなユースケースに対して、信頼できる認証を提供することです。これには、金融、小売、政府、医療業界のユースケースが含まれます。Redshift にストリーミングを取り込む場合、認証はサーバー (この場合は Amazon MSK) と、プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループとの間で行われます。
このトピックでは、Redshift クライアントと Amazon MSK サーバー間で mTLS を使用して認証する外部スキーマを作成する方法を示す手順と SQL コマンドの例を示します。このトピックで説明する手順は、Amazon MSK からのストリーミング取り込みを設定するための一連の手順を補完します。詳細については、「Amazon Managed Streaming for Apache Kafka (Amazon MSK) からのストリーミング取り込みを開始する」を参照してください。
ストリーミング取り込みに mTLS を使用するための前提条件
このセクションでは、AWS Certificate Manager または Amazon SageMaker でのストリーミング取り込みに mTLS を使用するための前提となる手順について説明します。
事前の手順として、プライベート CA (PCA) を所有または作成する必要があります。PCA を使用すると、他の機能の中でも特に、安全な通信チャネルを介した安全な通信を可能にする証明書を発行できます。 AWS Private Certificate Authority(Private CA) は、この機能を実行する利用可能なサービスです。詳細については、「AWS Private Certificate Authority ユーザーガイド」の「Creating a private CA」を参照してください。後の手順では、証明書を発行して Amazon MSK クラスターにアタッチし、Redshift への暗号化通信を有効にします。
mtls クライアント認証をサポートする Amazon MSK クラスターを作成します。Amazon MSK クラスターの設定の詳細については、「Amazon Managed Streaming for Apache Kafka 開発者ガイド」の「To create a cluster that supports client authentication」を参照してください。
Amazon MSK クラスターのセキュリティ設定を編集し、AWS Certificate Manager (ACM) を使用して TLS クライアント認証を有効にして、以前に作成した AWS Private CA (PCA) を選択します。詳細については、「Amazon Managed Streaming for Apache Kafka 開発者ガイド」の「Updating security settings of a cluster」を参照してください。
AWS Certificate Manager でのストリーミング取り込みに mTLS を使用する
次の手順は、証明書のストレージと管理に AWS Certificate Manager (ACM) を活用して Redshift ストリーミングの取り込みに mTLS を設定する方法を示します。
ACM からプライベート証明書をリクエストします。これを実行するには、前提条件セクションで作成した PCA を認証機関として選択します。ACM は、署名付き証明書とアタッチされたプライベートキーを安全な通信のために保存します。詳細については、「AWS Certificate Manager ユーザーガイド」の「Issuing and managing certificates」を参照してください。
Redshift クラスターまたは Amazon Redshift Serverless ワークグループの管理に使用する IAM ロールには、証明書をエクスポートするアクセス許可をアタッチします。これは acm:ExportCertificate です。Amazon MSK でのストリーミング取り込みに必要な IAM リソースの設定の詳細については、「IAM アクセス許可の設定と Kafka からのストリーミング取り込みの実行」を参照してください。次の手順で同じ IAM ロールを指定して、外部スキーマを作成します。
Amazon MSK クラスター用のブートストラップブローカーを取得します。ブートストラップブローカー URI の取得の詳細については、「Amazon Managed Streaming for Apache Kafka 開発者ガイド」の「Getting the bootstrap brokers for an Amazon MSK cluster」を参照してください。
次のサンプルのような SQL コマンドを実行して、
mtls
を使用して Amazon MSK クラスターから Redshift 外部スキーマにストリームをマッピングする外部スキーマを作成します。CREATE EXTERNAL SCHEMA my_schema FROM MSK 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';
重要なパラメータ:
IAM_ROLE – クラスターに関連付けられたストリーミング取り込み用の IAM ロール。
URI – Amazon MSK クラスターのブートストラップブローカー URI。ポート 9094 は、TLS 暗号化のブローカーとの通信用に指定されていることに注意してください。
AUTHENTICATION_ARN – ACM 証明書の ARN。ARN は、発行された証明書を選択する際に ACM コンソールで利用できます。
これらの設定手順を実行したら、サンプルで定義されたスキーマを参照する Redshift マテリアライズドビューを作成し、REFRESH MATERIALIZED VIEW を使用してデータをストリーミングできます。詳細については、Amazon MSK からのストリーミングの開始 (Amazon Managed Streaming for Apache Kafka からのストリーミング取り込みを開始する) を参照してください。
AWS Secrets Manager でのストリーミング取り込みに mTLS を使用する
ACM の証明書を参照しない場合は、AWS Secrets Manager を使用して証明書管理を行うことで、Redshift ストリーミング取り込みの mTLS を設定できます。以下の手順では、その設定方法について説明します。
任意のツールを使用して、証明書署名リクエストとプライベートキーを作成します。次に、署名リクエストを使用して、Amazon MSK クラスターの証明書の生成に使用したのと同じ AWS Private CA (PCA) を使用して、署名付き証明書を生成します。証明書の発行の詳細については、「AWS Private Certificate Authority API リファレンス」の「IssueCertificate」を参照してください。
AWS Private Certificate Authority を使用して証明書を抽出します。詳細については、「AWS Private Certificate Authority ユーザーガイド」の「Retrieve a private certificate」を参照してください。
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」を参照してください。{"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-----"}
Redshift で、外部スキーマを作成する SQL コマンドを実行します。AUTHENTICATION タイプに
mtls
を使用します。また、Amazon MSK クラスターの URI と AWS Secrets Manager のシークレット ARN も指定します。CREATE EXTERNAL SCHEMA my_schema FROM MSK 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_ROLE – クラスターに関連付けられたストリーミング取り込み用の IAM ロール。
URI – Amazon MSK クラスターのブートストラップブローカー URI。ポート 9094 は、TLS 暗号化のブローカーとの通信用に指定されていることに注意してください。
SECRET_ARN – Secrets Manager からのシークレットの ARN。mTLS に使用する証明書が含まれています。
既存の外部スキーマの mTLS 認証を有効にする
ストリーミングの取り込みに使用する既存の外部スキーマがあり、認証に相互 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';