【検証】Linux on Azure ( CentOS / Ubuntu ) ~ Azure AD 認証を利用して Azure VM Linux にログインする~
2020-12-09
azblob://2022/11/11/eyecatch/2020-12-09-linux-on-azure-ubuntu-centos-login-from-azure-ad-000.jpg

この記事は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はほかにもございますので、是非皆さんもお試しあれ。