Azure Private Link Serviceのサブスクリプション間接続|コンシューマー承認をazで実行

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > Azure Private Link Serviceのサブスクリプション間接続|コンシューマー承認をazで実行
「サブスクリプションをまたいで自分たちのサービスへ接続させたいが、Public IP を外部に公開せずに済む方法はないか」

そのような場面で使えるのが Azure Private Link Service です。
サービス提供側(プロバイダー)が Azure Standard Load Balancer の前段に Private Link Service リソースを配置し、利用側(コンシューマー)はサービスのエイリアスを指定して自分の VNet 内に Private Endpoint を作成します。
接続はプロバイダーが承認制で管理するため、どのサブスクリプションからの接続を許可するかを az コマンドで制御できます。

この記事では、Azure Private Link Service の作成手順と、コンシューマーから届いた接続要求を az コマンドで承認するまでの流れを解説します。
想定環境は Azure CLI 2.50 以降です。

この記事のポイント

・Private Link Service はプロバイダー側、Private Endpoint がコンシューマー側のリソース
・az network private-link-service connection update で接続を承認・拒否できる
・サービスエイリアスをコンシューマーへ渡すことで異なるサブスクリプションから接続できる
・特定サブスクリプションを自動承認リストに登録する設定もできる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Azure Private Link ServiceとPrivate Endpointの違い

Azure Private Link は2つのリソースで成り立っています。

・Private Link Service:自分のサービスを他のサブスクリプションへ公開するときにプロバイダー側が作成するリソース。Standard Load Balancer の前段に配置する
・Private Endpoint:外部のサービスに接続するときにコンシューマー側が自分の VNet 内に作成するネットワークインターフェース

「Azure Storage の Private Endpoint を設定した」という場合は、コンシューマー側の作業です。
一方、「自分たちの API サーバーを他のサブスクリプションから Private に利用させたい」という場合は、プロバイダー側として Private Link Service を作成します。

Private Link Service の最大の特徴は、コンシューマーからの接続要求をプロバイダーが承認・拒否できる点です。
誰でも接続できるわけではなく、プロバイダーが許可した相手だけがサービスを利用できます。

サブスクリプション間接続の全体フロー

プロバイダーとコンシューマーが異なるサブスクリプションにいる場合、接続の流れは次のようになります。

・プロバイダー側(準備):Standard LB を準備し → Private Link Service を作成し → サービスエイリアスをコンシューマーへ連絡する
・コンシューマー側:受け取ったエイリアスを指定して → 自分の VNet に Private Endpoint を作成し → 接続要求を送る
・プロバイダー側(承認):届いた接続要求を az コマンドで確認し → 承認または拒否する

コンシューマーが接続要求を送った後、プロバイダーが承認するまで Private Endpoint の状態は「Pending」のままです。
承認後にコンシューマーの Private Endpoint が「Approved」に変わり、プライベートな通信が開始できます。

プロバイダー側の手順:Private Link Serviceを作成する

1. 前提確認:Standard LBとサブネットの準備

Private Link Service を作成する前に、以下の2点を確認します。

・Azure Standard Load Balancer が作成済みで、フロントエンド IP 設定(Frontend IP configuration)が存在すること
・Private Link Service 専用のサブネットがあること(このサブネットの IP が NAT アドレスとして使用される)

まず、ロードバランサーのフロントエンド IP 設定名を確認します。

# フロントエンドIP設定名を確認する az network lb show \ --resource-group myRG \ --name myStandardLB \ --query "frontendIpConfigurations[*].name" \ --output tsv

出力例(環境により異なります):

myFrontendIPConfig

2. Private Link Serviceを作成する

確認したフロントエンド IP 設定名を使って、Private Link Service を作成します。

# Private Link Serviceを作成する az network private-link-service create \ --resource-group myRG \ --name myPrivateLinkSvc \ --vnet-name myVNet \ --subnet myPrivateLinkSubnet \ --lb-name myStandardLB \ --lb-frontend-ip-configs myFrontendIPConfig \ --location japaneast

出力例(環境により異なります):

{ "alias": "myPrivateLinkSvc.a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx.japaneast.azure.privatelinkservice", "id": "/subscriptions/.../providers/Microsoft.Network/privateLinkServices/myPrivateLinkSvc", "location": "japaneast", "name": "myPrivateLinkSvc", "privateEndpointConnections": [], "provisioningState": "Succeeded" }

provisioningState: Succeeded になれば作成完了です。

3. サービスエイリアスを確認する

コンシューマーへ渡す「サービスエイリアス」を取得します。

# サービスエイリアスを取得する az network private-link-service show \ --resource-group myRG \ --name myPrivateLinkSvc \ --query "alias" \ --output tsv

出力例(環境により異なります):

myPrivateLinkSvc.a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx.japaneast.azure.privatelinkservice

このエイリアス文字列をコンシューマー側の担当者へ渡します。
エイリアスはサービスを一意に識別するもので、コンシューマーはサブスクリプションやテナントをまたいでこの文字列だけで接続要求を送れます。

Azure VNet のプライベート接続設計を学ぶ場合は、Azureハンズオン学習コースもあわせて確認してみてください。

コンシューマー側の手順:サブスクリプションをまたいでPrivate Endpointを作成する

1. 別サブスクリプションのサービスエイリアスを指定して接続要求を送る

コンシューマー側のサブスクリプションで、受け取ったエイリアスを使って Private Endpoint を作成します。
--manual-request true を指定すると、プロバイダーの手動承認が必要な接続要求として送信されます。

# コンシューマー側でPrivate Endpointを作成する az network private-endpoint create \ --resource-group consumerRG \ --name myPrivateEndpoint \ --vnet-name consumerVNet \ --subnet consumerSubnet \ --private-connection-resource-id \ "myPrivateLinkSvc.a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx.japaneast.azure.privatelinkservice" \ --connection-name myConnectionFromConsumer \ --location japaneast \ --manual-request true

2. 接続状態を確認する

作成直後は状態が「Pending」になっています。

# Private Endpointの接続状態を確認する az network private-endpoint show \ --resource-group consumerRG \ --name myPrivateEndpoint \ --query \ "privateLinkServiceConnections[0].privateLinkServiceConnectionState.status" \ --output tsv

出力例(環境により異なります):

Pending

プロバイダーが承認するまでこの状態が続きます。

プロバイダー側の承認手順:azコマンドで接続を承認する

ここからが本記事の核心部分です。
コンシューマーから接続要求が届いたら、プロバイダー側のサブスクリプションで以下の手順を実行します。

1. 接続要求一覧を確認する

まず、Private Link Service に届いている接続要求の一覧と現在の状態を確認します。

# 接続要求一覧と状態を確認する az network private-link-service show \ --resource-group myRG \ --name myPrivateLinkSvc \ --query "privateEndpointConnections[*].{Name:name, Status:privateLinkServiceConnectionState.status}" \ --output table

出力例(環境により異なります):

Name Status --------------------------------------- -------- myConnectionFromConsumer.a1b2c3d4xxxx Pending

Status が Pending の接続が、承認待ちの要求です。
次のステップで使うため、Name の値をコピーしておきます。

2. 接続を承認する

確認した接続名を指定して、承認を実行します。

# 接続を承認する az network private-link-service connection update \ --resource-group myRG \ --service-name myPrivateLinkSvc \ --name "myConnectionFromConsumer.a1b2c3d4xxxx" \ --connection-status Approved

出力例(環境により異なります):

{ "name": "myConnectionFromConsumer.a1b2c3d4xxxx", "privateLinkServiceConnectionState": { "actionsRequired": "None", "description": "", "status": "Approved" } }

status: Approved になれば承認完了です。

3. 拒否する場合のコマンド

接続要求を拒否する場合は、--connection-status を Rejected に変更します。

# 接続を拒否する az network private-link-service connection update \ --resource-group myRG \ --service-name myPrivateLinkSvc \ --name "myConnectionFromConsumer.a1b2c3d4xxxx" \ --connection-status Rejected

一度 Rejected にした接続を、後から Approved に変更することも可能です。

4. 承認後の状態を確認する

承認後、コンシューマー側で接続状態が変わっているか確認します。
コンシューマー側のサブスクリプションで実行してください。

# コンシューマー側で承認後の状態を確認する az network private-endpoint show \ --resource-group consumerRG \ --name myPrivateEndpoint \ --query \ "privateLinkServiceConnections[0].privateLinkServiceConnectionState.status" \ --output tsv

出力例(環境により異なります):

Approved

「Approved」に変わっていれば、コンシューマー側からプライベートな通信が可能な状態になっています。

自動承認の設定:特定サブスクリプションIDを事前に登録する

毎回手動で承認するのではなく、特定のサブスクリプション ID を事前に自動承認リストへ登録できます。
社内の複数チームが定期的に接続要求を送る場合などに活用できます。

Private Link Service の作成時に --auto-approval と --visibility を指定します。

# 特定サブスクリプションを自動承認リストへ入れて作成する az network private-link-service create \ --resource-group myRG \ --name myPrivateLinkSvc \ --vnet-name myVNet \ --subnet myPrivateLinkSubnet \ --lb-name myStandardLB \ --lb-frontend-ip-configs myFrontendIPConfig \ --location japaneast \ --auto-approval \ --visibility

既存の Private Link Service に後から追加する場合は update コマンドを使います。

# 既存サービスに自動承認サブスクリプションを追加する az network private-link-service update \ --resource-group myRG \ --name myPrivateLinkSvc \ --auto-approval \ --visibility

--visibility はサービスを「検索可能にする」サブスクリプションの範囲です。
--auto-approval はその中から「自動承認する」サブスクリプションを指定します。
通常はこの2つのリストを同じ値に設定します。

トラブルシュート:よくあるエラーと対処法

「LinkedAuthorizationFailed」が出た場合
コンシューマー側のサブスクリプションに、ターゲットリソースへの適切な権限がない場合に発生します。
コンシューマーのサブスクリプションで Private Endpoint 作成の権限(Contributor 以上)があるか確認します。

「PrivateEndpointAlias Invalid」が出た場合
エイリアス文字列が正しくない可能性があります。
プロバイダー側で az network private-link-service show --query "alias" で再取得し、コピー漏れがないか確認します。

Pending 状態が変わらない場合
プロバイダー側のサブスクリプションで承認コマンドが正常に完了しているか確認します。
az network private-link-service show --query "privateEndpointConnections[*].privateLinkServiceConnectionState.status" で接続状態を確認してください。

サブネットのポリシー設定が必要な場合
Private Link Service 用のサブネットはデフォルトでネットワークポリシーが有効になっています。
次のコマンドでポリシーを無効化する必要がある場合があります。

# Private Link Service用サブネットのネットワークポリシーを無効化する az network vnet subnet update \ --resource-group myRG \ --vnet-name myVNet \ --name myPrivateLinkSubnet \ --disable-private-link-service-network-policies true

まとめ

Azure Private Link Service のサブスクリプション間接続とコンシューマー承認の手順を整理します。
やりたいこと コマンド
Private Link Service を作成する az network private-link-service create
サービスエイリアスを取得する az network private-link-service show --query "alias"
接続要求一覧を確認する az network private-link-service show --query "privateEndpointConnections"
接続を承認する az network private-link-service connection update --connection-status Approved
接続を拒否する az network private-link-service connection update --connection-status Rejected
自動承認サブスクリプションを設定する az network private-link-service create/update --auto-approval
コンシューマー側で接続状態を確認する az network private-endpoint show --query "privateLinkServiceConnections[0]..."
Azure Private Link Service は、Public IP を公開せずにサブスクリプション間でサービスを共有するときの定番の手段です。
コンシューマーからの接続要求を承認・拒否できる点が、セキュリティ制御として重要です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、>>【初心者向けLinuxセミナー(2日間ハンズオン)】は、Azureを含むLinuxサーバー管理の基礎から実践的な運用スキルまで体系的に学べる2日間のハンズオン講座です。
少人数制で、az コマンドを含むサーバー管理の「型」を、手を動かしながら習得できます。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。