この記事では、初期デプロイ時または後で、AKS クラスターまたはノード プールで SSH アクセス (プレビュー) を構成する方法について説明します。
AKS では、クラスター ノードでの SSH アクセスを管理するための次の構成オプションがサポートされています。
- 無効な SSH: クラスター ノードへの SSH アクセスを完全に無効にしてセキュリティを強化する
-
Entra ID ベースの SSH: SSH 認証には Microsoft Entra ID 資格情報を使用します。 Entra ID ベースの SSH を使用する利点:
- 一元化された ID 管理: 既存の Entra ID ID を使用してクラスター ノードにアクセスする
- SSH キー管理なし: SSH キーを生成、配布、ローテーションする必要がなくなります
- セキュリティ強化: 条件付きアクセスや MFA などの Entra ID セキュリティ機能を活用する
- 監査とコンプライアンス: Entra ID ログを使用したアクセス イベントの一元的なログ記録
- Just-In-Time アクセス: Azure RBAC と組み合わせて詳細なアクセス制御を行う
- ローカル ユーザー SSH: ノード アクセスのための従来の SSH キーベースの認証
重要
AKS のプレビュー機能は、セルフサービスのオプトインに基づいて利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用は意図されていません。 詳細については、次のサポート記事を参照してください。
重要
AKS のプレビュー機能は、セルフサービスのオプトインに基づいて利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用は意図されていません。 詳細については、次のサポート記事を参照してください。
[前提条件]
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
この記事では、Azure CLI のバージョン 2.61.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
aks-previewバージョン 9.0.0b1 以降が必要です。-
aks-preview拡張機能がまだない場合は、az extension addコマンドを使用してインストールします。az extension add --name aks-preview -
aks-preview拡張機能が既にある場合は、az extension updateコマンドを使用して最新バージョンがインストールされていることを確認するように更新します。az extension update --name aks-preview
-
DisableSSHPreviewコマンドを使用して、az feature register機能フラグを登録します。az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"状態が [登録済み] と表示されるまでに数分かかります。
az feature showコマンドを使用して、登録の状態を確認します。az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"状態が Registered と表示されたら、 コマンドを使用して
az provider registerリソース プロバイダーの登録を最新の情報に更新します。az provider register --namespace Microsoft.ContainerService
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
この記事では、Azure CLI のバージョン 2.73.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
Entra ID SSH
aks-previewバージョン 19.0.0b7 以降が必要です。-
aks-preview拡張機能がまだない場合は、az extension addコマンドを使用してインストールします。az extension add --name aks-preview -
aks-preview拡張機能が既にある場合は、az extension updateコマンドを使用して最新バージョンがインストールされていることを確認するように更新します。az extension update --name aks-preview
-
ノードにアクセスするための適切な Azure RBAC アクセス許可:
-
必要なアクション:
Microsoft.Compute/virtualMachineScaleSets/*/read- 仮想マシン スケール セットの情報を読み取る-
必要なデータ アクション:
-
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/login/action- 通常のユーザーとして VM に認証してログインします。 -
Microsoft.Compute/virtualMachines/loginAsAdmin/action- ルート ユーザー特権を使用してログインします。
-
- 組み込みロール: 仮想マシン管理者ログイン または 仮想マシン ユーザー ログイン (管理者以外のアクセスの場合)
-
必要なデータ アクション:
-
必要なアクション:
EntraIdSSHPreviewコマンドを使用して、az feature register機能フラグを登録します。az feature register --namespace "Microsoft.ContainerService" --name "EntraIdSSHPreview"状態が [登録済み] と表示されるまでに数分かかります。
az feature showコマンドを使用して、登録の状態を確認します。az feature show --namespace "Microsoft.ContainerService" --name "EntraIdSSHPreview"状態が Registered と表示されたら、 コマンドを使用して
az provider registerリソース プロバイダーの登録を最新の情報に更新します。az provider register --namespace Microsoft.ContainerService
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
- この記事では、Azure CLI のバージョン 2.61.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
- nodepools
aks-previewSSH アクセス方法を更新するには、バージョン 9.0.0b1 以降が必要です。-
aks-preview拡張機能がまだない場合は、az extension addコマンドを使用してインストールします。az extension add --name aks-preview -
aks-preview拡張機能が既にある場合は、az extension updateコマンドを使用して最新バージョンがインストールされていることを確認するように更新します。az extension update --name aks-preview
-
環境変数の設定
リソース グループ、クラスター名、および場所に次の環境変数を設定します。
export RESOURCE_GROUP="<your-resource-group-name>"
export CLUSTER_NAME="<your-cluster-name>"
export LOCATION="<your-azure-region>"
制限事項
- ノードへの Entra ID SSH は、Windows ノード プールではまだ使用できません。
- ノードへの Entra ID SSH は、ノード リソース グループのロックダウン によってロールの割り当てが妨げられないため、AKS の自動ではサポートされていません。
SSH アクセスの構成
セキュリティを強化し、企業のセキュリティ要件または戦略をサポートするために、AKS では、クラスターとノード プール レベルの両方で SSH を無効にできます。 SSH を無効にすると、AKS サブネット/ノード ネットワーク インターフェイス カード (NIC) で ネットワーク セキュリティ グループ規則 を構成する場合と比較して、簡略化されたアプローチが導入されます。 SSH を無効にすると、Virtual Machine Scale Sets ノード プールのみがサポートされます。
クラスターの作成時に SSH を無効にすると、クラスターの作成後に有効になります。 一方、既存のクラスターまたはノード プールで SSH を無効にすると、AKS は SSH を自動的に無効にしません。 いつでもノード プールのアップグレード操作を選んで実行できます。 ノード イメージの更新が完了すると、SSH の無効化/有効化操作が有効になります。
注
SSH は、クラスター レベルで無効にすると、既存のすべてのノード プールに適用されます。 この操作の後に作成されたすべてのノード プールでは、既定で SSH が有効になります。無効にするには、これらのコマンドをもう一度実行する必要があります。
注
kubectl debug node は、SSH サービスに依存しないため、SSH を無効にした後も引き続き動作します。
リソース グループを作成する
az group create コマンドを使用してリソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
新しいクラスターのデプロイで SSH を無効にする
既定では、AKS クラスター ノードの SSH サービスは、クラスター上のすべてのユーザーと実行されているポッドに対して開かれています。 ポッド内のコンテナーが侵害された場合に攻撃ベクトルを制限するため、任意のネットワークからクラスター ノードへの直接 SSH アクセスを禁止できます。
az aks create コマンドを使って新しいクラスターを作成するときに、すべてのノード プールで SSH を無効にする (プレビュー) には、--ssh-access disabled 引数を指定します。
重要
SSH サービスを無効にした後は、クラスターに SSH 接続して管理タスクを実行したり、トラブルシューティングを行ったりすることはできません。
注
新しく作成されたクラスターでは、SSH を無効にすると、最初のシステム ノード プールのみが構成されます。 他のすべてのノード プールは、ノード プール レベルで構成する必要があります。
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --ssh-access disabled
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
新しいノード プールで SSH を無効にする
az aks nodepool add コマンドを使ってノード プールを追加し、ノード プールの作成時に SSH を無効にするには、--ssh-access disabled 引数を指定します。
az aks nodepool add \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access disabled
数分後、コマンドが完了し、mynodepool が正常に作成されたことを示すクラスターに関する情報が、JSON 形式で返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
既存のノード プールで SSH を無効にする
重要
AKS のプレビュー機能は、セルフサービスのオプトインに基づいて利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用は意図されていません。 詳細については、次のサポート記事を参照してください。
既存のノード プールで SSH (プレビュー) を無効にするには、az aks nodepool update引数と共に --ssh-access disabled コマンドを使用します。
az aks nodepool update \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access disabled
数分後、コマンドが完了し、 mynodepool が正常に更新されたことを示すクラスターに関する JSON 形式の情報が返されます。 SSH の無効化に関連する出力と結果は次の例のようになります。
"securityProfile": {
"sshAccess": "Disabled"
},
変更を有効にするには、az aks nodepool upgrade コマンドを使って、ノード プールを再イメージ化する必要があります。
az aks nodepool upgrade \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--node-image-only
重要
既存のクラスターで SSH を無効にするには、このクラスターの各ノード プールで SSH を無効にする必要があります。
SSH アクセスを再び有効にする
ノード プールで SSH アクセスを再度有効にするには、 --ssh-access localuser (従来の SSH キーベースのアクセスの場合) または --ssh-access entraid (Entra ID ベースのアクセスの場合) でノード プールを更新します。 詳細な手順については、それぞれのセクションを参照してください。
クラスター ノードへの SSH 認証に Microsoft Entra ID (旧称 Azure AD) を使用するように AKS クラスターを構成できます。 これにより、SSH キーを管理する必要がなくなり、Entra ID 資格情報を使用してノードに安全にアクセスできます。
リソース グループを作成する
az group create コマンドを使用してリソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
新しいクラスターで Entra ID ベースの SSH を有効にする
クラスターの作成時に Entra ID ベースの SSH 認証を有効にするには、az aks create引数と共に --ssh-access entraid コマンドを使用します。
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--ssh-access entraid
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 次の例は出力のようになります。
"securityProfile": {
"sshAccess": "EntraID"
},
新しいノード プールに対して Entra ID ベースの SSH を有効にする
ノード プールの作成時に Entra ID ベースの SSH を有効にするには、az aks nodepool add引数と共に --ssh-access entraid コマンドを使用します。
az aks nodepool add \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access entraid
数分後、コマンドは完了し、 mynodepool が Entra ID ベースの SSH で正常に作成されたことを示す JSON 形式の情報を返します。 次の例は出力のようになります。
"securityProfile": {
"sshAccess": "EntraID"
},
既存のノード プールに対して Entra ID ベースの SSH を有効にする
az aks nodepool update コマンドを --ssh-access entraid 引数と共に使用して、既存のノード プールで SSH ベースの Entra ID を有効にします。
az aks nodepool update \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access entraid
数分後、コマンドは完了し、 mynodepool が Entra ID ベースの SSH で正常に更新されたことを示す JSON 形式の情報を返します。 以下の例は出力結果と類似しています。
"securityProfile": {
"sshAccess": "EntraID"
},
変更を有効にするには、az aks nodepool upgrade コマンドを使って、ノード プールを再イメージ化する必要があります。
az aks nodepool upgrade \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--node-image-only
重要
既存のクラスターで Entra ID ベースの SSH を有効にするには、ノード プールごとに個別に有効にする必要があります。
ローカル ユーザーの SSH アクセスでは、従来の SSH キーベースの認証が使用されます。 これは、AKS クラスターの既定の SSH アクセス方法です。
リソース グループを作成する
az group create コマンドを使用してリソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
SSH キーを使用して AKS クラスターを作成する
az aks create コマンドを使用して、SSH 公開キーで AKS クラスターをデプロイします。
--ssh-key-value引数を使用してキーまたはキー ファイルを指定するか、--ssh-access localuserを使用してローカル ユーザーの SSH アクセスを明示的に設定できます。
| 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 |
--ssh-access localuser |
キーベースの認証を使用してローカル ユーザーの SSH アクセスを明示的に有効にします。 | |
--no-ssh-key |
SSH キーが必要ない場合は、この引数を指定します。 ただし、Azure 仮想マシン リソースの依存関係では空の SSH キー ファイルはサポートされていないため、AKS によって SSH キーのセットが自動的に生成されます。 その結果、キーは返されず、ノード VM への SSH 接続には使用できません。 秘密キーは破棄され、保存されません。 |
注
パラメーターを指定しないと、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 $CLUSTER_NAME --resource-group $RESOURCE_GROUP --generate-ssh-keySSH 公開キー ファイルを指定するには:
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pubローカル ユーザーの SSH アクセスを明示的に有効にするには:
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-access localuser --generate-ssh-key
新しいノード プールに対してローカル ユーザー SSH を有効にする
ノード プールの作成時にローカル ユーザー SSH を有効にするには、az aks nodepool add引数と共に --ssh-access localuser コマンドを使用します。
az aks nodepool add \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access localuser
既存のノード プールに対してローカル ユーザー SSH を有効にする
重要
AKS のプレビュー機能は、セルフサービスのオプトインに基づいて利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用は意図されていません。 詳細については、次のサポート記事を参照してください。
既存のノード プールでローカル ユーザー SSH を有効にするには、az aks nodepool update引数と共に --ssh-access localuser コマンドを使用します。
az aks nodepool update \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--ssh-access localuser
重要
変更を有効にするには、az aks nodepool upgrade コマンドを使って、ノード プールを再イメージ化する必要があります。
az aks nodepool upgrade \
--cluster-name $CLUSTER_NAME \
--name mynodepool \
--resource-group $RESOURCE_GROUP \
--node-image-only
既存の AKS クラスターで SSH 公開キーを更新する
クラスターで SSH 公開キー (プレビュー) を更新するには、az aks update コマンドを使います。 この操作により、すべてのノード プールでキーが更新されます。
--ssh-key-value 引数を使って、キーまたはキー ファイルを指定できます。
注
SSH キーの更新は、AKS クラスターを使用した Azure 仮想マシン スケール セットでサポートされています。
例:
新しい SSH 公開キーの値を指定するには:
az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'SSH 公開キー ファイルを指定するには:
az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pub
重要
SSH キーを更新した後、AKS はノード プールの更新を自動実行しません。 ノードプールのアップグレード操作はいつでも実行できます。 SSH キーの更新操作は、ノード イメージの更新が完了した後で有効になります。 ノードの自動プロビジョニングが有効になっているクラスターの場合、Kubernetes NodePool カスタム リソースに新しいラベルを適用することで、ノード イメージの更新を実行できます。
SSH サービスの状態を確認する
SSH を無効にした後、クラスター ノードで SSH サービスが非アクティブであることを確認できます。
SSH サービスの状態を確認するには、仮想マシン スケール セット az vmss run-command invoke コマンドを使用します。
az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"
次の出力例は、SSH が無効になっている場合の予想される結果を示しています。
{
"value": [
{
"code": "ProvisioningState/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "Enable succeeded: \n[stdout]\n○ ssh.service - OpenBSD Secure Shell server\n Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)\n Active: inactive (dead) since Wed 2024-01-03 15:36:53 UTC; 25min ago\n..."
}
]
}
"アクティブ" という単語を検索し、その値がActive: inactive (dead)されていることを確認します。これは、ノードで SSH が無効になっていることを確認します。
Entra ID ベースの SSH を有効にした後、SSH サービスがアクティブであり、クラスター ノードで Entra ID 認証用に構成されていることを確認できます。
SSH サービスの状態を確認するには、仮想マシン スケール セット az vmss run-command invoke コマンドを使用します。
az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"
次の出力例は、SSH が有効になっている場合の予想される結果を示しています。
{
"value": [
{
"code": "ProvisioningState/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
}
]
}
"アクティブ" という単語を検索し、その値がActive: active (running)されていることを確認します。これは、ノードで SSH が有効になっていることを確認します。
ローカル ユーザー SSH を構成した後、クラスター ノードで SSH サービスがアクティブになっていることを確認できます。
SSH サービスの状態を確認するには、仮想マシン スケール セット az vmss run-command invoke コマンドを使用します。
az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"
次の出力例は、SSH が有効になっている場合の予想される結果を示しています。
{
"value": [
{
"code": "ProvisioningState/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
}
]
}
"アクティブ" という単語を検索し、その値がActive: active (running)されていることを確認します。これは、ノードで SSH が有効になっていることを確認します。
次のステップ
クラスター ノードへの SSH 接続に関する問題のトラブルシューティングに役立つには、kubelet ログを表示するか、Kubernetes マスター ノード ログを表示できます。
Azure Kubernetes Service