--- title: Azure Private Link sidebar_label: Azure Private Link slug: /ja/cloud/security/azure-privatelink description: How to set up Azure Private Link keywords: [azure, private link, privatelink] --- # Azure Private Link :::note Azure Private LinkはClickHouse Cloudの**Production**サービスでのみ有効にできます。**Development**サービスはサポートされていません。 ::: このガイドは、Azure Private Linkを使用して、Azure(顧客所有およびMicrosoftパートナーサービスを含む)とClickHouse Cloudの間に仮想ネットワークを介したプライベート接続を提供する方法を示しています。Azure Private Linkはネットワークアーキテクチャを簡素化し、Azure内のエンドポイント間のデータの公開インターネットへの露出を排除することで接続を保護します。 ![Overview of PrivateLink](@site/docs/ja/cloud/security/images/azure-pe.png) AWSやGCPとは異なり、AzureはPrivate Linkを介したクロスリージョン接続をサポートしています。これにより、複数のリージョンにデプロイされたClickHouseサービス間での接続を確立することができます。 :::note リージョン間トラフィックには追加料金がかかる場合があります。最新のAzureドキュメントをご確認ください。 ::: Azure Private Linkを有効にするには、以下の手順を完了してください。 1. Private LinkのためのAzure接続エイリアスを取得する 1. Azureでプライベートエンドポイントを作成する 1. ClickHouse Cloud組織にプライベートエンドポイントGUIDを追加する 1. サービスの許可リストにプライベートエンドポイントGUIDを追加する 1. Private Linkを使用してClickHouse Cloudサービスにアクセスする Azure Private Linkの完全なTerraform例は[こちら](https://github.com/ClickHouse/terraform-provider-clickhouse/tree/main/examples/PrivateLinkAzure)をご覧ください。 ## Private Link用のAzure接続エイリアスを取得する ### オプション 1: ClickHouse Cloudコンソール ClickHouse Cloudコンソールで、PrivateLink経由で接続したいサービスを開き、**Settings**メニューを開きます。**Set up private endpoint**ボタンをクリックします。このステップで設定するために使用する**Service name**をコピーします。 ![Private Endpoints](./images/azure-privatelink-pe-create.png) ### オプション 2: API 開始する前に、ClickHouse Cloud APIキーが必要です。[新しいキーを作成](https://clickhouse.com/docs/ja/cloud/manage/openapi)するか、既存のキーを使用してください。Private Link構成を管理するには**Admin**キーが必要になります。 APIキーを入手したら、コマンドを実行する前に次の環境変数を設定してください。 ```bash REGION= PROVIDER=azure KEY_ID= KEY_SECRET= ORG_ID= ``` リージョンからインスタンスIDを取得します。 指定されたリージョンに少なくとも1つのClickHouse Cloudサービスがデプロイされている必要があります。 ```bash curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services | jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\") | .id " -r | head -1 | tee instance_id ``` 前のステップで受け取ったIDを使用して`INSTANCE_ID`環境変数を作成します。 ```bash INSTANCE_ID=$(cat instance_id) ``` Azure接続エイリアスとPrivate DNSホスト名を取得します。 ```bash 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.63c890a9-4d32-48cc-a08c-8cd92dfb1ad3.westus3.azure.privatelinkservice", ... } ``` `endpointServiceId`をメモしておいてください。次のステップで使用します。 ## Azureでプライベートエンドポイントを作成する {#create-private-endpoint-in-azure} このセクションでは、Azureでプライベートエンドポイントを作成します。AzureポータルまたはTerraformのいずれかを使用できます。 ### オプション 1: Azure Portalを使用してAzureでプライベートエンドポイントを作成 Azureポータルで、**Private Link Center → Private Endpoints**を開きます。 ![Open Azure Private Center](@site/docs/ja/cloud/security/images/azure-private-link-center.png) **Create**ボタンをクリックしてプライベートエンドポイント作成ダイアログを開きます。 ![Create PE](@site/docs/ja/cloud/security/images/azure-private-link-center.png) --- 次の画面で、次のオプションを指定します。 - **Subscription** / **Resource Group**: プライベートエンドポイント用にAzureサブスクリプションとリソースグループを選択してください。 - **Name**: **Private Endpoint**の名前を設定します。 - **Region**: Private Linkを介してClickHouse Cloudと接続するVNETがデプロイされているリージョンを選択します。 上記のステップを完了したら、**Next: Resource**ボタンをクリックします。 ![Create PE](@site/docs/ja/cloud/security/images/azure-pe-create-basic.png) --- **Connect to an Azure resource by resource ID or alias**オプションを選択します。 **Resource ID or alias**として、[Private Link用のAzure接続エイリアスを取得](#obtain-azure-connection-alias-for-private-link)ステップで取得した**endpointServiceId**を使用します。 **Next: Virtual Network**ボタンをクリックします。 ![PE resource](@site/docs/ja/cloud/security/images/azure-pe-resource.png) --- - **Virtual network**: Private Linkを使用してClickHouse Cloudと接続したいVNETを選択します。 - **Subnet**: プライベートエンドポイントが作成されるサブネットを選択します。 オプション: - **Application security group**: ASGをプライベートエンドポイントにアタッチし、ネットワークセキュリティグループでプライベートエンドポイントへの/からのネットワークトラフィックをフィルタリングするために使用できます。 **Next: DNS**ボタンをクリックします。 ![PE network](@site/docs/ja/cloud/security/images/azure-pe-create-vnet.png) **Next: Tags**ボタンをクリックします。 --- ![PE DNS](@site/docs/ja/cloud/security/images/azure-pe-create-dns.png) タグをプライベートエンドポイントにアタッチすることができます(任意)。 **Next: Review + create**ボタンをクリックします。 --- ![PE tags](@site/docs/ja/cloud/security/images/azure-pe-create-tags.png) 最後に、**Create**ボタンをクリックします。 ![PE review](@site/docs/ja/cloud/security/images/azure-pe-create-review.png) 作成されたプライベートエンドポイントの**Connection status**は**Pending**状態になります。このプライベートエンドポイントをサービス許可リストに追加すると**Approved**状態に変更されます。 プライベートエンドポイントに関連したネットワークインターフェースを開き、次のステップで必要になる**Private IPv4 address**(この例では10.0.0.4)をコピーします。 ![PE IP address](@site/docs/ja/cloud/security/images/azure-pe-ip.png) ### オプション 2: Terraformを使用してAzureでプライベートエンドポイントを作成する Terraformを使用してプライベートエンドポイントを作成するための以下のテンプレートを使用します。 ```json 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 = "" is_manual_connection = true } } ``` ### プライベートエンドポイントresourceGuidの取得 {#obtaining-private-endpoint-resourceguid} Private Linkを使用するためには、プライベートエンドポイント接続GUIDをサービス許可リストに追加する必要があります。 プライベートエンドポイントリソースGUIDはAzureポータルでのみ表示されます。前のステップで作成したプライベートエンドポイントを開き、**JSON View**をクリックします。 ![PE GUID](@site/docs/ja/cloud/security/images/azure-pe-view.png) `resourceGuid`フィールドを見つけ、この値をコピーします。 ![PE GUID](@site/docs/ja/cloud/security/images/azure-pe-resource-guid.png) ## Private LinkのためのDNSの設定 Private Linkを介してリソースにアクセスするために、プライベートDNSゾーン (`${location_code}.privatelink.azure.clickhouse.cloud`) を作成し、それをVNETにアタッチする必要があります。 ### Private DNSゾーンを作成 **オプション 1: Azureポータルを使用** [Azure Portalを使用してAzureプライベートDNSゾーンを作成する](https://learn.microsoft.com/en-us/azure/dns/private-dns-getstarted-portal)ためのガイドに従ってください。 **オプション 2: Terraformを使用** Private DNSゾーンを作成するための以下のTerraformテンプレートを使用します。 ```json 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レコードを作成 ワイルドカードレコードを作成し、プライベートエンドポイントにポイントします。 **オプション 1: Azureポータルを使用** 1. MyAzureResourceGroupリソースグループを開き、`${region_code}.privatelink.azure.clickhouse.cloud`プライベートゾーンを選択します。 2. **+ Record set**を選択します。 3. **Name**に`*`を入力します。 4. **IP Address**にプライベートエンドポイントのIPアドレスを入力します。 5. **OK**を選択します。 ![PE review](@site/docs/ja/cloud/security/images/azure-pl-dns-wildcard.png) **オプション 2: Terraformを使用** ワイルドカードDNSレコードを作成するための以下のTerraformテンプレートを使用します。 ```json 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ゾーンに仮想ネットワークをリンクする](https://learn.microsoft.com/en-us/azure/dns/private-dns-getstarted-portal#link-the-virtual-network)ためのガイドに従ってください。 **オプション 2: Terraformを使用** 仮想ネットワークをプライベートDNSゾーンにリンクするための以下のTerraformテンプレートを使用します。 ```json resource "azurerm_private_dns_zone_virtual_network_link" "example" { name = "test" resource_group_name = var.resource_group_name private_dns_zone_name = var.zone_name virtual_network_id = var.virtual_network_id } ``` ### DNS設定の検証 westus3.privatelink.azure.clickhouse.cloudドメイン内の任意のレコードはプライベートエンドポイントIPにポイントされるべきです(この例では10.0.0.4)。 ```bash nslookup instance-id.westus3.privatelink.azure.clickhouse.cloud. Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: instance-id.westus3.privatelink.azure.clickhouse.cloud Address: 10.0.0.4 ``` ## ClickHouse Cloud組織にプライベートエンドポイントGUIDを追加する ### オプション 1: ClickHouse Cloudコンソール 組織にエンドポイントを追加するには、[Add the Private Endpoint GUID to your service(s) allow list](#add-private-endpoint-guid-to-services-allow-list)ステップに進んでください。ClickHouse Cloudコンソールを使用してサービス許可リストに`Private Endpoint GUID`を追加すると、それが組織にも自動的に追加されます。 エンドポイントを削除するには、**Organization details -> Private Endpoints**を開き、削除ボタンをクリックしてエンドポイントを削除します。 ![endpoints](./images/azure-pe-remove-private-endpoint.png) ### オプション 2: API コマンドを実行する前に次の環境変数を設定してください。 ```bash PROVIDER=azure KEY_ID= KEY_SECRET= ORG_ID= ENDPOINT_ID= REGION= ``` [プライベートエンドポイントresourceGuidの取得](#obtaining-private-endpoint-resourceguid)ステップからのデータを使用して`VPC_ENDPOINT`環境変数を設定します。 プライベートエンドポイントを追加するために次のコマンドを実行します。 ```bash cat < KEY_SECRET= ORG_ID= ENDPOINT_ID= INSTANCE_ID= ``` プライベートリンクを使用して利用可能にしたい各サービスで実行します。 サービス許可リストにプライベートエンドポイントを追加するために次のコマンドを実行します。 ```bash cat < KEY_SECRET= ORG_ID= INSTANCE_ID= ``` 次のコマンドを実行します。 ```bash curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig | jq .result ``` 次のような応答を受けるはずです。 ```response { ... "privateDnsHostname": "xxxxxxx..privatelink.azure.clickhouse.cloud" } ``` この例では、`xxxxxxx.region_code.privatelink.azure.clickhouse.cloud`ホスト名への接続はPrivate Linkにルーティングされます。一方、`xxxxxxx.region_code.azure.clickhouse.cloud`はインターネットを介してルーティングされます。 `privateDnsHostname`を使用して、プライベートリンクを介してClickHouse Cloudサービスに接続します。 ## トラブルシューティング ### DNS設定のテスト `${region_code}.privatelink.azure.clickhouse.cloud.`ゾーン内のすべてのDNSレコードは[Azureでプライベートエンドポイントを作成](#create-private-endpoint-in-azure)ステップからの内部IPアドレスにポイントされる必要があります。この例では、リージョンは`westus3`です。 次のコマンドを実行します。 ```bash nslookup abcd.westus3.privatelink.azure.clickhouse.cloud. ``` 次のような応答を受けるはずです。 ```response Non-authoritative answer: Name: abcd.westus3.privatelink.azure.clickhouse.cloud Address: 10.0.0.4 ``` ### ピアによる接続リセット おそらく、プライベートエンドポイントGUIDがサービス許可リストに追加されていません。[サービスの許可リストにプライベートエンドポイントGUIDを追加する](#add-private-endpoint-guid-to-services-allow-list)ステップに再度取り組んでください。 ### プライベートエンドポイントがPending状態 おそらく、プライベートエンドポイントGUIDがサービス許可リストに追加されていません。[サービスの許可リストにプライベートエンドポイントGUIDを追加する](#add-private-endpoint-guid-to-services-allow-list)ステップに再度取り組んでください。 ### 接続のテスト Private Link経由で接続に問題がある場合は、`openssl`を使用して接続を確認します。Private Linkエンドポイントのステータスが`Accepted`であることを確認してください。 OpenSSLは接続可能であるはずです(出力にCONNECTEDが表示されます)。`errno=104`は予期されたものです。 ```bash openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud.cloud:9440 ``` ```response # highlight-next-line CONNECTED(00000003) write:errno=104 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 335 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ``` ### プライベートエンドポイントフィルターの確認 コマンドを実行する前に次の環境変数を設定してください。 ```bash KEY_ID= KEY_SECRET= ORG_ID= INSTANCE_ID= ``` プライベートエンドポイントフィルターを確認するために次のコマンドを実行します。 ```bash 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](https://azure.microsoft.com/en-us/products/private-link)をご覧ください。