Azure AD と OpenSSH を使用して Azure の Linux 仮想マシンにログインする
Azure の Linux 仮想マシン (VM) のセキュリティを強化するために、Azure Active Directory (Azure AD) の認証と統合できます。 コア認証プラットフォームと証明機関として Azure AD を使用して、Azure AD および OpenSSH 証明書ベースの認証によって Linux VM に SSH 接続できるようになりました。 この機能により、組織は、Azure ロールベースのアクセス制御 (RBAC) ポリシーと条件付きアクセス ポリシーを使用して、VM へのアクセスを管理できます。
この記事では、OpenSSH 証明書ベースの認証を使用した Azure AD で Linux VM を作成および構成し、ログインする方法について説明します。
OpenSSH 証明書ベースの認証による Azure AD を使用して、Azure の Linux VM にログインすることには、次のような多くのセキュリティ上の利点があります。 これには次のようなものがあります。
- Azure AD 資格情報を使用して、Azure Linux VM にログインします。
- SSH キーをユーザーに配布したり、デプロイする Azure Linux VM で SSH 公開キーをプロビジョニングしたりする必要なく、SSH キー ベースの認証を取得します。 このエクスペリエンスは、未認可のアクセスの原因となる可能性がある古い SSH 公開キーの無秩序な広がりについて心配しなければならないことよりもはるかに単純です。
- ローカル管理者アカウントへの依存、資格情報の盗難、脆弱な資格情報を削減します。
- Azure AD のパスワードの複雑さとパスワードの有効期間ポリシーを構成することによって、Linux VM のセキュリティが向上します。
- 通常のユーザーとして、または管理者権限を使用して、VM にログインできるユーザーを RBAC で指定できます。 ユーザーがチームに参加する場合は、適切なアクセス権が付与されるよう VM の Azure RBAC ポリシーを更新できます。 従業員が退職し、そのユーザー アカウントが無効化または Azure AD から削除されると、リソースにアクセスできなくなります。
- 条件付きアクセスを使用して、Linux VM に SSH 接続する前に、多要素認証を要求したり、クライアント デバイスをマネージド (準拠デバイスや Hybrid Azure AD Join を使用したデバイスなど) にすることを要求したりするポリシーを構成します。
- Azure のデプロイおよび監査ポリシーを使用して、Linux VM への Azure AD ログインを要求し、承認されていないローカル アカウントにフラグを設定します。
Azure Active Directory による Linux VM へのログインは、Active Directory フェデレーション サービスを使用するお客様にも機能します。
サポートされている Linux ディストリビューションと Azure リージョン
サポート対象リージョンでは現在、次の Linux ディストリビューションのデプロイがサポートされています。
Distribution | Version |
---|---|
Common Base Linux Mariner (CBL-Mariner) | CBL-Mariner 1、CBL-Mariner 2 |
CentOS | CentOS 7、CentOS 8 |
Debian | Debian 9、Debian 10、Debian 11 |
openSUSE | openSUSE Leap 42.3、openSUSE Leap 15.1+ |
Red Hat Enterprise Linux (RHEL) | RHEL 7.4 から RHEL 7.9、RHEL 8.3 以降 |
SUSE Linux Enterprise Server (SLES) | SLES 12、SLES 15.1+ |
Ubuntu Server | Ubuntu Server 16.04 から Ubuntu Server 22.04 |
この機能では、次の Azure リージョンが現在サポートされています。
- Azure Global
- Azure Government
- Azure China 21Vianet
Azure Kubernetes Service (AKS) クラスターでの Azure CLI の SSH 拡張機能の使用はサポートされていません。 詳細については、AKS のポリシーのサポートに関するページを参照してください。
Azure CLI をローカルにインストールして使用する場合は、Azure CLI バージョン 2.22.1 以降である必要があります。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。
Note
この機能は、Azure Arc 対応サーバーでも使用できます。
OpenSSH 証明書ベースの認証を使用した Azure AD によるログインの要件を満たす
Azure の Linux VM に対して SSH 証明書ベースの認証を使用した Azure AD ログインを有効にするには、次のネットワーク、仮想マシン、クライアント (ssh クライアント) の要件を満たす必要があります。
ネットワーク
VM ネットワーク構成では、TCP ポート 443 経由の次のエンドポイントへの発信アクセスが許可されている必要があります。
Azure Global:
https://packages.microsoft.com
: パッケージのインストールとアップグレード用。http://169.254.169.254
: Azure Instance Metadata Service エンドポイント。https://login.microsoftonline.com
: PAM ベース (プラグ可能な認証モジュール) の認証フロー用。https://pas.windows.net
: Azure RBAC フロー用。
Azure Government:
https://packages.microsoft.com
: パッケージのインストールとアップグレード用。http://169.254.169.254
: Azure Instance Metadata Service エンドポイント。https://login.microsoftonline.us
: PAM ベースの認証フロー用。https://pasff.usgovcloudapi.net
: Azure RBAC フロー用。
Azure China 21Vianet:
https://packages.microsoft.com
: パッケージのインストールとアップグレード用。http://169.254.169.254
: Azure Instance Metadata Service エンドポイント。https://login.chinacloudapi.cn
: PAM ベースの認証フロー用。https://pas.chinacloudapi.cn
: Azure RBAC フロー用。
仮想マシン
次の機能で VM が構成されていることを確認します。
- システム割り当てマネージド ID。 Azure portal を使用して VM を作成し、Azure AD ログイン オプションを選択すると、このオプションが自動的に選択されます。 Azure CLI を使用して、新規または既存の VM でシステム割り当てマネージド ID を有効にすることもできます。
aadsshlogin
およびaadsshlogin-selinux
(必要に応じて)。 これらのパッケージは、AADSSHLoginForLinux VM 拡張機能によってインストールされます。 この拡張機能は、Azure portal または Azure CLI を使用して VM を作成し、Azure AD ログインを有効にした ([管理] タブ) ときにインストールされます。
Client
クライアントが次の要件を満たしていることを確認してください。
SSH クライアントでは、認証のために OpenSSH ベースの証明書をサポートしている必要があります。 Azure CLI (2.21.1 以降) と OpenSSH (Windows 10 バージョン 1803 またはそれ以降に組み込み) または Azure Cloud Shell を使用して、この要件を満たすことができます。
Azure CLI 用の SSH 拡張機能 この拡張機能は、
az extension add --name ssh
を使用してインストールできます。 Azure Cloud Shell を使用している場合、この拡張機能はプレインストールされているため、インストールする必要はありません。OpenSSH 証明書をサポートする Azure CLI または Azure Cloud Shell 以外の SSH クライアントを使用している場合でも、SSH 拡張機能を備えた Azure CLI を使用して、エフェメラル SSH 証明書と必要に応じて構成ファイルを取得する必要があります。 その構成ファイルを SSH クライアントで使用することができます。
クライアントから VM のパブリックまたはプライベート IP アドレスへの TCP 接続。 (接続可能なマシンへの SSH 転送または ProxyCommand も機能します。)
重要
PuTTY に基づく SSH クライアントでは OpenSSH 証明書がサポートされるようになり、Azure AD OpenSSH 証明書ベースの認証でのログインに使用できるようになりました。
Azure 内の Linux VM に対して Azure AD ログインを有効にする
Azure 内の Linux VM に Azure AD ログインを使用するには、最初に Linux VM に対して Azure AD ログイン オプションを有効にする必要があります。 次に、VM へのログインが許可されているユーザーに対して Azure ロールの割り当てを構成します。 最後に、Azure CLI や Azure Cloud Shell など、OpenSSH をサポートする SSH クライアントを使用して Linux VM に SSH 接続します。
Linux VM に対して Azure AD ログインを有効にするには、次の 2 つの方法があります。
- Linux VM の作成時の Azure portal エクスペリエンス
- Linux VM の作成時または既存の VM の使用時の Azure Cloud Shell エクスペリエンス
Azure portal
Azure portal を使用して、サポートされている Linux ディストリビューションのいずれかに対して Azure AD ログインを有効にできます。
たとえば、Azure AD ログインによって、Azure に Ubuntu Server 18.04 LTS VM を作成するには、次の手順を行います。
- VM を作成するためのアクセス権を持つアカウントを使用して Azure portal にサインし、[+ リソースの作成] を選択します。
- [人気順] ビューの [Ubuntu Server 18.04 LTS] の下の [作成] を選びます。
- [管理] タブで、
- [Azure Active Directory でログインする (プレビュー)] チェック ボックスをオンにします。
- [システム割り当てマネージド ID] チェック ボックスがオンになっていることを確認します。
- 仮想マシンの作成エクスペリエンスの残りの部分に移動します。 ユーザー名とパスワードまたは SSH 公開キーで管理者アカウントを作成する必要があります。
Azure Cloud Shell
Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 Cloud Shell には一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。 [コピー] ボタンを選択してコードをコピーし、Cloud Shell に貼り付けて Enter キーを押すだけで、コードを実行することができます。
Cloud Shell は、次のようにいくつかの方法で開くことができます。
- コード ブロックの右上隅にある [使ってみる] を選択します。
- ブラウザーで Cloud Shell を開きます。
- Azure portal の右上隅にあるメニューの [Cloud Shell] ボタンを選択します。
Azure CLI をローカルにインストールして使用する場合、この記事では、バージョン 2.22.1 以降を使用する必要があります。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。
- az group create を実行してリソース グループを作成します。
- az vm create を実行して VM を作成します。 サポート対象リージョンでサポートされているディストリビューションを使用します。
- az vm extension set を使用して、Azure AD ログイン VM 拡張機能をインストールします。
次の例では、VM をデプロイし、拡張機能をインストールして、Linux VM に対して Azure AD ログインを有効にします。 VM 拡張機能は、Azure 仮想マシンでのデプロイ後の構成と自動タスクを提供する小さなアプリケーションです。 テスト要件をサポートするように、必要に応じてこの例をカスタマイズしてください。
az group create --name AzureADLinuxVM --location southcentralus
az vm create \
--resource-group AzureADLinuxVM \
--name myVM \
--image UbuntuLTS \
--assign-identity \
--admin-username azureuser \
--generate-ssh-keys
az vm extension set \
--publisher Microsoft.Azure.ActiveDirectory \
--name AADSSHLoginForLinux \
--resource-group AzureADLinuxVM \
--vm-name myVM
VM とサポートするリソースを作成するには数分かかります。
AADSSHLoginForLinux 拡張機能は、実行中の VM エージェントによって、既存の (サポートされているディストリビューション) Linux VM にインストールして、Azure AD 認証を有効にすることができます。 以前に作成した VM にこの拡張機能をデプロイする場合、VM には少なくとも 1 GB のメモリが割り当てられている必要があります。割り当てられていない場合、インストールは失敗します。
拡張機能が VM に正常にインストールされると、Succeeded
という provisioningState
値が表示されます。 拡張機能をインストールするには、VM に実行中の VM エージェントが必要です。
仮想マシン ロールの割り当てを構成する
VM を作成したので、VM にログインできるユーザーを決定する Azure RBAC ポリシーを構成する必要があります。 VM へのログインを承認するには、次の 2 つの Azure ロールが使用されます。
- 仮想マシンの管理者ログイン: このロールを割り当てられたユーザーは、管理者特権を持つユーザーとして Azure 仮想マシンにログインできます。
- 仮想マシンのユーザー ログイン: このロールが割り当てられたユーザーは 正規ユーザーの権限を持つユーザーとして Azure 仮想マシンにログインできます。
ユーザーが SSH で VM にログインできるようにするには、VM とそれに関連付けられた Virtual Network、ネットワーク インターフェイス、パブリック IP アドレス、または Load Balancer リソースを含むリソース グループに仮想マシン管理者ログインまたは仮想マシン ユーザー ログインのいずれかのロールを割り当てる必要があります。
VM の所有者または共同作成者のロールが割り当てられた Azure ユーザーに、SSH 経由で VM に Azure AD ログインする権限は自動的に付与されません。 これは、仮想マシンを管理するユーザーと仮想マシンにアクセスできるユーザーを意図的に (なおかつ監査上) 分離するためです。
VM のロールの割り当てを構成するには、次の 2 つの方法があります。
- Azure AD ポータル エクスペリエンス
- Azure Cloud Shell エクスペリエンス
注意
仮想マシンの管理者ログインおよび仮想マシンのユーザー ログインのロールでは dataActions
を使用し、管理グループ、サブスクリプション、リソース グループ、またはリソースのスコープで割り当てることができます。 個々の VM レベルではなく、管理グループ、サブスクリプション、またはリソース レベルでロールを割り当てることをお勧めします。 サブスクリプションあたりの Azure ロール割り当ての上限を超えるリスクの防止策になります。
Azure AD ポータル
Azure AD 対応 Linux VM のロールの割り当てを構成するには:
[リソース グループ] で、VM とそれに関連付けられている仮想ネットワーク、ネットワーク インターフェイス、パブリック IP アドレス、またはロード バランサー リソースを含むリソース グループを選択します。
[アクセス制御 (IAM)] を選択します。
[追加][ロールの割り当ての追加] の順に選択して、[ロールの割り当ての追加] ページを開きます。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 ロール [仮想マシンの管理者ログイン] または [仮想マシンのユーザー ログイン] アクセスの割り当て先 ユーザー、グループ、サービス プリンシパル、またはマネージド ID
しばらくすると、セキュリティ プリンシパルに選択されたスコープのロールが割り当てられます。
Azure Cloud Shell
次の例では、az role assignment create を使用し、現在の Azure ユーザーに対して、VM に対する仮想マシンの管理者ログイン ロールを割り当てます。 現在の Azure アカウントのユーザー名を az account show で取得し、スコープは、az vm show を使用して、前の手順で作成した VM に設定します。
リソース グループまたはサブスクリプション レベルでスコープを割り当てることもできます。 Azure RBAC における通常の継承アクセス許可が適用されます。
username=$(az account show --query user.name --output tsv)
rg=$(az group show --resource-group myResourceGroup --query id -o tsv)
az role assignment create \
--role "Virtual Machine Administrator Login" \
--assignee $username \
--scope $rg
Note
Azure AD ドメインとログイン ユーザー名ドメインが一致しない場合は、--assignee
のユーザー名だけでなく、--assignee-object-id
を使用してユーザー アカウントのオブジェクト ID を指定する必要があります。 ユーザー アカウントのオブジェクト ID は、az ad user list を使用して取得できます。
Azure RBAC を使用して、Azure サブスクリプション リソースへのアクセスを管理する方法の詳細については、「Azure ロールを割り当てる手順」を参照してください。
Azure CLI 用 SSH 拡張機能のインストール
Azure Cloud Shell を使用している場合は、Azure CLI と Azure CLI 用 SSH 拡張機能の両方の最低限必要なバージョンが既に Cloud Shell 環境に含まれているため、他のセットアップは必要ありません。
次のコマンドを実行して、Azure CLI 用 SSH 拡張機能を追加します。
az extension add --name ssh
拡張機能に必要な最小バージョンは 0.1.4 です。 次のコマンドを使ってインストール済みバージョンを確認します。
az extension show --name ssh
条件付きアクセス ポリシーを適用する
Azure AD ログインで有効になる条件付きアクセス ポリシーを適用できます。たとえば、
- 多要素認証を要求する、
- SSH クライアントを実行するデバイスに対して準拠デバイスまたは Hybrid Azure AD 参加済みデバイスを要求する、
- リスクを確認する、といったポリシーを適用したうえで、Azure 内の Linux VM へのアクセスを認可することが考えられます。
条件付きアクセス ポリシーに表示されるアプリケーションは、"Azure Linux VM Sign-In" という名前です。
Note
SSH クライアントを実行しているデバイスに Hybrid Azure AD Join またはデバイスの準拠を要求する条件付きアクセス ポリシーの適用は、Windows および macOS で実行されている Azure CLI でのみ機能します。 Linux や Azure Cloud Shell から Azure CLI を使用している場合はサポートされません。
アプリケーションが見つかりません
Azure Linux VM サインイン アプリケーションが条件付きアクセスに含まれていない場合は、アプリケーションがテナントに存在しないことを確認します。
- Azure portal にサインインします。
- [Azure Active Directory]>[エンタープライズ アプリケーション] の順に移動します。
- フィルターを削除してすべてのアプリケーションを表示し、VM を検索します。 結果に Azure Linux VM サインインが表示されない場合は、テナントにサービス プリンシパルは含まれていません。
それを確認するもう 1 つの方法は、Graph PowerShell を使用することです。
まだインストールしていない場合は、Graph PowerShell SDK をインストールします。
Connect-MgGraph -Scopes "ServicePrincipalEndpoint.ReadWrite.All","Application.ReadWrite.All"
コマンドを入力します。グローバル管理者アカウントでサインインします。
アクセス許可を求めるプロンプトに同意します。
Get-MgServicePrincipal -ConsistencyLevel eventual -Search '"DisplayName:Azure Linux VM Sign-In"'
コマンドを入力します。このコマンドで出力が行われず、PowerShell プロンプトに戻される場合は、Graph PowerShell コマンド
New-MgServicePrincipal -AppId ce6ff14a-7fdc-4685-bbe0-f6afdfcfa8e0
を使用してサービス プリンシパルを作成できます。正常な出力では、AppID とアプリケーション名 Azure Linux VM サインインが作成されたことが表示されます。
Disconnect-MgGraph
コマンドを使用して Graph PowerShell からサインアウトします。
Azure AD ユーザー アカウントを使用して Linux VM に SSH 接続し、ログインする
Azure CLI を使用してログインする
「az login
」と入力します。 このコマンドによりブラウザー ウィンドウが開き、Azure AD アカウントを使用してサインインできます。
az login
次に「az ssh vm
」と入力します。 次の例では、VM の適切な IP アドレスが自動的に解決されます。
az ssh vm -n myVM -g AzureADLinuxVM
メッセージが表示されたら、ログイン ページで Azure AD ログイン資格情報を入力し、多要素認証を実行するか、デバイス チェックを満たします。 Azure CLI セッションが必要な条件付きアクセス基準をまだ満たしていない場合にのみ、メッセージが表示されます。 ブラウザー ウィンドウを閉じ、SSH プロンプトに戻ると、VM に自動的に接続されます。
これで、VM ユーザーや VM 管理者などのロールのアクセス許可が割り当てられた Linux 仮想マシンにサインインしました。 自分のユーザー アカウントに仮想マシンの管理者ログイン ロールが割り当てられている場合は、sudo を使用してルート権限を必要とするコマンドを実行できます。
Azure Cloud Shell を使用してログインする
クライアント コンピューターにローカルに何もインストールする必要なく、Azure Cloud Shell を使用して VM に接続できます。 Azure portal の右上隅にあるシェル アイコンを選択して、Cloud Shell を起動します。
Cloud Shell によって、サインイン済みユーザーのコンテキストでセッションに自動的に接続します。 再度 az login
を実行し、対話型サインイン フローを実行します。
az login
それにより、通常の az ssh vm
コマンドを実行して、VM の名前とリソース グループまたは IP アドレスを使用して接続できます。
az ssh vm -n myVM -g AzureADLinuxVM
注意
Azure Cloud Shell を使用する場合は、デバイスの準拠または Hybrid Azure AD Join を要求する条件付きアクセス ポリシーの適用はサポートされていません。
Azure AD サービス プリンシパルを使用して SSH 接続し、Linux VM にログインする
Azure CLI では、ユーザー アカウントではなく、サービス プリンシパルによる認証がサポートされています。 サービス プリンシパルは特定のユーザーに関連付けられていないため、お客様は、それらを使用して、VM に SSH 接続して、目的の自動化シナリオをサポートできます。 サービス プリンシパルには、VM 管理者または VM ユーザー権限が割り当てられている必要があります。 サブスクリプションまたはリソース グループ レベルでアクセス許可を割り当てます。
次の例では、リソース グループ レベルで、サービス プリンシパルに VM 管理者権限を割り当てます。 プレースホルダーは、実際のサービス プリンシパル オブジェクト ID、サブスクリプション ID、リソース グループ名に置き換えてください。
az role assignment create \
--role "Virtual Machine Administrator Login" \
--assignee-object-id <service-principal-objectid> \
--assignee-principal-type ServicePrincipal \
--scope “/subscriptions/<subscription-id>/resourceGroups/<resourcegroup-name>"
次の例では、サービス プリンシパルを使用して Azure CLI に対して認証を行います。 詳細については、サービス プリンシパルを使った Azure CLI へのサインインに関する記事を参照してください。
az login --service-principal -u <sp-app-id> -p <password-or-cert> --tenant <tenant-id>
サービス プリンシパルによる認証が完了したら、通常の Azure CLI SSH コマンドを使用して VM に接続します。
az ssh vm -n myVM -g AzureADLinuxVM
OpenSSH をサポートする SSH クライアントで使用するための SSH 構成のエクスポート
Azure AD による Azure Linux VM へのログインでは、OpenSSH 証明書と構成のエクスポートがサポートされています。 つまり、OpenSSH ベースの証明書をサポートする任意の SSH クライアントを使用して、Azure AD 経由でサインインできます 次の例では、VM に割り当てられているすべての IP アドレスの構成をエクスポートしています。
az ssh config --file ~/.ssh/config -n myVM -g AzureADLinuxVM
または、IP アドレスだけを指定して、構成をエクスポートすることもできます。 次の例の IP アドレスをお使いの VM のパブリックまたはプライベート IP アドレスに置き換えます (プライベート IP には独自の接続を使用する必要があります)。このコマンドのヘルプについては、「az ssh config -h
」と入力してください。
az ssh config --file ~/.ssh/config --ip 10.11.123.456
その後、通常の OpenSSH の使用方法によって VM に接続できます。 接続は、OpenSSH を使用する任意の SSH クライアント経由で行うことができます。
Azure AD ログインで sudo を実行する
VM 管理者ロールが割り当てられたユーザーが、Linux VM への SSH 接続に成功すると、他の操作や認証要件なしで sudo を実行できるようになります。 VM ユーザー ロールが割り当てられたユーザーは sudo を実行できません。
仮想マシン スケール セット内の VM に接続する
仮想マシン スケール セットはサポートされていますが、仮想マシン スケールセット内の VM の有効化と接続の手順は若干異なります。
仮想マシン スケール セットを作成するか、既に存在するものを選択します。 Azure 仮想マシン スケール セットのシステム割り当てマネージド ID を有効にします。
az vmss identity assign --name myVMSS --resource-group AzureADLinuxVM
仮想マシン スケールセット に Azure AD 拡張機能をインストールします。
az vmss extension set --publisher Microsoft.Azure.ActiveDirectory --name AADSSHLoginForLinux --resource-group AzureADLinuxVM --vmss-name myVMSS
通常、仮想マシン スケール セットには、パブリック IP アドレスは含まれません。 Azure 仮想ネットワークに到達できる別のマシンから接続する必要があります。 この例では、仮想マシン スケール セット内の VM のプライベート IP を使用して、同じ仮想ネットワーク内のマシンから接続する方法を示しています。
az ssh vm --ip 10.11.123.456
Note
--resource-group
および --name
スイッチを使用して、仮想マシン スケール セット VM の IP アドレスを自動的に決定することはできません。
以前の (プレビュー) バージョンから移行する
デバイス コード フローに基づいた以前のバージョンの Linux 用 Azure AD ログインを使用している場合は、Azure CLI を使用して次の手順を実行してください。
VM の AADLoginForLinux 拡張機能をアンインストールします。
az vm extension delete -g MyResourceGroup --vm-name MyVm -n AADLoginForLinux
注意
VM に現在ログインしている Azure AD ユーザーがいる場合、拡張機能のアンインストールは失敗する可能性があります。 すべてのユーザーが最初にログアウトするようにしてください。
VM でシステム割り当てマネージド ID を有効にします。
az vm identity assign -g myResourceGroup -n myVm
VM に AADLoginForLinux 拡張機能をインストールします。
az vm extension set \ --publisher Microsoft.Azure.ActiveDirectory \ --name AADSSHLoginForLinux \ --resource-group myResourceGroup \ --vm-name myVM
Azure Policy を使用して、標準および評価コンプライアンスを満たす
Azure Policy を使用して次のことを行います。
- 新規および既存の Linux 仮想マシンに対して Azure AD ログインを有効にする。
- コンプライアンス ダッシュボードで環境のコンプライアンスを大規模に評価する。
この機能により、さまざまなレベルの適用を使用できます。 Azure AD ログインが有効になっていない環境内の新規および既存の Linux VM にフラグを設定できます。 さらに、Azure Policy を使用して、Azure AD ログインが有効になっていない新しい Linux VM に Azure AD 拡張機能をデプロイするほか、既存の Linux VM を同じ標準に修復することもできます。
これらの機能に加え、Azure Policy を使用して、承認されていないローカル アカウントが作成されている Linux VM を検出してフラグを設定することもできます。 詳細については、Azure Policy に関するページを確認してください。
サインアップに関する問題のトラブルシューティング
Azure AD の資格情報を使用して SSH 接続しようとしたときによく発生するエラーは、以降のセクションを使用して解決してください。
ローカル キャッシュからトークンを取得できない
トークンをローカル キャッシュから取得できないというメッセージが表示された場合は、もう一度 az login
を実行し、対話型サインイン フローを実行する必要があります。 Azure Cloud Shell を使用したログインに関するセクションを参照してください。
アクセスが拒否されました:Azure ロールが割り当てられていません
SSH プロンプトで "Azure ロールが割り当てられていない" という内容のエラーが表示された場合は、仮想マシンの管理者ログイン ロールまたは仮想マシンのユーザー ログイン ロールのいずれかをユーザーに付与する VM 用 Azure RBAC ポリシーが構成済みであることを確認してください。 Azure のロールの割り当てに関する問題が発生した場合は、「Azure RBAC のトラブルシューティング」の記事を参照してください。
使用していない (AADLoginForLinux) 拡張機能の削除に関する問題
アンインストール スクリプトが失敗した場合、拡張機能が移行中状態で停止する可能性があります。 これが発生した場合は、削除中にアンインストールされたことになっているパッケージが残る可能性があります。 このような場合は、使用していないパッケージを手動でアンインストールしてから、az vm extension delete
コマンドの実行を試すことをお勧めします。
古いパッケージをアンインストールするには:
- 管理特権を持つローカル ユーザーとしてログインします。
- ログインしている Azure AD ユーザーがいないことを確認します。
who -u
コマンドを呼び出して、ログインしているユーザーを確認します。 次に、前のコマンドによって報告されたすべてのセッション プロセスについてsudo kill <pid>
を実行します。 sudo apt remove --purge aadlogin
(Ubuntu または Debian)、sudo yum remove aadlogin
(RHEL または CentOS)、またはsudo zypper remove aadlogin
(openSUSE または SLES) を実行します。- コマンドが失敗した場合は、スクリプトを無効にして下位レベルのツールを試してください。
- Ubuntu または Deian の場合、
sudo dpkg --purge aadlogin
を実行します。 スクリプトが理由でまだ失敗する場合は、/var/lib/dpkg/info/aadlogin.prerm
ファイルを削除して、再度試してください。 - 他のすべての場合は、
rpm -e --noscripts aadogin
を実行します。
- Ubuntu または Deian の場合、
- パッケージ
aadlogin-selinux
に対して手順 3 から 4 を繰り返します。
拡張機能のインストール エラー
既存のコンピューターへの AADSSHLoginForLinux VM 拡張機能のインストールが、次のいずれかの既知のエラー コードで失敗する場合があります。
ゼロ以外の終了コード 22
終了コード 22 が返される場合、ADSSHLoginForLinux VM 拡張機能の状態が "移行中" と表示されます。
このエラーは、システム割り当てマネージド ID が必要であるために発生します。
解決策は次のとおりです。
- 失敗した拡張機能をアンインストールします。
- Azure VM でシステム割り当てマネージド ID を有効にします。
- 拡張機能のインストール コマンドを再度実行します。
ゼロ以外の終了コード 23
終了コード 23 が返される場合、ADSSHLoginForLinux VM 拡張機能の状態が "移行中" と表示されます。
このエラーは、古い AADLoginForLinux VM 拡張機能がまだインストールされていると発生します。
VM から古い AADLoginForLinux VM 拡張機能をアンインストールすることが解決策となります。 ポータルで、新しい AADSSHLoginForLinux VM 拡張機能の状態が、"プロビジョニング成功" に変わります。
az ssh vm コマンドが KeyError access_token で失敗する
古いバージョンの Azure CLI クライアントを使用していると az ssh vm
コマンドが失敗します。
Azure CLI クライアントをバージョン 2.21.0 以降にアップグレードすることが解決策となります。
SSH 接続が閉じられる
ユーザーが az login
を使用して正常にサインインした後、az ssh vm -ip <address>
または az ssh vm --name <vm_name> -g <resource_group>
を使用した VM への接続が、" <ip_address> ポート 22 によって接続が閉じられました" で失敗する場合があります。
このエラーの原因の 1 つは、ユーザーが、この VM のスコープ内で仮想マシンの管理者ログインと仮想マシンのユーザー ログインのいずれのロールにも割り当てられていないことです。 その場合は、この VM のスコープ内で、そのどちらかの Azure RBAC ロールにユーザーを追加することが解決策となります。
また、このエラーは、必要な Azure RBAC ロールにユーザーが含まれているものの、その VM でシステム割り当てマネージド ID が無効になっている場合にも発生します。 その場合は、次のアクションを実行します。
- VM でシステム割り当てマネージド ID を有効にします。
- 数分待ってから、
az ssh vm --ip <ip_address>
を使用して接続を試みます。
仮想マシン スケール セットの接続に関する問題
仮想マシン スケール セット インスタンスで古いモデルが実行されている場合、スケール セットの VM 接続が失敗することがあります。
特に Azure AD ログイン拡張機能のインストール後アップグレードが実行されていなかった場合、スケール セット インスタンスを最新のモデルにアップグレードすると、問題が解決する可能性があります。 インスタンスをアップグレードすると、標準のスケール セット構成が個々のインスタンスに適用されます。
AllowGroups ステートメントまたは DenyGroups ステートメントを sshd_config で実行すると、Azure AD ユーザーによる最初のログインが失敗する
AllowGroups
と DenyGroups
のいずれかのステートメントが sshd_config に含まれている場合、Azure AD ユーザーによる最初のログインは失敗します。 ステートメントが追加されたのが、既にユーザーがログインに成功した後であった場合はログイン可能です。
解決策の 1 つは、AllowGroups
と DenyGroups
ステートメントを sshd_config から削除することです。
もう 1 つの解決策は、AllowGroups
と DenyGroups
を sshd_config の match user
セクションに移動することです。 一致テンプレートに Azure AD ユーザーが含まれていないことを確認してください。
Azure Shell から Linux Red Hat/Oracle/Centos 7.X VM に接続しようとしたときにアクセス許可の取得が拒否される。
ターゲット VM 7.4 の OpenSSH サーバー バージョンが古すぎます。 OpenSSH クライアント バージョン 8.8 と互換性のないバージョンです。 詳細については、「RSA SHA256 証明書が機能しない」を参照してください。
対応策 :
az ssh vm
コマンドにオプション"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
を追加します。
az ssh vm -n myVM -g MyResourceGroup -- -A -o "PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
/home/<user>/.ssh/config file
に オプション"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
を追加します。
"PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com"
をクライアント構成ファイルに追加します。
Host *
PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com