注意事項
この記事で説明されているパブリック プレビュー機能は、2021 年 8 月 15 日に非推奨になりました。
この機能は、openSSH 証明書ベースの認証を使用して Azure AD ベースの SSH を使用する機能に置き換えられます。 この機能は一般公開されました。 詳細については、「 SSH 証明書ベースの認証を使用して Azure Active Directory を使用して Azure の Linux 仮想マシンにログインする」を参照してください。 以前のバージョンからこのバージョンに移行するには、「 以前の (プレビュー) バージョンからの移行」を参照してください。
Azure の Linux 仮想マシン (VM) のセキュリティを強化するために、Azure Active Directory (AD) 認証と統合できます。 Linux VM に Azure AD 認証を使用する場合は、VM へのアクセスを許可または拒否するポリシーを一元的に制御し、適用します。 この記事では、Azure AD 認証を使用するように Linux VM を作成して構成する方法について説明します。
Azure AD 認証を使用して Azure の Linux VM にログインすると、次のような多くの利点があります。
セキュリティの強化:
- 会社の AD 資格情報を使用して、Azure Linux VM にログインできます。 ローカル管理者アカウントを作成し、資格情報の有効期間を管理する必要はありません。
- ローカル管理者アカウントへの依存を減らすことで、資格情報の損失や盗難、または弱い資格情報の構成を心配する必要がなくなります。
- Azure AD ディレクトリ用に構成されたパスワードの複雑さとパスワードの有効期間ポリシーは、Linux VM のセキュリティ保護にも役立ちます。
- Azure 仮想マシンへのログインをさらにセキュリティで保護するために、多要素認証を構成できます。
- Azure Active Directory を使用して Linux VM にログインする機能は、 フェデレーション サービスを使用しているお客様にも機能します。
シームレスなコラボレーション: Azure ロールベースのアクセス制御 (Azure RBAC) では、特定の VM に通常のユーザーまたは管理者特権でサインインできるユーザーを指定できます。 ユーザーがチームに参加またはチームから脱退する場合は、適切なアクセス権が付与されるよう VM の Azure RBAC ポリシーを更新できます。 このエクスペリエンスは、不要な SSH 公開キーを削除するために VM をスクラブする必要があるよりもはるかに簡単です。 従業員が組織を離れ、ユーザー アカウントが無効になっているか、Azure AD から削除されると、リソースにアクセスできなくなります。
サポートされている Azure リージョンと Linux ディストリビューション
現在、この機能のプレビュー中は、次の Linux ディストリビューションがサポートされています。
| 流通 | バージョン |
|---|---|
| CentOS | CentOS 6、CentOS 7 |
| Debian | Debian 9 |
| openSUSE | openSUSE Leap 42.3 |
| RedHat Enterprise Linux | RHEL 6、RHEL 7 |
| SUSE Linux Enterprise Server | SLES 12 |
| Ubuntu Server | Ubuntu 14.04 LTS、Ubuntu Server 16.04、Ubuntu Server 18.04 |
重要
プレビューは、Azure Government またはソブリン クラウドではサポートされていません。
Azure Kubernetes Service (AKS) クラスターでこの拡張機能を使用することはサポートされていません。 詳細については、「 AKS のサポート ポリシー」を参照してください。
CLI をローカルにインストールして使用する場合、このチュートリアルでは、Azure CLI バージョン 2.0.31 以降を実行している必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。
ネットワークの要件
Azure で Linux VM に対して Azure AD 認証を有効にするには、VM ネットワーク構成で TCP ポート 443 経由で次のエンドポイントへの送信アクセスが許可されていることを確認する必要があります。
- https://login.microsoftonline.com
- https://login.windows.net
- https://device.login.microsoftonline.com
- https://pas.windows.net
- https://management.azure.com
- https://packages.microsoft.com
注
現時点では、Azure AD 認証で有効になっている VM に対して Azure ネットワーク セキュリティ グループを構成することはできません。
Linux 仮想マシンを作成する
az group create を使用してリソース グループを作成し、サポートされているディストリビューションとサポートされているリージョンで az vm create を使用して VM を作成します。 次の例では、Ubuntu 16.04 LTS を使用する myVM という名前の VM を、southcentralus リージョンの myResourceGroup という名前のリソース グループにデプロイします。 次の例では、必要に応じて独自のリソース グループと VM 名を指定できます。
az group create --name myResourceGroup --location southcentralus
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys
VM とサポートするリソースを作成するには数分かかります。
Azure AD ログイン VM 拡張機能をインストールする
注
この拡張機能を以前に作成した VM にデプロイする場合は、マシンに少なくとも 1 GB のメモリが割り当てられていることを確認します。それ以外の場合、拡張機能はインストールに失敗します。
Azure AD 資格情報を使用して Linux VM にログインするには、Azure Active Directory ログイン VM 拡張機能をインストールします。 VM 拡張機能は、Azure 仮想マシンでのデプロイ後の構成と自動タスクを提供する小さなアプリケーションです。 az vm extension set を使用して、myResourceGroup リソース グループ内の myVM という名前の VM に AADLoginForLinux 拡張機能をインストールします。
az vm extension set \
--publisher Microsoft.Azure.ActiveDirectory.LinuxSSH \
--name AADLoginForLinux \
--resource-group myResourceGroup \
--vm-name myVM
拡張機能が VM に正常にインストールされると、 provisioningState of Succeeded が表示されます。 VM には、拡張機能をインストールするために実行中の VM エージェントが必要です。 詳細については、「 VM エージェントの概要」を参照してください。
仮想マシン ロールの割り当てを構成する
Azure ロールベースのアクセス制御 (Azure RBAC) ポリシーは、VM にログインできるユーザーを決定します。 VM へのログインを承認するには、次の 2 つの Azure ロールが使用されます。
- 仮想マシン管理者ログイン: このロールが割り当てられているユーザーは、Windows 管理者または Linux のルート ユーザー特権を使用して Azure 仮想マシンにログインできます。
- 仮想マシン ユーザー ログイン: このロールが割り当てられているユーザーは、通常のユーザー特権で Azure 仮想マシンにログインできます。
注
ユーザーが SSH 経由で VM にログインできるようにするには、 仮想マシン管理者ログインロールまたは仮想マシンユーザー ログイン ロールを割り当てる必要があります。 仮想マシン管理者ログイン ロールと仮想マシン ユーザー ログイン ロールは dataActions を使用するため、管理グループ スコープで割り当てることはできません。 現在、これらのロールは、サブスクリプション、リソース グループ、またはリソース スコープでのみ割り当てることができます。 VM に割り当てられた 所有者 ロールまたは 共同作成者 ロールを持つ Azure ユーザーには、SSH 経由で VM にログインする権限が自動的に付与されません。
次の例では、 az role assignment create を使用して、現在の Azure ユーザーの VM に仮想マシン管理者ログイン ロールを割り当てます。 アクティブな Azure アカウントのユーザー名は az account show で取得され、 スコープ は az vm show を使用して前の手順で作成した VM に設定されます。 スコープは、リソース グループまたはサブスクリプション レベルで割り当てることもできます。また、通常の Azure RBAC 継承アクセス許可が適用されます。 詳細については、Azure RBAC に関するページを参照してください。
username=$(az account show --query user.name --output tsv)
vm=$(az vm show --resource-group myResourceGroup --name myVM --query id -o tsv)
az role assignment create \
--role "Virtual Machine Administrator Login" \
--assignee $username \
--scope $vm
注
AAD ドメインとログオン ユーザー名ドメインが一致しない場合は、--assignee のユーザー名だけでなく、--assignee-object-id を使用してユーザー アカウントのオブジェクト ID を指定する必要があります。 az ad user list を使用して、ユーザー アカウントのオブジェクト ID を取得できます。
Azure RBAC を使用して Azure サブスクリプション リソースへのアクセスを管理する方法の詳細については、 Azure CLI、 Azure portal、または Azure PowerShell の使用を参照してください。
条件付きアクセスの使用
Azure AD サインインで有効になっている Azure の Linux VM へのアクセスを承認する前に、多要素認証やユーザー サインイン リスク チェックなどの条件付きアクセス ポリシーを適用できます。 条件付きアクセス ポリシーを適用するには、クラウド アプリまたはアクションの割り当てオプションから "Microsoft Azure Linux 仮想マシン サインイン" アプリを選択し、条件としてサインイン リスクを使用するか、アクセス許可制御として多要素認証を要求する必要があります。
警告
VM サインインでは、ユーザーごとの有効/強制された Azure AD Multi-Factor Authentication はサポートされていません。
Linux 仮想マシンにログインする
まず、 az vm show を使用して VM のパブリック IP アドレスを表示します。
az vm show --resource-group myResourceGroup --name myVM -d --query publicIps -o tsv
Azure AD 資格情報を使用して Azure Linux 仮想マシンにログインします。
-l パラメーターを使用すると、独自の Azure AD アカウント アドレスを指定できます。 サンプル アカウントを独自のアカウントに置き換えます。 アカウント アドレスはすべて小文字で入力する必要があります。 例の IP アドレスを、前のコマンドの VM のパブリック IP アドレスに置き換えます。
ssh -l azureuser@contoso.onmicrosoft.com 10.11.123.456
https://microsoft.com/deviceloginで 1 回限り使用するコードを使用して Azure AD にサインインするように求められます。 1 回限りの使用コードをコピーして、デバイス ログイン ページに貼り付けます。
メッセージが表示されたら、ログイン ページで Azure AD ログイン資格情報を入力します。
正常に認証されると、Web ブラウザーに次のメッセージが表示されます。 You have signed in to the Microsoft Azure Linux Virtual Machine Sign-In application on your device.
ブラウザー ウィンドウを閉じ、SSH プロンプトに戻り、 Enter キーを押します。
これで、 VM ユーザー や VM 管理者など、ロールのアクセス許可が割り当てられた Azure Linux 仮想マシンにサインインします。 ユーザー アカウントに 仮想マシン管理者ログイン ロールが割り当てられている場合は、 sudo を使用して、ルート特権を必要とするコマンドを実行できます。
Sudo と AAD ログイン
sudo を初めて実行すると、2 回目の認証を求められます。 sudo を実行するために再度認証する必要がない場合は、sudoers ファイルを /etc/sudoers.d/aad_admins 編集し、次の行を置き換えることができます。
%aad_admins ALL=(ALL) ALL
次の行を使用します。
%aad_admins ALL=(ALL) NOPASSWD:ALL
サインアップに関する問題のトラブルシューティング
Azure AD 資格情報を使用して SSH 接続しようとすると発生する一般的なエラーには、Azure ロールが割り当てられていない、サインインを求めるプロンプトが繰り返し表示されます。 これらの問題を修正するには、次のセクションを使用します。
アクセスが拒否されました: Azure ロールが割り当てられない
SSH プロンプトで次のエラーが表示される場合は、 仮想マシン管理者ログインロールまたは仮想マシン ユーザー ログイン ロールをユーザーに付与する VM の Azure RBAC ポリシーが構成されていることを確認します。
login as: azureuser@contoso.onmicrosoft.com
Using keyboard-interactive authentication.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code FJX327AXD to authenticate. Press ENTER when ready.
Using keyboard-interactive authentication.
Access denied: to sign-in you be assigned a role with action 'Microsoft.Compute/virtualMachines/login/action', for example 'Virtual Machine User Login'
Access denied
注
Azure ロールの割り当てに関する問題が発生している場合は、「 Azure RBAC のトラブルシューティング」を参照してください。
SSH サインインプロンプトの継続
Web ブラウザーで認証手順を正常に完了すると、すぐに新しいコードで再びサインインするように求められる場合があります。 通常、このエラーは、SSH プロンプトで指定したサインイン名と、Azure AD にサインインしたアカウントが一致しない場合に発生します。 この問題を解決するには:
- SSH プロンプトで指定したサインイン名が正しいことを確認します。 サインイン名に入力ミスがあると、SSH プロンプトで指定したサインイン名と、Azure AD にサインインしたアカウントが一致しない可能性があります。 たとえば、azureuser@contoso.onmicrosoft.comではなくazuresuer@contoso.onmicrosoft.comを入力したとします。
- 複数のユーザー アカウントがある場合は、Azure AD にサインインするときにブラウザー ウィンドウに別のユーザー アカウントを指定しないようにしてください。
- Linux は、大文字と小文字を区別するオペレーティング システムです。 'Azureuser@contoso.onmicrosoft.com' と 'azureuser@contoso.onmicrosoft.com' の間に違いがあり、不一致が発生する可能性があります。 SSH プロンプトで、UPN の大文字と小文字が正しいことを確認するようにしてください。
その他の制限사항
入れ子になったグループまたはロールの割り当てを通じてアクセス権を継承するユーザーは、現在サポートされていません。 ユーザーまたはグループには、 必要なロールの割り当てを直接割り当てる必要があります。 たとえば、管理グループまたは入れ子になったグループ ロールの割り当てを使用しても、ユーザーのサインインを許可する適切なアクセス許可は付与されません。
プレビューフィードバック
このプレビュー機能に関するフィードバックを共有するか、 Azure AD フィードバック フォーラムでそれを使用して問題を報告します。
次のステップ
Azure Active Directory の詳細については、「Azure Active Directory とは」を参照してください。