ClickHouse/docs/ja/cloud/security/azure-privatelink.md
2024-11-18 11:58:58 +09:00

22 KiB
Raw Blame History

title sidebar_label slug description keywords
Azure Private Link Azure Private Link /ja/cloud/security/azure-privatelink How to set up Azure Private Link
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

AWSやGCPとは異なり、AzureはPrivate Linkを介したクロスリージョン接続をサポートしています。これにより、複数のリージョンにデプロイされたClickHouseサービス間での接続を確立することができます。

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

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

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

Azure Private Linkの完全なTerraform例はこちらをご覧ください。

Private Link用のAzure接続エイリアスを取得する

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

ClickHouse Cloudコンソールで、PrivateLink経由で接続したいサービスを開き、Settingsメニューを開きます。Set up private endpointボタンをクリックします。このステップで設定するために使用するService nameをコピーします。

Private Endpoints

オプション 2: API

開始する前に、ClickHouse Cloud APIキーが必要です。新しいキーを作成するか、既存のキーを使用してください。Private Link構成を管理するにはAdminキーが必要になります。

APIキーを入手したら、コマンドを実行する前に次の環境変数を設定してください。

REGION=<region code, use Azure format>
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>

リージョンからインスタンスIDを取得します。

指定されたリージョンに少なくとも1つのClickHouse Cloudサービスがデプロイされている必要があります。

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環境変数を作成します。

INSTANCE_ID=$(cat instance_id)

Azure接続エイリアスとPrivate 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.63c890a9-4d32-48cc-a08c-8cd92dfb1ad3.westus3.azure.privatelinkservice",
  ...
}

endpointServiceIdをメモしておいてください。次のステップで使用します。

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

このセクションでは、Azureでプライベートエンドポイントを作成します。AzureポータルまたはTerraformのいずれかを使用できます。

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

Azureポータルで、Private Link Center → Private Endpointsを開きます。

Open Azure Private Center

Createボタンをクリックしてプライベートエンドポイント作成ダイアログを開きます。

Create PE


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

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

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

Create PE


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

Resource ID or aliasとして、Private Link用のAzure接続エイリアスを取得ステップで取得したendpointServiceIdを使用します。

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

PE resource


  • Virtual network: Private Linkを使用してClickHouse Cloudと接続したいVNETを選択します。
  • Subnet: プライベートエンドポイントが作成されるサブネットを選択します。

オプション:

  • Application security group: ASGをプライベートエンドポイントにアタッチし、ネットワークセキュリティグループでプライベートエンドポイントへの/からのネットワークトラフィックをフィルタリングするために使用できます。

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

PE network

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


PE DNS

タグをプライベートエンドポイントにアタッチすることができます(任意)。

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


PE tags

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

PE review

作成されたプライベートエンドポイントのConnection statusPending状態になります。このプライベートエンドポイントをサービス許可リストに追加するとApproved状態に変更されます。

プライベートエンドポイントに関連したネットワークインターフェースを開き、次のステップで必要になるPrivate IPv4 addressこの例では10.0.0.4)をコピーします。

PE IP address

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

Terraformを使用してプライベートエンドポイントを作成するための以下のテンプレートを使用します。

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 = "<data from 'Obtain Azure connection alias for Private Link' step>"
    is_manual_connection              = true
  }
}

プライベートエンドポイントresourceGuidの取得

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

プライベートエンドポイントリソースGUIDはAzureポータルでのみ表示されます。前のステップで作成したプライベートエンドポイントを開き、JSON Viewをクリックします。

PE GUID

resourceGuidフィールドを見つけ、この値をコピーします。

PE GUID

Private LinkのためのDNSの設定

Private Linkを介してリソースにアクセスするために、プライベートDNSゾーン (${location_code}.privatelink.azure.clickhouse.cloud) を作成し、それをVNETにアタッチする必要があります。

Private DNSゾーンを作成

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

Azure Portalを使用してAzureプライベートDNSゾーンを作成するためのガイドに従ってください。

オプション 2: Terraformを使用

Private DNSゾーンを作成するための以下のTerraformテンプレートを使用します。

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

オプション 2: Terraformを使用

ワイルドカードDNSレコードを作成するための以下のTerraformテンプレートを使用します。

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ゾーンにリンクするための以下のTerraformテンプレートを使用します。

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)。

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ステップに進んでください。ClickHouse Cloudコンソールを使用してサービス許可リストにPrivate Endpoint GUIDを追加すると、それが組織にも自動的に追加されます。

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

endpoints

オプション 2: API

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

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint resourceGuid>
REGION=<region code, use Azure format>

プライベートエンドポイントresourceGuidの取得ステップからのデータを使用してVPC_ENDPOINT環境変数を設定します。

プライベートエンドポイントを追加するために次のコマンドを実行します。

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

また、プライベートエンドポイントを削除するために次のコマンドを実行することもできます。

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

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

デフォルトでは、プライベートリンク接続が承認され確立されている場合でも、ClickHouse Cloudサービスはプライベートリンク接続を介して利用可能ではありません。プライベートリンクを使用して利用可能とするためには、各サービスに対してプライベートエンドポイントGUIDを明示的に追加する必要があります。

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

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

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

Private Endpoints

オプション 2: API

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

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint resourceGuid>
INSTANCE_ID=<Instance ID>

プライベートリンクを使用して利用可能にしたい各サービスで実行します。

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

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

また、サービス許可リストからプライベートエンドポイントを削除するために次のコマンドを実行することもできます。

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を使用してClickHouse Cloudサービスにアクセスする

プライベートリンクが有効になっている各サービスには、パブリックエンドポイントとプライベートエンドポイントがあります。Private Linkを使用して接続するには、privateDnsHostnameというプライベートエンドポイントを使用する必要があります。

:::note プライベートDNSホスト名はAzure VNETからのみ利用可能です。Azure VNET外のマシンからDNSホストを解決しようとしないでください。 :::

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

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

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

Private Endpoints

オプション 2: API

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

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
INSTANCE_ID=<Instance 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はインターネットを介してルーティングされます。

privateDnsHostnameを使用して、プライベートリンクを介してClickHouse Cloudサービスに接続します。

トラブルシューティング

DNS設定のテスト

${region_code}.privatelink.azure.clickhouse.cloud.ゾーン内のすべてのDNSレコードはAzureでプライベートエンドポイントを作成ステップからの内部IPアドレスにポイントされる必要があります。この例では、リージョンはwestus3です。

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

nslookup abcd.westus3.privatelink.azure.clickhouse.cloud.

次のような応答を受けるはずです。

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

ピアによる接続リセット

おそらく、プライベートエンドポイントGUIDがサービス許可リストに追加されていません。サービスの許可リストにプライベートエンドポイントGUIDを追加するステップに再度取り組んでください。

プライベートエンドポイントがPending状態

おそらく、プライベートエンドポイントGUIDがサービス許可リストに追加されていません。サービスの許可リストにプライベートエンドポイントGUIDを追加するステップに再度取り組んでください。

接続のテスト

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

OpenSSLは接続可能であるはずです出力にCONNECTEDが表示されますerrno=104は予期されたものです。

openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud.cloud:9440
# 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)

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

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

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization 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
[]

詳細情報

Azure Private Linkの詳細については、azure.microsoft.com/en-us/products/private-linkをご覧ください。