メインコンテンツまでスキップ
メインコンテンツまでスキップ

AWS PrivateLink

Scale plan feature

AWS PrivateLink is available in the Scale and Enterprise plans. To upgrade, visit the Plans page in the cloud console.

AWS PrivateLinkを使用して、VPC、AWSサービス、オンプレミスシステム、及びClickHouse Cloud間で安全な接続を確立し、トラフィックを公衆インターネットにさらすことなく行うことができます。このドキュメントでは、AWS PrivateLinkを使用してClickHouse Cloudに接続する手順を概説します。

ClickHouse CloudのサービスへのアクセスをAWS PrivateLinkアドレスを介してのみ制限するには、ClickHouse CloudのIPアクセスリストの指示に従ってください。

注記

ClickHouse Cloudは、以下のリージョンからのクロスリージョンPrivateLinkをサポートしています:

  • sa-east-1
  • il-central-1
  • me-central-1
  • me-south-1
  • eu-central-2
  • eu-north-1
  • eu-south-2
  • eu-west-3
  • eu-south-1
  • eu-west-2
  • eu-west-1
  • eu-central-1
  • ca-west-1
  • ca-central-1
  • ap-northeast-1
  • ap-southeast-2
  • ap-southeast-1
  • ap-northeast-2
  • ap-northeast-3
  • ap-south-1
  • ap-southeast-4
  • ap-southeast-3
  • ap-south-2
  • ap-east-1
  • af-south-1
  • us-west-2
  • us-west-1
  • us-east-2
  • us-east-1 料金に関する考慮事項:AWSは、地域間データ転送にユーザーに料金を請求します。料金についてはこちらをご覧ください。

AWS PrivateLinkを有効にするには、以下を完了してください

  1. エンドポイント "サービス名" を取得します。
  2. AWSエンドポイントを作成します。
  3. "エンドポイントID" をClickHouse Cloud組織に追加します。
  4. "エンドポイントID" をClickHouseサービスの許可リストに追加します。

Terraformの例はこちらにあります。

重要な考慮事項

ClickHouseは、AWSリージョン内で同じ公開済みサービスエンドポイントを再利用するために、サービスをグループ化しようとします。しかし、このグループ化は保証されておらず、特に複数のClickHouse組織にサービスを分散させている場合は注意が必要です。 すでにClickHouse組織内の他のサービスのためにPrivateLinkが設定されている場合、このグループ化により、ほとんどのステップをスキップして直接最終ステップに進むことができます:ClickHouseの "エンドポイントID" をClickHouseサービスの許可リストに追加します。

このプロセスの前提条件

開始する前に、以下が必要です:

  1. あなたのAWSアカウント。
  2. ClickHouse APIキーで、ClickHouse側でプライベートエンドポイントを作成および管理するための権限を持っていること。

手順

AWS PrivateLinkを介してClickHouse Cloudサービスに接続するための手順を示します。

エンドポイント "サービス名" を取得する

オプション 1: ClickHouse Cloudコンソール

ClickHouse Cloudコンソールで、PrivateLink経由で接続したいサービスを開き、設定メニューに移動します。

Private Endpoints

サービス名DNS名 をメモして、次のステップに進んでください。

オプション 2: API

コマンドを実行する前に、以下の環境変数を設定します:

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

地域、プロバイダー、およびサービス名でフィルタリングしてClickHouseのINSTANCE_IDを取得します:

INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)

PrivateLinkの設定のためのendpointServiceIdprivateDnsHostnameを取得します:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .result

このコマンドを実行すると、以下のような結果が返されるはずです:

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

endpointServiceIdprivateDnsHostname をメモして、次のステップに進んでください。

AWSエンドポイントを作成する

参考

このセクションでは、AWS PrivateLink経由でClickHouseを設定するためのClickHouse固有の詳細を扱います。AWS固有の手順は、どこを見ればよいかを示すための参考として提供されますが、AWSクラウドプロバイダーからの通知なしに変更される可能性があります。特定の使用例に基づいてAWS設定を考慮してください。

ClickHouseは、必要なAWS VPCエンドポイント、セキュリティグループルール、またはDNSレコードの設定について責任を負いません。

以前にPrivateLinkを設定する際に「プライベートDNS名」を有効にし、新しいサービスをPrivateLink経由で設定する際に問題が発生した場合は、ClickHouseサポートにお問い合わせください。他のAWS設定タスクに関連する問題については、直接AWSサポートにお問い合わせください。

オプション 1: AWSコンソール

AWSコンソールを開き、VPCエンドポイントエンドポイントを作成 に進みます。

NLBとGWLBを使用するエンドポイントサービスを選択し、エンドポイント "サービス名" ステップから取得したサービス名consoleまたはendpointServiceIdAPIサービス名フィールドに入力します。サービスを確認をクリックします:

AWS PrivateLink Endpoint Settings

PrivateLinkを使用してクロスリージョナル接続を確立する場合は、「クロスリージョンエンドポイント」チェックボックスを有効にし、サービスリージョンを指定します。サービスリージョンは、ClickHouseインスタンスが稼働している場所です。

「サービス名を確認できませんでした。」というエラーが表示された場合は、新しいリージョンをサポートされているリージョンリストに追加するように顧客サポートにお問い合わせください。

次に、自分のVPCとサブネットを選択します:

Select VPC and subnets

オプションのステップとして、セキュリティグループ/タグを割り当てます:

注記

セキュリティグループでポート443844394403306が許可されていることを確認してください。

VPCエンドポイントを作成したら、エンドポイントIDの値をメモします。これは今後のステップで必要になります。

VPC Endpoint ID

オプション 2: AWS CloudFormation

次に、エンドポイント "サービス名" ステップで取得したサービス名consoleまたはendpointServiceIdAPIを使用してVPCエンドポイントを作成する必要があります。 正しいサブネットID、セキュリティグループ、およびVPC IDを使用してください。

Resources:
  ClickHouseInterfaceEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcEndpointType: Interface
      PrivateDnsEnabled: false
      ServiceName: <Service name(endpointServiceId), pls see above>
      VpcId: vpc-vpc_id
      SubnetIds:
        - subnet-subnet_id1
        - subnet-subnet_id2
        - subnet-subnet_id3
      SecurityGroupIds:
        - sg-security_group_id1
        - sg-security_group_id2
        - sg-security_group_id3

VPCエンドポイントを作成したら、エンドポイントIDの値をメモします。これは今後のステップで必要になります。

オプション 3: Terraform

以下のservice_nameは、エンドポイント "サービス名" ステップで取得したサービス名consoleまたはendpointServiceIdAPIです。

resource "aws_vpc_endpoint" "this" {
  vpc_id            = var.vpc_id
  service_name      = "<pls see comment above>"
  vpc_endpoint_type = "Interface"
  security_group_ids = [
    Var.security_group_id1,var.security_group_id2, var.security_group_id3,
  ]
  subnet_ids          = [var.subnet_id1,var.subnet_id2,var.subnet_id3]
  private_dns_enabled = false
  service_region      = "(Optional) If specified, the VPC endpoint will connect to the service in the provided region. Define it for multi-regional PrivateLink connections."
}

VPCエンドポイントを作成したら、エンドポイントIDの値をメモします。これは今後のステップで必要になります。

エンドポイントのプライベートDNS名を設定する

注記

DNSを構成する方法はさまざまです。特定の使用例に応じてDNSを設定してください。

エンドポイント "サービス名" ステップから取得した "DNS名" をAWSエンドポイントネットワークインターフェースにポイントする必要があります。これにより、VPC/ネットワーク内のサービス/コンポーネントがそれを正しく解決できるようになります。

"エンドポイントID" をClickHouseサービスの許可リストに追加する

オプション 1: ClickHouse Cloudコンソール

追加するには、ClickHouse Cloudコンソールに移動し、PrivateLinkを介して接続したいサービスを開いてから、設定に移動します。プライベートエンドポイントを設定をクリックしてプライベートエンドポイントの設定を開きます。 Create AWS Endpoint ステップから取得したエンドポイントIDを入力します。エンドポイントを作成をクリックします。

注記

既存のPrivateLink接続からのアクセスを許可したい場合は、既存のエンドポイントドロップダウンメニューを使用してください。

Private Endpoints Filter

削除するには、ClickHouse Cloudコンソールに移動し、サービスを見つけ、サービスの設定に進み、削除したいエンドポイントを見つけます。リストから削除します。

オプション 2: API

PrivateLinkを使用して利用可能である必要がある各インスタンスの許可リストにエンドポイントIDを追加する必要があります。

Create AWS Endpoint ステップからのデータを使用してENDPOINT_ID環境変数を設定します。

コマンドを実行する前に、以下の環境変数を設定します:

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

許可リストにエンドポイントIDを追加するには:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "add": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X PATCH -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" \
-d @pl_config.json | jq

許可リストからエンドポイントIDを削除するには:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "remove": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X PATCH -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" \
-d @pl_config.json | jq

Private Linkが有効な各サービスには、パブリックエンドポイントとプライベートエンドポイントがあります。Private Linkを使用して接続するには、Obtain Endpoint "Service name" から取得したprivateDnsHostnameAPIまたはDNS名consoleを使用する必要があります。

プライベートDNSホスト名を取得する

オプション 1: ClickHouse Cloudコンソール

ClickHouse Cloudコンソールで、設定に移動します。プライベートエンドポイントを設定ボタンをクリックします。開いたフライアウトで、DNS名をコピーします。

Private Endpoint DNS Name
オプション 2: API

コマンドを実行する前に、以下の環境変数を設定します:

KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
INSTANCE_ID=<Your ClickHouse service name>

ステップからINSTANCE_IDを取得できます。

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .result

このコマンドを実行すると、以下のような出力が得られます:

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

この例では、privateDnsHostnameホスト名の値を介しての接続はPrivateLinkにルーティングされますが、endpointServiceIdホスト名を介した接続はインターネットを経由します。

トラブルシューティング

ほとんどの場合、各VPCに対して単一のエンドポイントサービスを作成するだけで済みます。このエンドポイントは、VPCから複数のClickHouse Cloudサービスへのリクエストをルーティングできます。 詳細についてはこちらを参照してください。

プライベートエンドポイントへの接続がタイムアウトした

  • VPCエンドポイントにセキュリティグループを割り当ててください。
  • エンドポイントに添付されているセキュリティグループのinboundルールを確認し、ClickHouseのポートを許可してください。
  • 接続テストに使用されるVMに添付されているセキュリティグループのoutboundルールを確認し、ClickHouseのポートへの接続を許可してください。

プライベートホスト名:ホストのアドレスが見つかりませんでした

  • DNS構成を確認してください。

ピアによって接続がリセットされた

  • おそらく、エンドポイントIDがサービスの許可リストに追加されていないためです。 ステップを確認してください。

エンドポイントフィルターの確認

コマンドを実行する前に、以下の環境変数を設定します:

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>

ステップからINSTANCE_IDを取得できます。

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X GET -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | \
jq .result.privateEndpointIds

リモートデータベースに接続する

たとえば、MySQLPostgreSQLのテーブル機能をClickHouse Cloudで使用し、Amazon Web Services (AWS) VPCにホストされたデータベースに接続しようとしている場合、AWS PrivateLinkはこの接続を安全に有効にするために使用できません。PrivateLinkは一方向の接続です。あなたの内部ネットワークまたはAmazon VPCがClickHouse Cloudに安全に接続することはできますが、ClickHouse Cloudがあなたの内部ネットワークに接続することはできません。

AWS PrivateLinkのドキュメントによれば:

AWS PrivateLinkを使用するのは、クライアント/サーバーセットアップがあり、消費者VPCがサービスプロバイダーVPC内の特定のサービスまたはインスタンスのセットに一方向のアクセスを許可したい場合です。消費者VPC内のクライアントのみがサービスプロバイダVPC内のサービスへの接続を開始できます。

これを行うには、AWSセキュリティグループを設定して、ClickHouse Cloudがあなたの内部/プライベートデータベースサービスに接続できるようにします。ClickHouse Cloudリージョンのデフォルトの送信IPアドレスや、利用可能な静的IPアドレスを確認してください。