Azure Kubernetes Service (AKS) ノードへのセキュリティで保護されたアクセスのために SSH を管理する
この記事では、初期デプロイの間に、または後から、AKS クラスターまたはノード プールで SSH キー (プレビュー) を構成する方法について説明します。
AKS では、クラスター ノードで SSH キーを管理するための次の構成オプションがサポートされています。
- SSH キーを使ってクラスターを作成する
- 既存の AKS クラスターで SSH キーを更新する
- SSH サービスを無効にして有効にする
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
開始する前に
- Update を使うには、
aks-preview
バージョン 0.5.116 以降が必要です。 - Disable を使うには、
aks-preview
バージョン 1.0.0b6 以降が必要です。 - Create および Update SSH 機能では、既存のクラスター上の Linux、Windows、Azure Linux のノード プールがサポートされています。
- Disable SSH 機能は、Windows Server オペレーティング システムを実行するノード プール上のこのプレビュー リリースではサポートされていません。
aks-preview
Azure CLI 拡張機能をインストールする
az extension add
コマンドを使用して aks-preview 拡張機能をインストールします。az extension add --name aks-preview
az extension update
コマンドを使って拡張機能の最新バージョンに更新します。az extension update --name aks-preview
DisableSSHPreview
機能フラグを登録する
Disable SSH 機能を使うには、次の手順のようにして、サブスクリプションでそれを登録して有効にします。
az feature register
コマンドを使用して、DisableSSHPreview
機能フラグを登録します。az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
状態が [登録済み] と表示されるまでに数分かかります。
az feature show
コマンドを使用して、登録の状態を確認します。az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
状態が Registered と表示されたら、
az provider register
コマンドを使用して Microsoft.ContainerService リソース プロバイダーの登録を最新の情報に更新します。az provider register --namespace Microsoft.ContainerService
SSH キーを使用して AKS クラスターを作成する
az aks create コマンドを使用して、SSH 公開キーで AKS クラスターをデプロイします。 --ssh-key-value
引数を使用して、キーまたはキー ファイルを指定できます。
SSH パラメーター | 説明 | 規定値 |
---|---|---|
--generate-ssh-key |
独自の SSH キーがない場合は、--generate-ssh-key を指定します。 Azure CLI によって SSH キーのセットが自動的に生成されて、既定のディレクトリ ~/.ssh/ に保存されます。 |
|
--ssh-key-value | SSH アクセス用にノード VM にインストールする公開キー パスまたはキーの内容。 たとえば、ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm のようにします。 |
~/.ssh/id_rsa.pub |
--no-ssh-key |
SSH キーが必要ない場合は、この引数を指定します。 ただし、Azure 仮想マシン リソースの依存関係では空の SSH キー ファイルはサポートされていないため、AKS によって SSH キーのセットが自動的に生成されます。 その結果、キーは返されず、ノード VM への SSH 接続には使用できません。 秘密キーは破棄され、保存されません。 |
Note
パラメーターを指定しないと、Azure CLI は既定で、~/.ssh/id_rsa.pub
ファイルに格納されている SSH キーを参照します。 キーが見つからない場合、コマンドは An RSA key file or key value must be supplied to SSH Key Value
というメッセージを返します。
このコマンドの例を次に示します。
クラスターを作成し、既定で生成された SSH キーを使用するには:
az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
SSH 公開キー ファイルを指定するには、
--ssh-key-value
引数を含めます。az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
既存の AKS クラスターで SSH 公開キーを更新する
クラスターで SSH 公開キー (プレビュー) を更新するには、az aks update
コマンドを使います。 この操作により、すべてのノード プールでキーが更新されます。 --ssh-key-value
引数を使って、キーまたはキー ファイルを指定できます。
Note
SSH キーの更新は、AKS クラスターを使用した Azure 仮想マシン スケール セットでサポートされています。
このコマンドの例を次に示します。
新しい SSH 公開キー値を指定するには、
--ssh-key-value
引数を含めてください:az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
SSH 公開キー ファイルを指定するには、
--ssh-key-value
引数を使って指定します。az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
重要
SSH キーを更新した後、AKS はノード プールの更新を自動実行しません。 いつでもノード プール更新操作を選んで実行できます。 SSH キーの更新操作は、ノード イメージの更新が完了した後で有効になります。
SSH の無効化の概要
セキュリティを強化し、企業のセキュリティ要件または戦略をサポートするため、AKS ではクラスターとノード プール レベルの両方で SSH の無効化 (プレビュー) がサポートされています。 サポートされている唯一のソリューションでは、AKS のサブネットとノードのネットワーク インターフェイス カード (NIC) でネットワーク セキュリティ グループ規則を構成する必要がありますが、それと比較して、SSH の無効化では簡略化されたアプローチが導入されます。 SSH を無効にすると、Virtual Machine Scale Sets ノード プールのみがサポートされます。
クラスターの作成時に SSH を無効にすると、クラスターの作成後に有効になります。 一方、既存のクラスターまたはノード プールで SSH を無効にすると、AKS は SSH を自動的に無効にしません。 いつでもノード プールのアップグレード操作を選んで実行できます。 SSH キーの無効化と有効化の操作は、ノード イメージの更新が完了した後で有効になります。
Note
SSH は、クラスター レベルで無効にすると、既存のすべてのノード プールに適用されます。 この操作の後に作成されたすべてのノード プールでは、既定で SSH が有効になります。無効にするには、これらのコマンドをもう一度実行する必要があります。
SSH パラメーター | 説明 |
---|---|
disabled |
SSH サービスが無効にされます。 |
localuser |
SSH サービスが有効にされ、SSH キーを持つユーザーはノードに安全にアクセスできます。 |
Note
kubectl debug node は、SSH サービスに依存しないため、SSH を無効にした後も引き続き動作します。
新しいクラスターのデプロイで SSH を無効にする
既定では、AKS クラスター ノードの SSH サービスは、クラスター上のすべてのユーザーと実行されているポッドに対して開かれています。 ポッド内のコンテナーが侵害された場合に攻撃ベクトルを制限するため、任意のネットワークからクラスター ノードへの直接 SSH アクセスを禁止できます。
az aks create
コマンドを使って新しいクラスターを作成するときに、すべてのノード プールで SSH を無効にする (プレビュー) には、--ssh-access disabled
引数を指定します。
重要
SSH サービスを無効にした後は、クラスターに SSH 接続して管理タスクを実行したり、トラブルシューティングを行ったりすることはできません。
Note
新しく作成されたクラスターで、ssh の無効化によって構成が行われるのは、最初のシステム ノードプールだけです。 他のすべてのノードプールは、ノードプール レベルで構成する必要があります。
az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
既存のクラスターで SSH を無効にする
az aks update
コマンドを使って既存のクラスターを更新するときに、クラスターのすべてのノード プールで SSH を無効にする (プレビュー) には、--ssh-access disabled
引数を指定します。
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
変更を有効にするには、az aks nodepool upgrade
コマンドを使って、すべてのノード プールを再イメージ化する必要があります。
az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only
重要
この操作中に、すべての仮想マシン スケール セット インスタンスがアップグレードされ、再イメージ化されて新しい SSH 構成を使うようになります。
新しいノード プールで SSH を無効にする
az aks nodepool add
コマンドを使ってノード プールを追加し、ノード プールの作成時に SSH を無効にするには、--ssh-access disabled
引数を指定します。
az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
数分後、コマンドが完了し、mynodepool が正常に作成されたことを示すクラスターに関する情報が、JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
既存のノード プールで SSH を無効にする
既存のノード プールで SSH を無効にする (プレビュー) には、[az aks nodepool update][az-aks-nodepool-update] command with the
--ssh-access disabled` 引数を使います。
az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
数分後、コマンドが完了し、mynodepool が正常に作成されたことを示すクラスターに関する情報が、JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
変更を有効にするには、az aks nodepool upgrade
コマンドを使って、ノード プールを再イメージ化する必要があります。
az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only
既存のクラスターで SSH を再度有効にする
az aks update
コマンドを使って既存のクラスターを更新するときに、クラスターのすべてのノード プールで SSH を再度有効にする (プレビュー) には、--ssh-access localuser
引数を指定します。
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser
プロセスの実行中に、次のメッセージが返されます。
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."
SSH を再度有効にした後、ノードは自動的には再イメージ化されません。 いつでも再イメージ化操作を選んで実行できます。
重要
この操作中に、すべての仮想マシン スケール セット インスタンスがアップグレードされ、再イメージ化されて新しい SSH 公開キーを使うようになります。
特定のノード プールで SSH を再度有効にする
az aks update
コマンドを使って特定のノード プールを更新するときに、クラスターのそのノード プールで SSH を再度有効にする (プレビュー) には、--ssh-access localuser
引数を指定します。 次の例では、nodepool1 が対象のノード プールです。
az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser
プロセスの実行時に、次のメッセージが返されます。
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.
重要
この操作中に、すべての仮想マシン スケール セット インスタンスがアップグレードされ、再イメージ化されて新しい SSH 公開キーを使うようになります。
SSH サービスの状態
1 つのノードに対して node-shell を使用し、systemctl
を使って SSH サービスの状態を調べるには、次の手順のようにします。
kubectl node-shell <node>
コマンドを実行して、標準の bash シェルを取得します。kubectl node-shell aks-nodepool1-20785627-vmss000001
systemctl
コマンドを実行して、SSH サービスの状態を確認します。systemctl status ssh
次に示すのは、SSH が無効にされた場合の結果の出力例です。
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago
次に示すのは、SSH が有効にされた場合の結果の出力例です。
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago
次のステップ
クラスター ノードへの SSH 接続に関する問題のトラブルシューティングに役立つには、kubelet ログを表示するか、Kubernetes マスター ノード ログを表示できます。
Azure Kubernetes Service