Azure Kubernetes Service (AKS) で許可された IP アドレス範囲を使用して API サーバーへのアクセスをセキュリティで保護する
この記事では、"API サーバーで許可された IP アドレス範囲" を使って、コントロール プレーンにアクセスできる IP アドレスと CIDR を制限する方法を示します。
Kubernetes API サーバーは、Kubernetes コントロール プレーンの中核であり、クラスターを操作し管理するための中心的な方法です。 クラスターのセキュリティを向上させ、攻撃のリスクを最小限に抑えるために、API サーバーにアクセスできる IP アドレスの範囲を制限することをお勧めします。 これを行うには、"API サーバーの許可された IP 範囲" の機能を使います。
開始する前に
- Azure CLI バージョン 2.0.76 以降がインストールされて構成されている必要があります。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - AKS クラスターをAzure DevOps に統合するときに含める IP アドレスについては、許可される IP アドレスとドメイン URL に関する Azure DevOps の記事を参照してください。
制限事項
"API サーバーの許可された IP 範囲" の機能には、次の制限があります。
- "API サーバーの許可された IP 範囲" の機能は 2019 年 10 月にプレビューから移行されました。 この機能がプレビューから移行された後に作成されたクラスターでは、この機能は Standard SKU ロード バランサーでのみサポートされています。 "API サーバーの許可された IP 範囲" の機能が有効になっている Basic SKU ロード バランサー上の既存のクラスターは、引き続きそのまま動作します。 ただし、これらのクラスターは Standard SKU ロード バランサーに移行することはできません。 Kubernetes のバージョンとコントロール プレーンをアップグレードすれば、既存のクラスターは引き続き動作します。
- "API サーバーの許可された IP 範囲" の機能は、プライベート クラスターではサポートされていません。
- ノード パブリック IP を使うクラスターでこの機能を使う場合、ノード パブリック IP を使うノード プールはパブリック IP プレフィックスを使う必要があります。 パブリック IP プレフィックスは、許可された範囲として追加する必要があります。
API サーバーの許可された IP 範囲の概要
Kubernetes API サーバーは、基になる Kubernetes API を公開し、kubectl
や Kubernetes ダッシュボードなどの管理ツールの対話を提供します。 AKS により、専用の API サーバーでシングル テナント クラスター コントロール プレーンが提供されます。 API サーバーには、既定でパブリック IP アドレスが割り当てられます。 アクセスは、Kubernetes ロールベースのアクセス制御 (Kubernetes RBAC) または Azure RBAC を使用して制御できます。
通常はパブリックにアクセス可能な AKS コントロール プレーン/API サーバーへのアクセスをセキュリティで保護するには、許可された IP 範囲を有効にして使用することができます。 これらの許可された IP 範囲では、API サーバーと通信するための定義された IP アドレス範囲のみが許可されます。 これらの許可された IP 範囲に含まれていない IP アドレスから API サーバーへの要求はブロックされます。
API サーバーの許可された IP 範囲を有効にした AKS クラスターを作成する
重要
既定では、クラスターは Standard SKU ロード バランサーを使用します。これを使用して、アウトバウンド ゲートウェイを構成できます。 クラスターの作成時に API サーバーの許可された IP 範囲を有効にすると、指定した範囲の他に、クラスターのパブリック IP が既定で許可されます。 --api-server-authorized-ip-ranges
に "" を指定するか、値を指定しなかった場合、API サーバーの許可された IP 範囲は無効になります。 PowerShell を使用している場合は、解析の問題を回避するために、--api-server-authorized-ip-ranges=""
(等号付き) を使用することに注意してください。
Note
次の範囲を許可リストに追加してください。
- クラスターエグレス IP アドレス (送信の種類に応じて、ファイアウォール、NAT ゲートウェイ、またはその他のアドレス)。
- クラスターを管理するネットワークを表すあらゆる範囲。
指定できる IP 範囲の数の上限は 200 です。
ルールが反映されるまで、最大 2 分かかる場合があります。 接続をテストするときは、その時間に至るまで待ってください。
API サーバーの許可された IP 範囲が有効になっているクラスターを作成する場合は、--api-server-authorized-ip-ranges
パラメーターを使用して、承認されたパブリック IP アドレス範囲の一覧を指定します。 CIDR 範囲を指定する場合は、その範囲内の最初の IP アドレスから始めます。 たとえば、137.117.106.90/29 は有効な範囲ですが、範囲内の最初の IP アドレス (137.117.106.88/29 など) を指定するようにしてください。
--api-server-authorized-ip-ranges
パラメーターを使用したaz aks create
コマンドを使用して API サーバーの許可された IP 範囲を有効にした AKS クラスターを作成します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成し、API サーバーの許可された IP 範囲を有効にします。 許可される IP アドレス範囲は、73.140.245.0/24 です。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
Standard SKU ロード バランサーのアウトバウンド IP を指定する
API サーバーの許可された IP 範囲を有効にしてクラスターを作成する場合は、--load-balancer-outbound-ips
または --load-balancer-outbound-ip-prefixes
パラメーターを使用して、クラスターのアウトバウンド IP アドレスまたはプレフィックスを指定することもできます。 パラメーターで指定されたすべての IP は、--api-server-authorized-ip-ranges
パラメーター内の IP と共に許可されます。
API サーバーの許可された IP 範囲が有効になっている AKS クラスターを作成し、
--load-balancer-outbound-ips
パラメーターを使用して Standard SKU ロード バランサーのアウトバウンド IP アドレスを指定します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前のクラスターを作成し、API サーバーの許可された IP 範囲を有効にし、アウトバウンド IP アドレス<public-ip-id-1>
と<public-ip-id-2>
を指定します: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 サーバーの許可された IP 範囲を有効にすると、指定した範囲の他に、クラスターの Standard SKU ロード バランサーのアウトバウンド パブリック IP も既定で許可されます。 Standard SKU ロード バランサーのアウトバウンド パブリック IP のみを許可するには、--api-server-authorized-ip-ranges
パラメーターを指定するときに、0.0.0.0/32 を使用します。
API サーバーの許可された IP 範囲が有効になっている AKS クラスターを作成し、
--api-server-authorized-ip-ranges
パラメーターを使用して Standard SKU ロード バランサーのアウトバウンド パブリック IP のみを許可します。 次の例では、myResourceGroup という名前のリソース グループに myAKSCluster という名前の単一ノードのクラスターを作成し、API サーバーの許可された IP 範囲を有効にして、Standard SKU ロード バランサーのアウトバウンド パブリック IP のみを許可します: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
既存のクラスターの API サーバーの許可された IP 範囲を更新する
--api-server-authorized-ip-ranges
パラメーターを指定したaz aks update
コマンドを使用して、既存のクラスターの API サーバーの許可された IP 範囲を更新します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスターで API サーバーの許可された IP 範囲を更新します。 許可する IP アドレス範囲は、73.140.245.0/24 です。az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
複数の IP アドレス範囲を許可するには、複数の IP アドレスをコンマで区切って一覧表示できます。
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
Standard SKU ロード バランサーのパブリック IP のみを許可するために、
--api-server-authorized-ip-ranges
パラメーターを指定するときに、0.0.0.0/32 を使用することもできます。
許可された IP 範囲を無効にする
az aks update
コマンドを使用して、--api-server-authorized-ip-ranges
パラメーターに空の範囲""
を指定して、許可された IP 範囲を無効にします。az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
既存の許可された IP 範囲を検索する
--query
パラメーターがapiServerAccessProfile.authorizedIpRanges
に設定されたaz aks show
コマンドを使用して、既存の許可された IP 範囲を検索します。az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
--api-server-authorized-ip-ranges
に含める IP を見つける方法
開発用コンピューター、ツール、またはオートメーションの IP アドレスから API サーバーにアクセスするには、許可された IP 範囲の AKS クラスター リストにそれらを追加する必要があります。
もう 1 つの方法は、ファイアウォールの仮想ネットワーク内の別のサブネット内に必要なツールが含まれたジャンプボックスを構成することです。 この場合、環境にはそれぞれのネットワークのファイアウォールがあり、許可された範囲にファイアウォールの IP が追加されていることが想定されています。 同様に、AKS サブネットからファイアウォール サブネットへのトンネリングを強制している場合は、クラスター サブネット内にジャンプボックスがあってもかまいません。
次のコマンドを使用して IP アドレスを取得します。
# Retrieve your IP address CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
Azure CLI または Azure PowerShell を使用して、許可リストに IP アドレスを追加します:
# Add to AKS approved list using Azure CLI az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/24,73.140.245.0/24 # Add to AKS approved list using Azure PowerShell Set-AzAksCluster -ResourceGroupName $RG -Name $AKSNAME -ApiServerAccessAuthorizedIpRange '$CURRENT_IP/24,73.140.245.0/24'
Note
上記の例では、承認済みの範囲に別の IP アドレスを追加します。 「クラスターの、API サーバーの許可された IP 範囲を更新する」からの IP アドレスが引き続き含まれていることに注意してください。 既存の IP アドレスを含めない場合、このコマンドは認可された範囲に新しい IP アドレスを追加するのではなく、置き換えます。 許可された IP 範囲を無効にするには、az aks update
を使用し、空の範囲 "" を指定します。
もう 1 つの方法は、Windows システムで次のコマンドを使用して、パブリック IPv4 アドレスを取得することです。または、「IP アドレスを確認する」の手順に従うこともできます。
Invoke-RestMethod http://ipinfo.io/json | Select -exp ip
このアドレスは、インターネット ブラウザーで what is my IP address を検索しても確認できます。
API サーバーの許可された IP 範囲にサービス タグを使用する - (プレビュー)
サービス タグは、Kubernetes Service に対応する IP アドレスのグループを指定する便利な方法です。 サービス タグを使用すると、Kubernetes サービスの IP アドレスおよび API サーバーの許可された IP 範囲の特定の IP アドレスをコンマ区切りで指定できます。
制限事項
- この機能は、API サーバー VNet 統合とは互換性がありません。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
Azure CLI プレビュー拡張機能をインストールする
[az extension add][az-extension-add] コマンドを使用して Azure CLI プレビュー拡張機能をインストールします。
az extension add --name aks-preview
[az extension update][az-extension-update] コマンドを使用して、拡張機能を更新してバージョンが最新であることを確認します。
az extension update --name aks-preview
サービス タグの許可された IP 機能フラグを登録する
[az feature register][az-feature-register] コマンドを使用して EnableServiceTagAuthorizedIPPreview 機能フラグを登録します。
az feature register --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
登録が完了するまでに数分かかります。
[az feature show][az-feature-show] コマンドを使用して、登録を確認します。
az feature show --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
サービス タグの許可された IP 範囲を使用して AKS クラスターを作成する
--api-server-authorized-ip-ranges
パラメーターとサービス タグ AzureCloud
を使用して、サービス タグの許可された IP 範囲を持つクラスターを作成し、すべての Azure サービスが API サーバーにアクセスし、追加の IP アドレスを指定できるようにします。
Note
--api-server-authorized-ip-ranges
パラメーターで使用できるサービス タグは 1 つだけです。 複数のサービス タグを指定することはできません。
az aks create --resource-group myResourceGroup \
--name myAKSCluster \
--api-server-authorized-ip-ranges AzureCloud,20.20.20.20
AzureCloud
サービス タグの一部である Azure VM または Azure サービスから API サーバーを curl できる必要があります。
次のステップ
この記事では、API サーバーの許可された IP 範囲を有効にしました。 このアプローチは、AKS クラスターを安全に実行する方法の一部です。 詳細については、AKS でのアプリケーションとクラスターのセキュリティの概念に関するページおよび AKS でのクラスターのセキュリティとアップグレードのベスト プラクティスに関するページを参照してください。
Azure Kubernetes Service