この記事では、API サーバーで承認された IP アドレス範囲を使用して、Azure Kubernetes Service (AKS) ワークロードのコントロール プレーン エンドポイントにアクセスできる IP アドレスと CIDR を制限する方法について説明します。
[前提条件]
- Azure CLI バージョン 2.0.76 以降。 バージョンを確認するには、
az --versionを実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - Azure PowerShellの最新バージョン。 インストール手順については、「Install Azure PowerShellを参照してください。
- AKS クラスターと Azure DevOps を統合するときに含める IP アドレスについては、「 許可される IP アドレスとドメイン URL」を参照してください。
ヒント
Azure ポータルで、Azure Copilotを使用して、クラスターにアクセスできる IP アドレスを変更します。 詳細については、「 Azure Copilot を使用して AKS クラスターを効率的に操作する」を参照してください。
制限事項と考慮事項
- AKS では、Standard SKU ロード バランサーでのみこの機能がサポートされます。 AKS は Basic SKU ロード バランサーをサポートしなくなりました。 Basic SKU を使用する既存のクラスターがある場合は、Standard SKU に移行してください。 移行にはダウンタイムが必要であり、追加の前提条件があります。
- プライベート クラスターではこの機能を使用できません。
- ノード パブリック IP を使用するクラスターでは、パブリック IP を持つ各ノード プールでパブリック IP プレフィックスを使用する必要があります。 これらのプレフィックスを許可済みの範囲として追加します。 IPv6 専用ノードパブリック IP プレフィックスは使用できません。Azureではノードの IPv4 アドレスが自動的に割り当てられ、承認された範囲として追加できないためです。
- 最大 200 個の承認済み IP 範囲を指定できます。 この制限を超えるには、最大 2,000 の承認された IP 範囲をサポートする API Server VNet 統合の使用を検討してください。
API サーバーの許可された IP 範囲の概要
Kubernetes API サーバーは、基になる Kubernetes API を公開します。
kubectlや Kubernetes ダッシュボードなどの管理ツールは、この API サーバーを介してクラスターと対話します。 AKS は、専用 API サーバーを備えたシングルテナント コントロール プレーンを提供し、既定でサーバーにパブリック IP アドレスを割り当てます。 アクセスは、Kubernetes ロールベースのアクセス制御 (Kubernetes RBAC) または Azure RBAC を使用して制御できます。
通常は公開アクセス可能な AKS コントロール プレーン API サーバーを保護するには、承認された IP 範囲を有効にします。 許可された IP 範囲では、定義された IP アドレス範囲のみが API サーバーと通信できます。 API サーバーは、承認された範囲に含まれていない IP アドレスからの要求をブロックします。 ルールが反映されるまで、最大 2 分かかる場合があります。 接続をテストする前に、最大 2 分待ってください。
許可する推奨 IP 範囲
API サーバーで承認された IP 範囲の構成には、次の IP アドレス範囲を含めてお勧めします。
- クラスターエグレス IP アドレス (送信の種類に応じて、ファイアウォール、NAT ゲートウェイ、またはその他のアドレス)。
- クラスターの管理に使用するネットワークの IP アドレス範囲。
API サーバーの許可された IP 範囲を有効にした AKS クラスターを作成する
注
クラスターの作成時に API サーバーの承認された IP 範囲を有効にすると、AKS は、指定した範囲に加えて、既定で、API サーバーのパブリック IP と Standard SKU ロード バランサー の送信パブリック IP を承認された IP 範囲の一覧に追加します。
特殊なケース - 0.0.0.0/32: 0.0.0.0/32 プレースホルダーは、Standard SKU ロード バランサーの送信元パブリック IP のみが API サーバーにアクセスできるように AKS に指示します。 プレースホルダーの動作は次のとおりです。
| Behavior | Description |
|---|---|
| 追加のクライアント IP 範囲 | 追加のクライアント IP 範囲を許可する既定の動作を無効にします。 |
| API サーバーアクセス | API サーバーのアクセスを、クラスター独自の送信 IP のみに制限します。 |
| 自己管理 | 外部アクセスをブロックしながら、クラスターが自己管理できるようにします。 |
API サーバーの承認された IP 範囲を有効にしてクラスターを作成するには、承認されたパブリック IP アドレス範囲の一覧を指定します。 CIDR 範囲の場合は、ネットワーク アドレス (範囲内の最初の IP アドレス) を使用します。 たとえば、137.117.106.88から137.117.106.95までの範囲を許可するには、137.117.106.88/29を指定します。
az aks create コマンドを --api-server-authorized-ip-ranges パラメーターと共に使用して、API サーバーの承認された IP 範囲が有効になっている AKS クラスターを作成します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成し、IP アドレス範囲73.140.245.0/24 API サーバーにアクセスできるようにします。
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
New-AzAksCluster コマンドレットと -ApiServerAccessAuthorizedIpRange パラメーターを使用して、API サーバーの承認済み IP 範囲が有効になっている AKS クラスターを作成します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成し、IP アドレス範囲73.140.245.0/24 API サーバーにアクセスできるようにします。
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '73.140.245.0/24' -GenerateSshKey
- Azure portal のホーム ページから、[リソースの作成]>[コンテナー]>[Azure Kubernetes Service (AKS)] の順に選択します。
- 必要に応じてクラスター設定を構成します。
- [ネットワーク] セクションの [パブリック アクセス] で、[許可された IP 範囲の設定] を選択します。
- [IP 範囲の指定] に、API サーバーへのアクセスを許可する IP アドレス範囲を入力します。
- 必要に応じて、クラスター設定の残りの部分を構成します。
- 準備ができたら、[確認と作成]>[作成] を選択してクラスターを作成します。
Azure CLIを使用して Standard SKU ロード バランサーの送信 IP を指定する
API サーバーの承認された IP 範囲を有効にしてクラスターを作成する場合は、 --load-balancer-outbound-ips または --load-balancer-outbound-ip-prefixes パラメーターを使用して、その送信 IP アドレスまたはプレフィックスを指定することもできます。 AKS では、 --api-server-authorized-ip-ranges パラメーターの IP アドレスに加えて、これらの IP アドレスも許可されます。
--load-balancer-outbound-ips パラメーターを使用して、API サーバー承認済み IP 範囲が有効になっている AKS クラスターを作成し、Standard SKU ロード バランサーの送信 IP アドレスを指定します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成し、73.140.245.0/24 で指定した範囲から API サーバーにアクセスできるようにし、Standard SKU ロード バランサーに 2 つの送信 IP アドレスを指定します。
<public-ip-id-1>と<public-ip-id-2>をお使いのパブリック IP アドレスのリソース ID に置き換えます。
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
Standard SKU ロード バランサーのアウトバウンド パブリック IP のみを許可する
--api-server-authorized-ip-ranges パラメーターを使用して、Standard SKU ロード バランサーの送信元パブリック IP のみが API サーバーにアクセスできるようにする AKS クラスターを作成します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成します。
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
-ApiServerAccessAuthorizedIpRange パラメーターを使用して、Standard SKU ロード バランサーの送信元のパブリック IP のみが API サーバーにアクセスできる AKS クラスターを作成します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成します。
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '0.0.0.0/32' -GenerateSshKey
- Azure portal のホーム ページから、[リソースの作成]>[コンテナー]>[Azure Kubernetes Service (AKS)] の順に選択します。
- 必要に応じてクラスター設定を構成します。
- [ネットワーク] セクションの [パブリック アクセス] で、[許可された IP 範囲の設定] を選択します。
- [ IP 範囲の指定] に「
0.0.0.0/32」と入力します。 この設定では、Standard SKU ロード バランサーの送信パブリック IP のみが許可されます。 - 必要に応じて、クラスター設定の残りの部分を構成します。
- 準備ができたら、[確認と作成]>[作成] を選択してクラスターを作成します。
既存のクラスターで API サーバーの承認された IP 範囲を更新する
az aks update コマンドを --api-server-authorized-ip-ranges パラメーターと共に使用して、クラスターの API サーバーの承認済み IP 範囲を更新します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスターに対して、承認された範囲を 73.140.245.0/24 に設定します。
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
Azure CLIを使用して複数の IP アドレス範囲を許可する
複数の IP アドレス範囲を許可するには、それらをコンマで区切ります。
az aks update コマンドを --api-server-authorized-ip-ranges パラメーターと共に使用して、複数の IP アドレス範囲を許可します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスターを更新します。
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24,193.168.1.0/24,194.168.1.0/24
クラスターの API サーバーの承認済み IP 範囲を更新するには、Set-AzAksCluster コマンドレットを -ApiServerAccessAuthorizedIpRange パラメーターと共に使用します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスターに対して、承認された範囲を 73.140.245.0/24 に設定します。
Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange '73.140.245.0/24'
- Azure portal に移動し、更新する AKS クラスターを選択します。
- サービス メニューの [設定] で [ ネットワーク] を選択します。
- [リソース設定] で、[管理] を選択します。
- [許可された IP 範囲] ページで、必要に応じて [許可された IP 範囲] を更新します。
- 終了したら、保存を選択してください。
既存のクラスターで API サーバーの承認された IP 範囲を無効にする
API サーバーの承認された IP 範囲を無効にするには、az aks update コマンドを使用し、--api-server-authorized-ip-ranges パラメーターに空の範囲 "" を指定します。
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
API サーバーで承認された IP 範囲を無効にするには、Set-AzAksCluster コマンドレットを使用し、-ApiServerAccessAuthorizedIpRange パラメーターに空の範囲 '' を指定します。
Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange ''
- Azure portal に移動し、更新する AKS クラスターを選択します。
- サービス メニューの [設定] で [ ネットワーク] を選択します。
- [リソース設定] で、[管理] を選択します。
- [許可された IP 範囲] ページで、[許可された IP 範囲の設定] チェック ボックスをオフにします。
- 保存 を選択します。
既存の API サーバーの承認された IP 範囲を検索する
既存の API サーバーの承認された IP 範囲を検索するには、az aks show コマンドを使用し、--query パラメーターを apiServerAccessProfile.authorizedIpRanges に設定します。
az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
出力例:
[
"73.140.245.0/24"
]
既存の API サーバーの承認された IP 範囲を検索するには、 Get-AzAksCluster コマンドレットを使用します。
Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster | Select-Object -ExpandProperty ApiServerAccessProfile
出力例:
AuthorizedIPRanges: {73.140.245.0/24}
...
Azure portal に移動し、AKS クラスターを選択します。
サービス メニューの [設定] で [ ネットワーク] を選択します。
[リソース設定] セクションには、[ネットワーク] ページで現在構成されている承認済み IP 範囲が表示されます。
開発用コンピューター、ツール、または自動化から API サーバーにアクセスする
開発用コンピューター、ツール、またはオートメーション システムから API サーバーにアクセスするには、アクセス元のパブリック IP アドレスをクラスターの承認された IP 範囲に追加します。
または、ファイアウォールの仮想ネットワーク内の別のサブネットに必要なツールを備えたジャンプボックスを構成し、承認された範囲にファイアウォールの IP アドレスを追加します。 AKS クラスター サブネットでファイアウォール経由の強制トンネリングが使用されている場合は、代わりにそのジャンプボックスを AKS クラスター サブネットに配置できます。
注
次の例では、既存の承認された範囲を保持し、別の IP アドレスを追加します。 既存の IP アドレスを省略すると、コマンドはそれを新しい範囲に置き換えます。
次のコマンドを実行して IP アドレスを取得し、取得した IP アドレスを環境変数として設定します。
# Retrieve your IP address CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")az aks updateコマンドを--api-server-authorized-ip-rangesパラメーターと共に使用して、承認された範囲に IP アドレスを追加します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスター上の既存の範囲に現在の IP アドレスを追加します。az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges $CURRENT_IP/32,73.140.245.0/24
次のコマンドを実行して自分の IP アドレスを取得し、環境変数として設定します。
# Retrieve your IP address $CURRENT_IP = (Invoke-RestMethod -Uri 'https://ipinfo.io/json').ipSet-AzAksClusterコマンドレットを-ApiServerAccessAuthorizedIpRangeパラメーターと共に使用して、承認された範囲に IP アドレスを追加します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスター上の既存の範囲に現在の IP アドレスを追加します。Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange "$CURRENT_IP/32", '73.140.245.0/24'
自分の IP アドレスを確認する別の方法については、自分の IP アドレスを確認する を参照するか、Web ブラウザーで 自分の IP アドレスは何ですか? を検索してください。
関連コンテンツ
AKS のセキュリティの詳細については、次の記事を参照してください。