PrivateLink を使用した Private または Shield Space 内の Apache Kafka on Heroku への接続
最終更新日 2025年02月07日(金)
Table of Contents
この記事では、AWS PrivateLink を使用して、AWS VPC と、Private Space または Shield Private Space にプロビジョニングされた Apache Kafka on Heroku アドオンの間の安全な接続を作成する方法について説明します。このプロセスは、大きく分けて 3 つの手順で構成されます。
- Private または Shield Apache Kafka on Heroku クラスターでエンドポイントサービスを作成する
- エンドポイントネットワークインターフェースを AWS VPC に作成する
- 2 つのエンドポイント間に安全な接続を確立する
接続の設定の一部として、VPC から Kafka アドオンへのアクセスを制限するための承認されたアカウントの一覧を指定できます。
この機能を使用するには、Kafka クラスターと同じリージョンにあるサブネットに作成した Amazon VPC をプロビジョニングする必要があります。詳細は、「リージョン」を参照してください。
Heroku の前提条件
PrivateLink エンドポイントを設定するには、次の Heroku リソースが必要です。
- Private Space または Shield Private Space。Heroku Dashboard か Heroku CLI のどちらかを使用して Private Space または Shield Private Space を作成します。
- Apache Kafka on Heroku アドオンがアタッチされた、Private Space または Shield Private Space で実行されている Heroku アプリ。Private Space または Shield Private Space で実行されている Apache Kafka on Heroku クラスターはすべて、それぞれ
private
またはshield
プランタイプのいずれかを使用します。クラスターの作成方法については、「Apache Kafka on Heroku」を参照してください。
Heroku エンドポイントのプロビジョニング
手順 1: PrivateLink CLI プラグインを使用して Heroku Data をインストールする
CLI プラグインをインストールするには、次のコマンドを実行します。
$ heroku plugins:install data-privatelink
手順 2: AWS アカウント ID を取得する
AWS アカウント ID は、次のように AWS CLI を使用して取得できます。
$ aws sts get-caller-identity --output text --query 'Account'
123456789101
このコマンド例では、アカウント ID 123456789101
が返されています。
アカウント ID は、AWS アカウントの Account
(アカウント) ページから取得することもできます。Account ID
は Account Settings
(アカウント設定) セクションに表示されます。
手順 3: PrivateLink エンドポイントを作成する
次の Heroku CLI コマンドを使用して PrivateLink エンドポイントを作成し、値を置き換えます。
$ heroku data:privatelink:create KAKFA_ADDON_NAME --aws-account-id ACCOUNT_ID --app APP_NAME
KAKFA_ADDON_NAME
を Kafka アドオンの名前に置き換えます (例: kafka-simply-12345
)。APP_NAME
を自分のアプリ名に置き換えます。ACCOUNT_ID
は、Kafka アドオンへのアクセスを受け取る AWS アカウントに置き換えます。次のいずれかのパターンに一致する ID を指定してください。- account-id
- account-id:user/username
- account-id:role/rolename
--aws-account-id
フラグを複数回指定して、複数のアカウントを含めることができます。
次の例は、コマンドとその出力結果です。
$ heroku data:privatelink:create kafka-simply-12345 --aws-account-id 123456789101:user/abc.xyz --app privatelink-vpc-endpoint-demo
Creating privatelink... done
Service Name: Provisioning
Status: Provisioning
The privatelink is now being provisioned for kafka-simply-12345.
Run heroku data:privatelink:wait KAFKA_URL -a APP to check the creation process.
新しい PrivateLink エンドポイントが利用可能になるまで、通常 5 ~ 10 分かかります。heroku data:privatelink:wait KAFKA_URL --app APP_NAME
で進捗状況を追跡できます。
手順 4: エンドポイントのサービス名を取得する
PrivateLink エンドポイントのプロビジョニングが終了したら、次のコマンドを使用してその詳細を確認します。
$ heroku data:privatelink KAKFA_ADDON_NAME --app APP_NAME
KAFKA_ADDON_NAME
を Kafka アドオンの名前に置き換え、APP_NAME
をアプリの名前に置き換えます。
次の例は、コマンドとその出力結果です。
$ heroku data:privatelink kafka-simply-12345 --app privatelink-vpc-endpoint-demo
=== privatelinks for kafka-simply-12345
Service Name: com.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec
Status: Operational
=== Allowed Accounts
ARN Status
arn:aws:iam::123456789101:user/abc.xyz Active
Your privatelink is now operational.
You must now copy the Service Name and follow the rest of the steps listed in https://devcenter.heroku.com/articles/heroku-kafka-via-privatelink.
コマンドの出力から Service Name
フィールドの値をコピーします。前の例では、サービス名は com.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec
です。この値は、Amazon VPC エンドポイントをプロビジョニングするために必要になります。
Amazon VPC エンドポイントのプロビジョニング
このセクションの手順は、Amazon VPC ダッシュボードから実行します。
手順 1: セキュリティグループを作成して設定する
エンドポイントには、適切な ingress セキュリティルールが設定されたセキュリティグループが必要です。セキュリティグループを作成するには:
- VPC ダッシュボードの
Security Groups
(セキュリティグループ) タブで、Create security group
(セキュリティグループの作成) をクリックします。 Basic details
(基本情報詳細) セクションで、セキュリティグループの名前と説明を指定し、目的の VPC を選択します。Inbound rules
(インバウンドルール) セクションで、Add rule
(ルールを追加) をクリックします。- 有効な IP アドレスからポート
10000–11000
への TCP アクセスを有効にします。 Create security group
(セキュリティグループの作成) をクリックします。
手順 2: エンドポイントを作成する
エンドポイントを作成するには:
- VPC ダッシュボードの
Endpoints
(エンドポイント) タブに移動し、Create Endpoint
(エンドポイントの作成) をクリックします。 Name tag
(名前タグ) フィールドにエンドポイントの名前を入力します。Type
(タイプ) セクションで、PrivateLink Ready partner services
(PrivateLink Ready パートナーサービス) カテゴリを選択します。Service settings
(サービス設定) セクションで、先ほど取得したService name
値を貼り付けます。次に、
Verify service
(サービスの確認) をクリックして、使用可能なサブネットの一覧を表示します。Network Settings
(ネットワーク設定) セクションで、セキュリティグループの作成時に指定した VPC を選択します。Subnets
(サブネット) セクションで、有効にするサブネットとサブネット ID を選択し、使用する IP アドレスの種類を選択します。Security group
(セキュリティグループ) セクションで、前の手順で作成したセキュリティグループを選択し、Create endpoint
(エンドポイントの作成) をクリックします。
エンドポイントは pending acceptance
の初期ステータスで作成され、5 ~ 10 分後に available
に遷移します。
Heroku と Amazon VPC エンドポイントの接続
Amazon VPC エンドポイントが available
になったら、VPC が Apache Kafka on Heroku クラスターと通信できるようにするために、Heroku によって作成される環境設定から URL を取得できます。
まず、PrivateLink エンドポイントのエンドポイント ID を取得し、その末尾の 17 文字の文字列を抽出します。この文字列を大文字に変換し、下記のコマンドで使用します。たとえば、エンドポイント ID が vpce-01c87ae3c05563935
である場合、このエンドポイント ID は 01C87AE3C05563935
になります。
ENDPOINT_ID_HERE
の文字列を置き換えて、コマンドを実行します。
$ heroku config --app your_app_name | grep ENDPOINT_ID_HERE
このコマンドは、AWS VPC エンドポイントの接続 URL と、Kafka クラスターの対応する接続文字列を表示します。接続文字列は次の形式です。
kafka+ssl://vpc-endpoint-dns-name:10001,kafka+ssl://vpc-endpoint-dns-name:10002,kafka+ssl://vpc-endpoint-dns-name:10003
これで、この接続文字列を使用して、AWS VPC 内のアプリケーションを Apache Kafka on Heroku アドオンに接続できるようになりました。次の例は、コマンドとその出力結果です。
$ heroku config --app privatelink-vpc-endpoint-demo | grep 01C87AE3C05563935
KAFKA_ENDPOINT_01C87AE3C05563935_URL: kafka+ssl://vpc-endpoint-dns-name:10001,kafka+ssl://vpc-endpoint-dns-name:10002,kafka+ssl://vpc-endpoint-dns-name:10003
この機能の使用に関して問題または気になる点がある場合は、サポートチケットを開いてください。
制限
- Apache Kafka on Heroku クラスターと同じリージョンにあるサブネットに作成した Amazon VPC エンドポイントをプロビジョニングする必要があります。
- ユーザー独自の VPC と Heroku Data VPC の間で共通のアベラビリティ―ゾーン内の Kafka クラスターにしか接続できません。
- Apache Kafka on Heroku クラスターへの完全に安全なアクセスを確保するため、ユーザーの責任において VPC のセキュリティを確認してください。