LinuxのAzure VMでMicrosoft Entra IDを利用して認証するための設定手順

2021-05-17Azure,Entra ID,Others,PowerShell/Azure CLI,Rocky Linux/CentOS,Virtual Machines

Linuxの仮想マシン(Azure VM)のOS認証に、Microsoft Entra IDユーザーを利用するための設定手順です
仮想マシンの拡張機能有効化、ロールの割り当て、Azure CLIを利用したログイン手順までを確認しています。
また、ロール割り当てを管理者ユーザーと一般ユーザーで行った場合の違いについても確認しています。

Azureでは、Microsoft Entra IDのユーザーを利用してOSの認証を行うことができます。
Microsoft Entra IDのユーザーによる認証を実現するための拡張機能は、Linuxの仮想マシンにも提供されています。

OSのローカルユーザー管理をEntra IDと統合できるため、ユーザー管理が容易になります。
OSユーザー認証に二段階認証を利用することも可能です。

今回はRocky Linux 9の仮想マシンを例に、OSのユーザー認証をMicrosoft Entra IDユーザーで行うための設定からログイン確認までを実施しました。
管理者ユーザーと一般ユーザーに分けて権限を付与し、それぞれの違いについても確認しました。

※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※Rocky Linuxは、Rocky Linux release 9.5(Blue Onyx)を利用しています。

スポンサーリンク

仮想マシンでMicrosoft Entra IDのログインを有効化する手順

サポートされるLinux ディストリビューション

Microsoft Entra IDユーザーによる認証がサポートされているLinuxディストリビューションは、公式サイトに記載されています。

サポートされている Linux ディストリビューションと Azure リージョン

Rocky Linuxであれば、8と9がサポートされています。

設定手順の概要

公式サイトを参考に設定を進めます。

Microsoft Entra ID と OpenSSH を使用して Azure の Linux 仮想マシンにサインインする

大きく分けて、以下の手順が必要になります。

    • 仮想マシンのシステム割り当てマネージドIDを有効化
    • 仮想マシンにAzure AD based SSH Loginの拡張機能をインストール
    • Microsoft Entra ID ユーザーに仮想マシンへログインするためのロールを割り当て

システム割り当てマネージド ID の有効化

仮想マシンのシステム割り当てマネージド ID を有効化します。

システム割り当てマネージド ID の有効化
セキュリティにあるIDのメニューを表示します。
システム割り当て済みのタブで、状態をオンに変更にし、保存します。
確認メッセージが表示されますので、はいを選択します。
仮想マシンでシステム割り当て済みマネージドIDを有効化(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
仮想マシンでシステム割り当て済みマネージドIDを有効化(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

Azure AD based SSH Loginの拡張機能をインストール

OSの認証にMicrosoft Entra IDを利用できるようするためには、仮想マシンに拡張機能をインストールする必要があります。
Azure AD based SSH Loginの拡張機能をインストールします。

拡張機能のインストール
仮想マシンのリソースメニューで拡張機能とアプリケーションを選択します。
拡張機能のタブで追加を選択します。
仮想マシンに拡張機能をインストール(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
AAD based SSH Loginを選択します。 Azure AD based SSH Loginの拡張機能を選択(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

確認画面で作成を選択します。
作成を選択すると、仮想マシンへの拡張機能インストールが開始します。

Azure AD based SSH Loginの拡張機能をインストール(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
Azure AD based SSH Loginの拡張機能をインストール(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
拡張機能に”AADSSHLogin”がインストールされていることを確認できます。
状態が”Provisioning succeeded”となっていれば正常に動作しています。
Azure AD based SSH Loginの拡張機能をインストールした後の状態(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

Microsoft Entra ID ユーザーに仮想マシンへログインするためのロールを割り当て

Microsoft Entra ID ユーザーでOSの認証するためには、ロールの割り当てが必要になります。

仮想マシン ロールの割り当てを構成する

仮想マシンに関連付けされたリソースにもロール割り当てが必要になります。
仮想マシンと関連付けられたリソースを含むリソース グループに対してロール割り当ての追加が必要になります。

    • 仮想ネットワーク
    • ネットワーク インターフェイス
    • パブリック IP アドレス
    • ロードバランサー

仮想マシンの管理者ログインと仮想マシンのユーザー ログインから割り当てるロールを選択します。
ログイン後に管理者ユーザーとするか、一般ユーザーとするかによって選択します。
管理者ユーザーを選択した場合は、sudo権限が付与されます。

※アクセス元やネットワーク構成により、ロールの割り当てが必要なリソースは異なります。

ロールの割り当て
アクセス制御(IAM)のメニューで、ロールの割り当ての追加を選択します。 仮想マシンでロールの割り当てを追加(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

仮想マシンのユーザーログインを選択します。

仮想マシンのユーザーログインのロールを選択(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

ロールを割り当てるメンバーを選択します。
Microsoft Entra IDのユーザーをメンバーとして選択します。
レビューと割り当てを選択します。

Microsoft Entra IDのユーザーを選択(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
Microsoft Entra IDのユーザーを選択(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

確認画面です。
選択されたロールに仮想マシンのユーザー ログインが指定されていることを確認します。
メンバーにMicrosoft Entra IDのユーザーが選択されていることを確認します。
レビューと割り当てを選択します。

ロールの割り当て確認画面(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

仮想マシンのユーザーログインのロールが割り当てられていることが確認できます。

ロールの割り当て後のアクセス制御(IAM)設定(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

同様にネットワークインターフェイスにも、ロールを割り当てています。

ロールの割り当て後のアクセス制御(IAM)設定(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

ネットワークのアクセス許可設定

Microsoft Entra IDで仮想マシンのOS認証する場合に、インターネットへアクセスします。
仮想マシンから、HTTP443のアクセス許可設定が必要になります。

ネットワーク

—広告—

Microsoft Entra ID ユーザーを利用してAzure VM(Linux OS)へログイン

Azure CLIを利用して、仮想マシンにログインします。

    • Azure CLIでテナントにサインイン
    • Azure CLIコマンドで仮想マシンにSSH接続

Visual Studio CodeでAzure CLIを使う手順については、こちらで紹介しています。

Azure CLIにSSH 拡張機能を追加

Azure CLIを利用して、OSへのログインします。
Azure CLIにSSH 拡張機能を追加する必要があります。

SSH拡張機能をインストール

az extension addコマンドで拡張機能をインストールします。

PS C:\> az extension add –name ssh

※Cloud Shellにはインストールされているため、追加の手順は必要ありません。

Microsoft Entra ID ユーザーを使ってLinuxOSへログイン

Microsoft Entra ID ユーザーで、仮想マシンへログインするための手順は2段階になります。

    • Azure テナントへのサインイン
    • az ssh vmコマンドでOSへのログイン
ログイン手順

az loginコマンドでAzure テナントにサインインします。

PS C:\> az login

ロール割り当てたMicrosoft Entra ID ユーザーでサインインします。
ユーザー名、パスワードを入力します。
2段階認証の設定に基づき、サインインします。

Azureテナントへのサインイン(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)
Azureテナントへのサインイン(Linuxの仮想マシンの認証にMicrosoft Entra IDを利用するための設定手順)

az ssh vmコマンドで仮想マシンへログインします。

# az ssh vmコマンドで仮想マシンへログイン

PS C:\> az ssh vm -n vm-01 -g リソースグループ名
No public IP detected, attempting private IP (you must bring your own connectivity).
Use –prefer-private-ip to avoid this message.
OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
The authenticity of host 'xx.xx.xx.xx (xx.xx.xx.xx)’ can’t be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxx
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xx.xx.xx.xx’ (ED25519) to the list of known hosts.
Learned new hostkey: RSA SHA256:xxxxxxxxxxxxxxxx
Learned new hostkey: ECDSA SHA256:xxxxxxxxxxxxxxxx
Adding new key for xx.xx.xx.xx to C:\\Users\\ユーザー名/.ssh/known_hosts: ssh-rsa SHA256:xxxxxxxxxxxxxxxx
Adding new key for xx.xx.xx.xx to C:\\Users\\ユーザー名/.ssh/known_hosts: ecdsa-sha2-nistp256
SHA256:xxxxxxxxxxxxxxxx

[vm-login-01@xxx.xxx.com@vm-01 ~]$

ロールの割り当てが足りずにログインエラーになった場合の例

ロール割り当てが足りていないと、az ssh vm実行時にエラーになります。

ロールの割り当てができてなくてエラーになった場合の例

# ネットワークインターフェースへのロール割り当てが足りずにログインエラーになった場合

PS C:\> az ssh vm -n vm-01 -g リソースグループ名
(AuthorizationFailed) The client "vm-login-01@xxx.xxx.com’ with object id 'オブジェクトID’ does not have authorization to perform action 'Microsoft.Network/networkInterfaces/read’ over scope '/subscriptions/サブスクリプションID/resourceGroups/リソースグループ名/providers/Microsoft.Network/networkInterfaces/ネットワークインターフェース名’ or the scope is invalid. If access was recently granted, please refresh your credentials.
Code: AuthorizationFailed
Message: The client "’ with object id 'オブジェクトID’ does not have authorization to perform action 'Microsoft.Network/networkInterfaces/read’ over scope
'/subscriptions/サブスクリプションID/resourceGroups/リソースグループ名/providers/Microsoft.Network/networkInterfaces/ネットワークインターフェース名’ or the scope is invalid. If access was recently granted, please refresh your credentials.

割り当てたロールによるログイン後の権限違いを確認

ログイン後にidコマンドを使ってロール割り当ての違いを確認してみます。
”仮想マシンの管理者ログイン”のロール付与した場合した場合はwheelグループ、aad_adminsグループに参加している事が分かります。

割り当てたロールによる違いを確認

# 仮想マシンの管理者ログインのロール付与した場合
[vm-login-01@xxx.xxx.com@vm-01 ~]$ id
uid=xxxxxxxx(vm-login-01@xxx.xxx.com) gid=xxxxxxxx(vm-login-01@xxx.xxx.com) groups=xxxxxxxx(vvm-login-01@xxx.xxx.com),10(wheel),1001(aad_admins) context=unconfined_u:unconfined_r:unconfined_t:sx-sx:cx.cxxxx

# 仮想マシンのユーザーログインのロール付与した場合
[vm-login-01@xxx.xxx.com@vm-01 ~]$ id
uid=xxxxxxxx(vm-login-01@xxx.xxx.com) gid=xxxxxxxx(vm-login-01@xxx.xxx.com) groups=xxxxxxxx(vm-login-01@xxx.xxx.com) context=unconfined_u:unconfined_r:unconfined_t:sx-sx:cx.cxxxx

sudoの設定内容

sudoers.d配下に、aad_adminsというファイルが作成されています。
aad_adminsグループにsudo権限が割り当てられていることが確認できます。

sudoの設定内容を確認

[root@vm-01 ~]# cat /etc/sudoers.d/aad_admins
%aad_admins ALL=(ALL) NOPASSWD:ALL

—広告–

最後に

Linuxの仮想マシンの認証に、Microsoft Entra IDユーザーを利用するための手順を確認しました。
Microsoft Entra IDユーザーを利用することで、二段階認証が使えたり、ロールの割り当てだけで仮想マシンへのログインを許可できたりするため、とても便利な機能だと感じました。

引き続き、いろいろ試してみたいと思います。

Azure Bastionを使用しても、Microsoft Entra IDユーザーを使った仮想マシンへのログインが可能です。
Azure Bastionを利用することで、よりセキュアな環境で運用できます。
Azure Bastionを使った仮想マシンへのログイン手順については、こちらで紹介しています。

公開鍵認証の仮想マシン作成手順は、こちらで紹介しています。

 

スポンサーリンク