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
    

    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 サブネットからファイアウォール サブネットへのトンネリングを強制している場合は、クラスター サブネット内にジャンプボックスがあってもかまいません。

  1. 次のコマンドを使用して IP アドレスを取得します。

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. 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 範囲を有効にしました。 このアプローチは、AKS クラスターを安全に実行する方法の一部です。 詳細については、AKS でのアプリケーションとクラスターのセキュリティの概念に関するページおよび AKS でのクラスターのセキュリティとアップグレードのベスト プラクティスに関するページを参照してください。