その悩みを解消するのが、AzureのEntra ID(旧称 Azure Active Directory)を使ったSSH認証です。個人の公開鍵を各VMに配置する代わりに、組織のアカウントでそのままSSH接続できます。
この記事では、az ssh拡張機能を使ってEntra ID認証でLinux VMにパスワードレスSSH接続する方法を、実際のazコマンドの出力例を交えながら解説します。従来のSSH鍵管理との違いや、AWSのSystems Manager Session Managerとの比較も含めて実践的にまとめました。
動作確認環境: Ubuntu 24.04 LTS(Azure Linux VM)・Azure CLI 2.63.0・2026年9月時点
この記事のポイント
・AADLoginForLinux拡張機能をVMにインストールするだけで設定が完了する
・az ssh vm コマンドで証明書は自動発行されるため鍵ファイルの管理が不要
・アクセスはAzure RBACロール(Virtual Machine User Login)で制御できる
・AWSのSSM Session Managerと異なり、標準SSHプロトコルが使えるのが強み
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Azure Entra ID SSH認証とは何か、なぜ使うのか
従来のAzure Linux VMへのSSH接続は、公開鍵認証かパスワード認証が主流でした。公開鍵認証は安全ですが、チームで運用すると以下の問題が発生しがちです。・VMごとに
~/.ssh/authorized_keys を管理する必要がある・メンバーが増えるたびに公開鍵の配布が必要になる
・退職者の公開鍵を漏れなく削除できているか確認が難しい
Entra ID SSH認証はこれらを解消します。AzureのIDaaS(Entra ID)を認証基盤として使うため、ユーザーのEntra IDアカウントが無効化されれば、VMへのSSHアクセスも即座に停止されます。権限の集中管理がRBACで完結し、「誰がどのVMにアクセスできるか」をAzureポータルやazコマンドから一元管理できます。
前提条件と設定の全体像
Entra ID SSH認証を使うために必要なものを確認しておきます。・Azureサブスクリプション(所有者またはContributor権限)
・接続先のLinux VM(Ubuntu 20.04以上、または RHEL8以上)
・Azure CLI 2.54.0以上(az ssh 拡張機能をサポートするバージョン)
・接続するユーザーがEntra IDのメンバーであること
設定の流れは以下の3ステップです。
1. AADLoginForLinux拡張機能を有効にしたLinux VMを作成する(または既存VMに拡張機能を追加する)
2. 接続するユーザーにRBACロールを割り当てる
3. az ssh vm コマンドで接続する
AWSのSSM Session Managerと異なり、Entra ID SSHは標準のSSHプロトコルをそのまま使います。そのため、scp・sftp・port forwarding(SSHトンネル)も通常どおり動作します。
Entra ID対応Linux VMの作成と拡張機能インストール
1. AADLoginForLinux拡張機能を有効にしたVMを作成する
VM作成時に--assign-identity フラグと拡張機能を同時に設定するのが最も簡単です。# リソースグループの作成 az group create --name rg-entra-ssh-demo --location japaneast # Entra ID認証対応のLinux VMを作成 az vm create --resource-group rg-entra-ssh-demo --name vm-entra-demo --image Ubuntu2404 --assign-identity --admin-username azureuser --generate-ssh-keys --size Standard_B2s # AADLoginForLinux拡張機能を追加 az vm extension set --publisher Microsoft.Azure.ActiveDirectory --name AADSSHLoginForLinux --resource-group rg-entra-ssh-demo --vm-name vm-entra-demo
{ "autoUpgradeMinorVersion": true, "name": "AADSSHLoginForLinux", "provisioningState": "Succeeded", "publisher": "Microsoft.Azure.ActiveDirectory", "type": "AADSSHLoginForLinux", "typeHandlerVersion": "1.0" }
--assign-identity はSystem Assigned Managed Identityを有効にするオプションです。Entra ID認証にはVMのManaged IdentityがEntra IDと通信するために必要です。既存VMに後から拡張機能を追加する場合も同じ
az vm extension set コマンドで実行できます。ただし、Managed Identityが未設定の既存VMには az vm identity assign を先に実行してください。2. RBACロールをユーザーに割り当てる
拡張機能を入れるだけではSSHできません。接続するユーザーに対して、VM単位でRBACロールを割り当てる必要があります。・Virtual Machine User Login: 一般ユーザーとしてSSH接続できる
・Virtual Machine Administrator Login: sudo権限ありでSSH接続できる
まずVMのリソースIDを取得します。
VM_RESOURCE_ID=$(az vm show --resource-group rg-entra-ssh-demo --name vm-entra-demo --query id --output tsv) echo $VM_RESOURCE_ID # /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-entra-ssh-demo/providers/Microsoft.Compute/virtualMachines/vm-entra-demo
# サインイン中のユーザーのオブジェクトIDを取得 MY_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv) # Virtual Machine User Loginロールを割り当て az role assignment create --role "Virtual Machine User Login" --assignee-object-id $MY_OBJECT_ID --assignee-principal-type User --scope $VM_RESOURCE_ID
{ "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "principalType": "User", "roleDefinitionId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/fb879df8-f326-4884-b1cf-06f3ad86be52", "roleDefinitionName": "Virtual Machine User Login", "scope": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-entra-ssh-demo/providers/Microsoft.Compute/virtualMachines/vm-entra-demo" }
Azure対応セミナーの詳細を見る >>
az sshコマンドでLinux VMにSSH接続する
1. az sshの拡張機能をインストールする
az ssh コマンドはAzure CLIの拡張機能として提供されています。未インストールの場合は以下で追加します。az extension add --name ssh
The installed extension 'ssh' is in preview.
az ssh --help でオプションを確認できます。2. az ssh vmで接続する
接続はaz ssh vm コマンド1行で実行できます。証明書はAzureが自動で発行するため、ローカルに鍵ファイルを用意する必要はありません。az ssh vm --resource-group rg-entra-ssh-demo --vm-name vm-entra-demo
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-1021-azure x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com Last login: Thu Sep 25 12:34:56 2026 from 203.0.113.xxx azureuser@vm-entra-demo:~$
az login で事前にサインイン済みの場合は認証ダイアログなしでそのままSSH接続できます。3. 接続ユーザー名とホームディレクトリを確認する
Entra ID認証で接続した場合、ユーザー名は組織のUPN(User Principal Name)をもとに自動生成されます。# 接続後のシェルで実行 whoami # azureuser(または UPNベースの変換されたユーザー名) id # uid=1001(azureuser) gid=1001(azureuser) groups=1001(azureuser),4(adm),27(sudo) echo $HOME # /home/azureuser
Virtual Machine Administrator Login ロールを割り当てたユーザーは、追加設定なしで sudo が使えます。Virtual Machine User Login のユーザーは sudo が制限されており、管理作業が必要な場合は追加で権限を付与するか、RBACロールを変更してください。AWS Systems Manager Session Managerとの比較
AWSにも踏み台レスでEC2にアクセスする仕組みがあります。AzureのEntra ID SSHとAWSのSSM Session Managerを機能面で比較します。| 比較項目 | Azure Entra ID SSH | AWS SSM Session Manager |
|---|---|---|
| 使用プロトコル | 標準SSH(ポート22) | HTTPS経由の独自プロトコル |
| scp・sftp・ポート転送 | 利用可能 | SSH Plugin経由でSSHトンネルは可能 |
| 認証基盤 | Entra ID(Azure AD) | IAM(ポリシーベース) |
| クライアントの要件 | Azure CLI + az ssh拡張機能 | AWS CLI + Session Manager Plugin |
| 接続先VMのエージェント | AADSSHLoginForLinux拡張機能 | SSM Agent(Amazon Linuxは標準搭載) |
| パブリックIPなし接続 | Bastionとの組み合わせが必要 | VPC Endpointがあれば単独で可能 |
| セッション記録・監査 | Azure Monitor・Entra IDの監査ログ | CloudWatch Logs・S3への自動記録 |
一方、SSM Session Managerはポート22を閉じたままインターネット経由でアクセスできる点で優れており、VPCのNetwork ACLにSSHの穴を開けたくないセキュリティポリシーにも対応しやすい設計です。
どちらを選ぶかは組織のセキュリティポリシーと既存ツールへの依存度次第ですが、Azureを主軸に使うチームでは、Entra IDに統合できるEntra ID SSHの方が権限管理の一元化という観点で使いやすいケースが多いです。
よくあるトラブルと対処法
「az ssh vm でSSHに失敗する」場合
エラーメッセージに403 Forbidden や Principal does not have access to VM が含まれる場合は、RBACロールの割り当てが完了していないか、反映に時間がかかっています。# ロール割り当てが完了しているか確認 az role assignment list --scope $VM_RESOURCE_ID --query "[?roleDefinitionName=='Virtual Machine User Login']" --output table
Principal RoleDefinitionName Scope ------------------------------------ -------------------------- ------- xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Virtual Machine User Login /subscriptions/...
az vm get-instance-view で確認してください。az vm get-instance-view --resource-group rg-entra-ssh-demo --name vm-entra-demo --query "instanceView.extensions[?name=='AADSSHLoginForLinux'].statuses"
ProvisioningState/succeeded が返れば拡張機能は正常にインストール済みです。failed が返る場合はVMを再起動してから再度試してください。「NSGでポート22が閉じている」場合
Entra ID SSHは標準のSSHポート(22番)を使います。NSGで22番ポートを閉じている環境では接続できません。# NSGの受信ルールを確認 az network nsg rule list --resource-group rg-entra-ssh-demo --nsg-name vm-entra-demoNSG --output table --query "[?destinationPortRange=='22' || destinationPortRange=='*']"
本記事のまとめ
AzureのEntra ID認証でLinux VMにSSHログインする手順を解説しました。| 操作 | azコマンド |
|---|---|
| AADSSHLoginForLinux拡張機能をインストールする | az vm extension set --publisher Microsoft.Azure.ActiveDirectory --name AADSSHLoginForLinux |
| VMのリソースIDを取得する | az vm show --query id --output tsv |
| ユーザーにRBACロールを割り当てる | az role assignment create --role "Virtual Machine User Login" --scope VM_RESOURCE_ID |
| az ssh拡張機能をインストールする | az extension add --name ssh |
| Entra ID認証でSSH接続する | az ssh vm --resource-group RG名 --vm-name VM名 |
Azure対応セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AzureのLinux VMでブート診断とシリアルコンソールを使う方法|SSH接続不能時の緊急アクセスと起動ログ確認の実践
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます