メインコンテンツへスキップ
メインコンテンツへスキップ

Azure Private Link

Scale plan feature

Azure Private Link is available in the Scale and Enterprise plans. To upgrade, visit the plans page in the cloud console.

このガイドでは、Azure Private Link を使用して、Azure(お客様所有のサービスおよび Microsoft パートナーのサービスを含む)と ClickHouse Cloud 間で、仮想ネットワーク経由のプライベート接続を提供する方法を説明します。Azure Private Link はネットワークアーキテクチャを簡素化し、データをパブリックインターネットに公開することなく、Azure 内のエンドポイント間の接続を保護します。

Private Link の概要

Azure は Private Link 経由でリージョンをまたいだ接続をサポートしています。これにより、ClickHouse サービスをデプロイしている異なるリージョンにある VNet 間で接続を確立できます。

注記

リージョン間トラフィックには追加料金が発生する場合があります。最新の Azure ドキュメントを確認してください。

Azure Private Link を有効にするには、次の手順を完了してください。

  1. Private Link 用の Azure 接続エイリアスを取得する
  2. Azure でプライベート エンドポイントを作成する
  3. プライベート エンドポイントのリソース ID を ClickHouse Cloud の組織に追加する
  4. プライベート エンドポイントのリソース ID をサービスの許可リストに追加する
  5. Private Link を使用して ClickHouse Cloud サービスにアクセスする
注記

ClickHouse Cloud の Azure PrivateLink は、resourceGUID から Resource ID フィルタの利用へ切り替わりました。後方互換性があるため、引き続き resourceGUID を使用できますが、Resource ID フィルタへの移行を推奨します。移行するには、Resource ID を使って新しいエンドポイントを作成し、それをサービスに関連付けてから、従来の resourceGUID ベースのエンドポイントを削除してください。

注意事項

ClickHouse は、同じ Azure リージョン内で公開済みの Private Link service を再利用できるように、サービスをグループ化しようと試みます。ただし、このグループ化は保証されておらず、特にサービスを複数の ClickHouse 組織に分散している場合には、当てはまらないことがあります。 すでに同じ ClickHouse 組織内の他のサービス向けに Private Link を構成済みの場合は、そのグループ化により多くの手順を省略できることがあり、最終手順である Private Endpoint Resource ID をサービスの許可リストに追加する に直接進める場合があります。

Terraform のサンプルは ClickHouse の Terraform Provider リポジトリ を参照してください。

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

ClickHouse Cloud コンソールで、Private Link 経由で接続したいサービスを開き、Settings メニューを開きます。Set up private endpoint ボタンをクリックします。Private Link のセットアップに使用する Service nameDNS name を控えておきます。

プライベート エンドポイント

Service nameDNS name を控えておきます。これらは次の手順で使用します。

オプション 2: API

作業を開始する前に、ClickHouse Cloud の API キーが必要です。新しいキーを作成するか、既存のキーを使用します。

API キーを取得したら、コマンドを実行する前に次の環境変数を設定します。

REGION=<リージョンコード、Azure形式を使用、例: westus3>
PROVIDER=azure
KEY_ID=<キーID>
KEY_SECRET=<キーシークレット>
ORG_ID=<ClickHouse組織IDを設定>
SERVICE_NAME=<ClickHouseサービス名>

リージョン、プロバイダー、サービス名でフィルタリングして、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)

Private Link 用の Azure 接続エイリアスとプライベート DNS ホスト名を取得します。

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  "endpointServiceId": "production-westus3-0-0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.westus3.azure.privatelinkservice",
  "privateDnsHostname": "xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud"
}

endpointServiceId をメモしておいてください。次の手順で使用します。

Azure でプライベート エンドポイントを作成する

参考文献

このセクションでは、Azure Private Link を介して ClickHouse を構成する際の、ClickHouse 固有の詳細について説明します。ここに記載している Azure 固有の手順は、どこを参照すべきかを示すための参考情報であり、Azure クラウド プロバイダーからの通知なしに将来的に変更される可能性があります。Azure の構成は、お客様固有のユースケースに基づいて検討してください。

なお、ClickHouse は、必要な Azure プライベート エンドポイントおよび DNS レコードの構成については責任を負いません。

Azure の構成作業に関連する問題については、Azure Support に直接お問い合わせください。

このセクションでは、Azure で Private Endpoint を作成します。Azure Portal または Terraform のいずれかを使用できます。

オプション 1: Azure Portal を使用して Azure にプライベート エンドポイントを作成する

Azure Portal で Private Link Center → Private Endpoints を開きます。

Azure Private Center を開く

Create ボタンをクリックして、Private Endpoint 作成ダイアログを開きます。

Azure Private Center を開く

次の画面で、以下のオプションを指定します。

  • Subscription / Resource Group: Private Endpoint 用の Azure サブスクリプションとリソース グループを選択します。
  • Name: Private Endpoint の名前を設定します。
  • Region: Private Link を介して ClickHouse Cloud に接続される VNet がデプロイされているリージョンを選択します。

上記の手順を完了したら、Next: Resource ボタンをクリックします。

Private Endpoint の基本設定を作成

Connect to an Azure resource by resource ID or alias オプションを選択します。

Resource ID or alias には、Obtain Azure connection alias for Private Link の手順で取得した endpointServiceId を使用します。

Next: Virtual Network ボタンをクリックします。

Private Endpoint のリソース選択

  • Virtual network: Private Link を使用して ClickHouse Cloud に接続する VNet を選択します。
  • Subnet: Private Endpoint を作成するサブネットを選択します。

任意:

  • Application security group: Private Endpoint に ASG を関連付け、Network Security Group で Private Endpoint との送受信トラフィックをフィルタリングするために使用できます。

Next: DNS ボタンをクリックします。

Private Endpoint の仮想ネットワーク選択

Next: Tags ボタンをクリックします。


Private Endpoint の DNS 構成

必要に応じて、Private Endpoint にタグを付与できます。

Next: Review + create ボタンをクリックします。


Private Endpoint のタグ

最後に、Create ボタンをクリックします。

Private Endpoint の確認

作成された Private Endpoint の Connection statusPending 状態になります。この Private Endpoint をサービスの許可リストに追加すると、Approved 状態に変わります。

Private Endpoint に関連付けられているネットワーク インターフェイスを開き、Private IPv4 address(この例では 10.0.0.4)をコピーします。この情報は次の手順で必要になります。

Private Endpoint の IP アドレス

オプション 2: Terraform を使用して Azure にプライベート エンドポイントを作成する

以下のテンプレートを使用して、Terraform で Private Endpoint を作成します。

resource "azurerm_private_endpoint" "example_clickhouse_cloud" {
  name                = var.pe_name
  location            = var.pe_location
  resource_group_name = var.pe_resource_group_name
  subnet_id           = var.pe_subnet_id

  private_service_connection {
    name                              = "test-pl"
    private_connection_resource_alias = "「Private Link 用の Azure 接続エイリアスを取得」の手順で取得したデータ"
    is_manual_connection              = true
  }
}

プライベート エンドポイントのリソース ID の取得

Private Link を使用するには、プライベート エンドポイント接続のリソース ID をサービスの許可リストに追加する必要があります。

プライベート エンドポイントのリソース ID は Azure ポータルで確認できます。前の手順で作成したプライベート エンドポイントを開き、JSON View をクリックします。

プライベート エンドポイントのビュー

プロパティ内で id フィールドを探し、この値をコピーします。

推奨方法: Resource ID の使用

プライベート エンドポイントの Resource ID

レガシー方法: resourceGUID の使用 後方互換性のために、引き続き resourceGUID を使用できます。resourceGuid フィールドを探し、この値をコピーします。

プライベート エンドポイントの Resource GUID

Private Link 経由でリソースにアクセスするには、Private DNS ゾーン (${location_code}.privatelink.azure.clickhouse.cloud) を作成し、それを VNet に関連付ける必要があります。

Private DNS ゾーンの作成

オプション 1: Azure ポータルを使用

Azure ポータルを使用して Azure Private DNS ゾーンを作成する手順に従ってください。

オプション 2: Terraform を使用

次の Terraform テンプレートを使用して Private DNS ゾーンを作成します。

resource "azurerm_private_dns_zone" "clickhouse_cloud_private_link_zone" {
  name                = "${var.location}.privatelink.azure.clickhouse.cloud"
  resource_group_name = var.resource_group_name
}

ワイルドカード DNS レコードを作成する

ワイルドカードレコードを作成し、Private Endpoint を参照するように設定します。

オプション 1: Azure Portal を使用

  1. MyAzureResourceGroup リソースグループを開き、${region_code}.privatelink.azure.clickhouse.cloud プライベートゾーンを選択します。
  2. + Record set を選択します。
  3. Name に * を入力します。
  4. IP Address に、Private Endpoint に表示されている IP アドレスを入力します。
  5. OK を選択します。
Private Link DNS ワイルドカードの設定

オプション 2: Terraform を使用

次の Terraform テンプレートを使用して、ワイルドカード DNS レコードを作成します。

resource "azurerm_private_dns_a_record" "example" {
  name                = "*"
  zone_name           = var.zone_name
  resource_group_name = var.resource_group_name
  ttl                 = 300
  records             = ["10.0.0.4"]
}

プライベート DNS ゾーンを仮想ネットワークにリンクするには、仮想ネットワークリンクを作成する必要があります。

オプション 1: Azure ポータルを使用する場合

仮想ネットワークをプライベート DNS ゾーンにリンクする手順に従ってください。

オプション 2: Terraform を使用する場合

注記

DNS の構成方法にはさまざまなパターンがあります。ご利用のユースケースに応じて DNS を設定してください。

Obtain Azure connection alias for Private Link の手順で取得した "DNS name" を Private Endpoint の IP アドレスを指すように設定する必要があります。これにより、VPC/ネットワーク内のサービスやコンポーネントが正しく名前解決できるようになります。

DNS 設定を検証する

xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud ドメインが Private Endpoint の IP(この例では 10.0.0.4)を指すように設定されている必要があります。

nslookup xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud.
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud
Address: 10.0.0.4

プライベートエンドポイントのリソース ID を ClickHouse Cloud 組織に追加する

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

エンドポイントを組織に追加するには、「サービスの許可リストにプライベートエンドポイントのリソース ID を追加する」手順に進んでください。ClickHouse Cloud コンソールを使用してサービスの許可リストにプライベートエンドポイントのリソース ID を追加すると、自動的に組織にも追加されます。

エンドポイントを削除するには、Organization details -> Private Endpoints を開き、削除ボタンをクリックしてエンドポイントを削除します。

プライベートエンドポイントを削除

オプション 2: API

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

PROVIDER=azure
KEY_ID=<キーID>
KEY_SECRET=<キーシークレット>
ORG_ID=<ClickHouse組織IDを設定>
ENDPOINT_ID=<プライベートエンドポイントのリソースID>
REGION=<リージョンコード、Azure形式を使用>

Obtaining the Private Endpoint Resource ID の手順で取得したデータを使用して、ENDPOINT_ID 環境変数を設定します。

Private Endpoint を追加するために、次のコマンドを実行します。

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "add": [
      {
        "cloudProvider": "azure",
        "id": "${ENDPOINT_ID:?}",
        "description": "Azureプライベートエンドポイント",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

次のコマンドを実行して、Private Endpoint を削除することもできます。

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "remove": [
      {
        "cloudProvider": "azure",
        "id": "${ENDPOINT_ID:?}",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

プライベートエンドポイントを追加または削除した後、次のコマンドを実行して組織に反映します。

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

プライベートエンドポイントの Resource ID をサービスの許可リストに追加する

デフォルトでは、Private Link 接続が承認・確立されていても、ClickHouse Cloud サービスは Private Link 接続経由では利用できません。Private Link を使用して利用可能にする各サービスごとに、プライベートエンドポイントの Resource ID を明示的に追加する必要があります。

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

ClickHouse Cloud コンソールで、PrivateLink 経由で接続したいサービスを開き、Settings に移動します。前の手順で取得した Resource ID を入力します。

注記

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

Private Endpoints Filter

オプション 2: API

後続のコマンドを実行する前に、次の環境変数を設定します。

PROVIDER=azure
KEY_ID=<キー ID>
KEY_SECRET=<キー シークレット>
ORG_ID=<ClickHouse 組織 ID を設定>
ENDPOINT_ID=<プライベート エンドポイント リソース ID>
INSTANCE_ID=<インスタンス ID>

Private Link 経由で利用可能にしたい各サービスごとに実行します。

次のコマンドを実行して、サービスの許可リストにプライベートエンドポイントを追加します。

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

次のコマンドを実行すると、サービスの許可リストから Private Endpoint を削除できます。

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

サービスの許可リストに Private Endpoint を追加または削除した後は、組織に反映するために次のコマンドを実行します。

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 を使用して接続するには、Private Link 用の Azure 接続エイリアスを取得する で取得した privateDnsHostnameAPI または DNS nameconsole のプライベートエンドポイントを使用する必要があります。

プライベート DNS ホスト名の取得

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

ClickHouse Cloud コンソールで Settings に移動します。Set up private endpoint ボタンをクリックします。表示されたフライアウト ペインで DNS Name をコピーします。

Private Endpoint DNS Name

オプション 2: API

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

KEY_ID=<キーID>
KEY_SECRET=<キーシークレット>
ORG_ID=<ClickHouse組織IDを設定>
INSTANCE_ID=<インスタンスID>

次のコマンドを実行してください。

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

次のようなレスポンスが返ってくるはずです。

{
  ...
  "privateDnsHostname": "xxxxxxx.<region code>.privatelink.azure.clickhouse.cloud"
}

この例では、xxxxxxx.region_code.privatelink.azure.clickhouse.cloud ホスト名への接続は Private Link 経由で行われます。一方、xxxxxxx.region_code.azure.clickhouse.cloud への接続はインターネット経由で行われます。

Private Link 経由で ClickHouse Cloud サービスに接続するには、privateDnsHostname を使用します。

トラブルシューティング

DNS 設定のテスト

次のコマンドを実行します:

nslookup <DNS名>

ここで「dns name」は、プライベート リンク用の Azure 接続エイリアスの取得 で取得した privateDnsHostnameAPI または DNS nameconsole を指します。

次のようなレスポンスが返ってきます:

非権威応答:
Name: <dns name>
Address: 10.0.0.4

peer による接続リセット

原因として最も考えられるのは、Private Endpoint Resource ID がサービスの許可リストに追加されていないことです。Add Private Endpoint Resource ID to your services allow-list ステップを再確認してください。

Private Endpoint が pending 状態のまま

原因として最も考えられるのは、Private Endpoint Resource ID がサービスの許可リストに追加されていないことです。Add Private Endpoint Resource ID to your services allow-list ステップを再確認してください。

接続テスト

Private Link を使用した接続に問題がある場合は、openssl を使用して疎通を確認してください。Private Link エンドポイントのステータスが Accepted であることを確認します。

OpenSSL で接続できる必要があります(出力に CONNECTED と表示されます)。errno=104 が出力されるのは想定どおりです。

openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud:9440
# highlight-next-line \{#highlight-next-line}
CONNECTED(00000003)
write:errno=104
---
ピア証明書が利用できません
---
クライアント証明書のCA名が送信されませんでした
---
SSLハンドシェイクは0バイトを読み取り、335バイトを書き込みました
検証: OK
---
新規、(なし)、暗号は(なし)
セキュア再ネゴシエーションはサポートされていません
圧縮: なし
拡張: なし
ALPNネゴシエーションなし
早期データは送信されませんでした
検証リターンコード: 0 (ok)

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

以下のコマンドを実行する前に、次の環境変数を設定してください。

KEY_ID=<キーID>
KEY_SECRET=<キーシークレット>
ORG_ID=<ClickHouse組織IDを設定>
INSTANCE_ID=<インスタンス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

詳細情報

Azure Private Link の詳細は、azure.microsoft.com/en-us/products/private-link を参照してください。