Azure Kubernetes Service (AKS) で許可された IP アドレス範囲を使用して API サーバーへのアクセスをセキュリティで保護する

この記事では、API サーバーで承認された IP アドレス範囲を使用して、Azure Kubernetes Service (AKS) ワークロードのコントロール プレーン エンドポイントにアクセスできる IP アドレスと CIDR を制限する方法について説明します。

[前提条件]

  • バージョン 2.0.76 以降をAzure CLIします。 バージョンを確認するには、 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 プレフィックスを使用する必要があります。 これらのプレフィックスを承認済みの範囲として追加します。
  • 最大 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 分待ちます。

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.88137.117.106.95できるようにするには、137.117.106.88/29を指定します。

--api-server-authorized-ip-ranges パラメーターを指定して az aks create コマンドを使用して、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
  1. Azure portal のホーム ページから、[リソースの作成]>[コンテナー]>[Azure Kubernetes Service (AKS)] の順に選択します。
  2. 必要に応じてクラスター設定を構成します。
  3. [パブリック アクセス][ネットワーク] セクションで、[許可された IP 範囲の設定] を選択します。
  4. [IP 範囲の指定] に、API サーバーへのアクセスを許可する IP アドレス範囲を入力します。
  5. 必要に応じて、クラスター設定の残りの部分を構成します。
  6. 準備ができたら、[確認と作成]>[作成] を選択してクラスターを作成します。

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
  1. Azure portal のホーム ページから、[リソースの作成]>[コンテナー]>[Azure Kubernetes Service (AKS)] の順に選択します。
  2. 必要に応じてクラスター設定を構成します。
  3. [パブリック アクセス][ネットワーク] セクションで、[許可された IP 範囲の設定] を選択します。
  4. [ IP 範囲の指定] に「 0.0.0.0/32」と入力します。 この設定では、Standard SKU ロード バランサーの送信パブリック IP のみが許可されます。
  5. 必要に応じて、クラスター設定の残りの部分を構成します。
  6. 準備ができたら、[確認と作成]>[作成] を選択してクラスターを作成します。

既存のクラスターで 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 アドレス範囲を許可するには、それらをコンマで区切ります。

--api-server-authorized-ip-ranges パラメーターと共に az aks update コマンドを使用して、複数の 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 範囲を更新するには、-ApiServerAccessAuthorizedIpRange パラメーターと共に Set-AzAksCluster コマンドレットを使用します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスターに対して、承認された範囲を73.140.245.0/24に設定します。

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange '73.140.245.0/24'
  1. Azure portal に移動し、更新する AKS クラスターを選択します。
  2. サービス メニューの [設定] で [ ネットワーク] を選択します。
  3. [リソース設定] で、[管理] を選択します。
  4. [許可された IP 範囲] ページで、必要に応じて [許可された IP 範囲] を更新します。
  5. 終了したら、 [保存] を選択します。

既存のクラスターで 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 ''
  1. Azure portal に移動し、更新する AKS クラスターを選択します。
  2. サービス メニューの [設定] で [ ネットワーク] を選択します。
  3. [リソース設定] で、[管理] を選択します。
  4. [許可された IP 範囲] ページで、[許可された IP 範囲の設定] チェック ボックスをオフにします。
  5. [保存] を選択します。

既存の API サーバーの承認された IP 範囲を検索する

既存の API サーバーの承認された IP 範囲を検索するには、--query パラメーターを apiServerAccessProfile.authorizedIpRanges に設定して az aks show コマンドを使用します。

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}
...
  1. Azure portal に移動し、AKS クラスターを選択します。

  2. サービス メニューの [設定] で [ ネットワーク] を選択します。

    [ネットワーク] ページの [リソース設定] セクションには、現在構成されている承認済み IP 範囲が表示されます。

    Azure ポータルの [リソース設定] の下の承認された IP 範囲を示すスクリーンショット。

開発用コンピューター、ツール、または自動化から API サーバーにアクセスする

開発用コンピューター、ツール、またはオートメーション システムから API サーバーにアクセスするには、そのパブリック IP アドレスをクラスターの承認された IP 範囲に追加します。

または、ファイアウォールの仮想ネットワーク内の別のサブネットに必要なツールを使用してジャンプボックスを構成し、承認された範囲にファイアウォールの IP アドレスを追加します。 AKS クラスター サブネットでファイアウォール経由の強制トンネリングが使用されている場合は、代わりにそのジャンプボックスを AKS クラスター サブネットに配置できます。

次の例では、既存の承認された範囲を保持し、別の IP アドレスを追加します。 既存の IP アドレスを省略すると、コマンドによって新しい範囲に置き換えられます。

  1. 次のコマンドを実行して IP アドレスを取得し、環境変数として設定します。

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. --api-server-authorized-ip-ranges パラメーターと共に az aks update コマンドを使用して、承認された範囲に 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
    
  1. 次のコマンドを実行して IP アドレスを取得し、環境変数として設定します。

    # Retrieve your IP address
    $CURRENT_IP = (Invoke-RestMethod -Uri 'https://ipinfo.io/json').ip
    
  2. -ApiServerAccessAuthorizedIpRange パラメーターと共に Set-AzAksCluster コマンドレットを使用して、承認された範囲に IP アドレスを追加します。 次の例では、myResourceGroup という名前のリソース グループ内の myAKSCluster という名前のクラスター上の既存の範囲に現在の IP アドレスを追加します。

    Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange "$CURRENT_IP/32", '73.140.245.0/24'
    

IP アドレスを識別する別の方法については、Web ブラウザーで 「IP アドレスを見つける か、 自分の IP アドレス を検索する」を参照してください。

AKS のセキュリティの詳細については、次の記事を参照してください。