
この記事はFIXER 2nd Advent Calendar 2020 (https://adventar.org/calendars/5752) 9日目の記事です。
前日はこちら(https://tech-blog.cloud-config.jp/2020-12-08-power-apps-portal-webservice/)
FIXERの藤井です。今回は現在(2020年12月8日時点)、プレビューとして公開されている「Azure AD認証を利用したLinx VMへのログイン」について、「Cent OS / Ubuntu」の2パターンで検証し、最終的なゴールとして「Linuxへのログインログ」がどんな形で残されているかを確認します。
本記事の前提知識として理解しておくべき事項
Azure AD 認証について
Azure AD 認証とはVMのログインなど各種システムでのユーザー認証(アクセスを要求しているアカウントを特定する処理)において、アクセス対象の各システム自身が認証情報(最も単純な例ではIDとパスワードの組み合わせ)を保有せず、Azure Active Directory に保有されている認証情報を参照して認証を行うことです。Azure AD認証を利用することで以下のようなメリットがあります。
- 認証情報をAzure Active Directoryで集中管理するため、入退社や異動時にユーザーの追加/削除の作業が簡略化されます。対象のシステムの数だけ作業が必要だったのが、Azure Active Directoryの1か所のみで完了します。
- セキュリティが向上します。MFAなどAzure Active Directoryのセキュリティ機能が利用できます。
- システム基盤の管理する工数もAzure ADを利用することで削減されます。
Linux VMでのAzure AD認証がサポートされる意義
Azure Active Directory及びその原型となったActive Directoryは、そもそもWindows OSを対象にしたテクノロジーで、かつてはMac OSやLinux OSに対するWindows OSの最大の差別化ポイントとされていました。そのAzure Active DirectoryがLinux環境でもサポートされるということは、今のMicorosoft がもはやOSSを敵視する姿勢がみじんもなく、「Microsoft Loves Linux」のスローガンが「リップサービス」ではなく、本当の本気の戦略転換であることの象徴とも言えます。
Azure CLIについて
今回の検証作業ではAzure CLIというツールを使用します。Microsoft Azureで提供される以下の純正のCUI( Command-Line User Interface )としては、以下の2種類が存在し、今回はテーマが 「Linux on Azure」がテーマですので、Azure CLIを利用します。
- Azure PowerShell : Windows ユーザー向けでPowerSehllをベースにしています
- Azure CLI : Mac OS及びLinux OSユーザー向けでPythonをベースにしています
Azure CLIの詳細について はMicorosoft 公式サイトを併せてご参照ください。
検証内容詳細
本記事の検証内容はMicrosoft 公式ドキュメントにてチュートリアルとして紹介されている手順をベースにしています。
1.準備編
検証対象の各Linux 仮想マシン(Cent OS / Ubuntu)を構築する前に「Azure AD ユーザー」及び「リソースグループと仮想ネットワーク」を作成します。
1.1.Azure AD ユーザーを作成する
(1) Azure Portal にてAzure ADよりユーザー > 「新しいユーザー」を開きユーザーを作成します。

(2)作成したユーザーでAzure Portalにログインできることが確認できればOKです。

1.2.リソースグループと仮想ネットワークを作成する
(1)以下のコマンドによりリソースグループ「techblog-rg」を作成します。
az group create --name techblog-rg --location japaneast
(2)以下のコマンドにより仮想ネットワーク「techblog-vnet」および「linux-subnet」を作成します。
az network vnet create -g techblog-rg -n techblog-vnet --address-prefix 10.0.0.0/16 --subnet-name linux-subnet --subnet-prefix 10.0.0.0/24
(3)下図のように仮想ネットワークが作成されていればOKです。

2.Cent OS編
2.1.Cent OS仮想マシンを構築する
(1)自端末にて以下のコマンドによりCent OSの仮想マシンを構築します。
az vm create --admin-username localadmin --admin-password 【任意のパスワード】 -n centos -g techblog-rg --location japaneast --vnet-name techblog-vnet --subnet linux-subnet --public-ip-address-allocation static --image CentOS --size Standard_A2 --generate-ssh-keys
(2)構築が完了したら以下のコマンドによりパブリックIPアドレスを確認します。
az vm show --resource-group techblog-rg --name centos -d --query publicIps -o tsv
(3)自端末にて「localadmin」を使用して仮想マシンに自端末からログインします。ログイン時にパスワード入力が必須です。
ssh -l localadmin
【パブリックIPアドレス】
(4)ログインができたら以下のコマンドにより「localadmin」でのログイン履歴を確認します。
lastlog -u localadmin
(5)ログイン履歴の例は以下です。

2.2.Azure AD認証を構成する
(1)以下のコマンドによりAzure AD拡張機能をインストールします。
az vm extension set --publisher Microsoft.Azure.ActiveDirectory.LinuxSSH --name AADLoginForLinux --resource-group techblog-rg --vm-name centos
(2)以下のコマンドにより仮想マシン ロールの割り当てを構成します。
$username="【AzureADユーザー@ドメイン名】"
$vm=$(az vm show --resource-group techblog-rg --name centos --query id -o tsv)
az role assignment create --role "Virtual Machine Administrator Login" --assignee $username --scope $vm
2.3.ログインを試してみる
(1)自端末から「AzureADユーザー」を使用して仮想マシンに自端末からログインします
ssh -l "【AzureADユーザー@ドメイン名】"
【パブリックIPアドレス】
(2)以下のコマンドによりログインを実行します。
lastlog -u "【AzureADユーザー@ドメイン名】"
(3)ブラウザで認証画面にアクセスし認証コードを入力するようメッセージが表示されるのでEnterキーを押した後に、ブラウザで指示されたURLにアクセスします。

(4)認証コードを入力します。

(5)Azure ADアカウントを入力します。

(6)以下のように表示されたらOKです。

(7)以下のコマンドよりログイン履歴を確かめます。
lastlog -u "【AzureADユーザー@ドメイン名】"
(8)ログイン履歴の例は以下です。

3.Ubuntu編
3.1.Ubuntu仮想マシンを構築する
(1)自端末にて以下のコマンドによりUbuntuの仮想マシンを構築します。
az vm create --admin-username localadmin --admin-password 【任意のパスワード】 -n ubuntu -g techblog-rg --location japaneast --vnet-name techblog-vnet --subnet linux-subnet --public-ip-address-allocation static --image UbuntuLTS --size Standard_A2 --generate-ssh-keys
(2)構築が完了したら以下のコマンドによりパブリックIPアドレスを確認します。
az vm show --resource-group techblog-rg --name ubuntu -d --query publicIps -o tsv
(3)以下、Cent OSの場合と同様にlocaladminでログインし、ログイン履歴を確認します。ログイン履歴の例は以下です。

3.2.Azure AD認証を構成する
(1)以下のコマンドによりAzure AD拡張機能をインストールします。
az vm extension set --publisher Microsoft.Azure.ActiveDirectory.LinuxSSH --name AADLoginForLinux --resource-group techblog-rg --vm-name ubuntu
(2)以下のコマンドにより仮想マシン ロールの割り当てを構成します。
$username="【AzureADユーザー@ドメイン名】"
$vm=$(az vm show --resource-group techblog-rg --name ubuntu --query id -o tsv)
az role assignment create --role "Virtual Machine Administrator Login" --assignee $username --scope $vm
3.3.ログインを試してみる
Cent OSの場合と同様にAzure AD ユーザーでログインし、ログイン履歴を確認します。ログイン履歴の例は以下です。

結果のまとめ
構築手順的にはCnet OSとUbuntuで全くと言ってよいほど、差が無いと言えます。唯一の差はVMの構築時に--imageパラメータ(OS種別)として、「CentOS」を指定するか、「UbuntuLTS」を指定するかの違いだけです。実は藤井はCent OSしか経験が無く、Ubuntuはほぼ初体験だったのですが全く同じ感覚できました。最初にCent OSで手順を確立させたら、後は単純作業の要領でUbuntuもできました。
サポート対象のLinuxはほかにもございますので、是非皆さんもお試しあれ。