🍎

オンプレミス AD DS と Azure Files を連携させる

2023/05/02に公開

オンプレミス AD DS と Azure Files を連携させる

既存の オンプレミスファイルサーバー の リプレース などがあると「クラウドリフト してみようか?」という話もあるかと思います。
Azure Files であれば、オンプレミス AD DS と連携させることができるので、ファイルサーバー の移行先として、いかがでしょうか。

やってみる

Azure Files の作成から、オンプレミス AD DS と Azure Files を連携させてマウントできることを確認するまで、行ってみます。

  • Azure Files を作成する
  • Azure Files をキー認証でマウントする
  • Azure Files で オンプレミス AD DS 認証を有効化する
  • Azure Files 共有アクセス権を付与する
  • Azure Files をオンプレミス AD DS 認証でマウントする

検証環境の全体構成

今回検証環境は、こんな感じで作っていきます。

  • 前提

    • オンプレミス側には、AD DS を用意しておき、Azure AD Connect Cloud Sync で Azure AD と同期済みです。
    • AADSyncUsers OU 内の demouser01 と demouser02 がハイブリッド ID として構成済みのユーザーです。
  • 今回の検証

    • Azure 側には Storag Account を作成し、ファイル共有 ( Azure Files ) を作成していきます。
    • 作成した Azure Files は、オンプレミス AD DS にドメイン参加させ、オンプレミス環境内 の クライアント からマウントして利用してみます。


検証環境の構成

参考:Azure AD Connect Cloud Sync で Azure AD と同期済みのユーザーを作成する手順

参考記事

今回、赤枠部分にあたる、ハイブリッドID の作成については事前に終えています。
この Azure AD Connect Cloud Sync で Azure AD と同期済みのユーザーを作成する手順は、以下の記事を参考にしてください。

https://zenn.dev/uedait/articles/qiita-20230501-6598ed09e96b122fa867


Step1. Azure Files を作成する

まずは色々やる前に、シンプルに、Azure Files を作成し、マウントしてみます。


基本のキ

Azure Files は、Storage Accont の中に ファイル共有 を作成することで、利用することができます。
Azure Files というリソースを直接作成するわけではないので注意です。

1-1. Storage Account を作成する

このあたりは特に説明することも無いですが、ほぼ既定値のまま、作成をしていきます。

グローバルでユニークとなるストレージアカウント名 を指定します。
リージョンは Japan East としています。
本番利用の際には、パフォーマンス目標 や 冗長性を考慮する必要があります。


ストレージアカウント の作成

ネットワーク構成は ゆくゆくは変更をしていきますが、今回は変更せず、既定のまま作成を完了しています。
既定では、インターネットからの通信を受け付けます。
もし インターネット側からの接続を制限したいという場合、例えば 接続元のIPアドレスを限定する場合などには、 [ネットワークアクセス] の箇所を変更する必要があります。


ストレージアカウント の作成 - ネットワークタブ

1-2. Storage Account 内に Azure Files を作成する

ストレージアカウントの作成が完了したら、ファイル共有を作成していきます。
ストレージアカウントの [ファイル共有] を選択し、[ファイル共有] をクリックして、ファイル共有の名前を付けます。


Azure Files の作成


Azure Files の作成完了

1-3. キー認証 でマウントする - Azure Portal で スクリプト を確認

さて、これでAzure Files の作成が終わりましたので、もし手軽に利用できるクラウド上のファイルサーバーが欲しいという場合には、早速使ってみることができます。
接続のための PowerShell スクリプトを Azure Portal 上で確認できますので、これを利用してマウントしてみます。

作成した Azure Files の 右端 […] をクリックして、 [接続] をクリックすると、接続のための PowerShell スクリプトが表示されます。


接続のための PowerShell スクリプト を表示する

ドライブレターを指定して、ストレージアカウント キー を利用した認証方法を選択し、[Show Script] で PowerShell スクリプトを表示します。


接続のための PowerShell スクリプト を表示する - ドライブレター や 認証方法の指定

表示された Powershell を全てコピーして、マウントを行いたい クライアント上で PowerShell を起動し、貼り付けて実行すればマウントできます。


表示されたスクリプト

表示されたスクリプト
$connectTestResult = Test-NetConnection -ComputerName <ストレージアカウント名>.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # 再起動時にドライブが維持されるように、パスワードを保存する
    cmd.exe /C "cmdkey /add:`"<ストレージアカウント名>.file.core.windows.net`" /user:`"localhost\<ストレージアカウント名>`" /pass:`"********`""
    # ドライブをマウントする
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<ストレージアカウント名>.file.core.windows.net\<ファイル共有名>" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

なお、赤枠部分を確認すると、
/user: として ストレージアカウント名 を
/pass: として ストレージアカウント キー(key1) を
指定していることがわかります。


ストレージアカウント の アカウント名 と キー

1-4. キー認証 でマウントする - クライアント から マウントしてみる

オンプレミス の クライアントPC (windows 11) に、 demouser01@contoso.local (contoso.local\demouser01) でログインをした状態です。
当然まだ Azure Files はマウントしていません。


Azure Files マウント前

1-3. のスクリプトを実行します。
インターネット経由で、Azure Files に接続し、マウントが行われました。


Azure Files マウント完了!

作成された ファイル共有 を確認してみます。
ファイルやフォルダ の 追加 や 削除 が出来ました。


クライアント側動作確認

なお、Azure Portal 側で確認すると、保存されたファイルが確認できます。

Azure Portal での確認

非常に簡単にクラウドのファイルサーバー利用を開始できました。
個人利用など、簡単な利用用途であれば問題なく使えそうです。なお、容量は 既定で 5TB あります。


Step2 - Azure Files で オンプレミス AD DS 認証を有効化する

オンプレ AD DS との連携を試してみます。
Azure Files と オンプレ AD DS との連携は こちらの公開情報 "オプション 1 (推奨):AzFilesHybrid PowerShell モジュールを使用する" に従って、オンプレミスの ドメイン参加済み サーバー上で Powershell を実行して構成をします。
また、こちらのサポートブログ "オンプレ AD DS 認証を利用した Azure ファイル共有マウント手順" も非常に有用です。

AzFilesHybrid PowerShell モジュール を使うことで、ストレージ アカウントをオンプレミスの Active Directory にドメイン参加させることができます。


オンプレ AD DS との連携

2-0. Azure Portal 上での様子

現時点では、Azure Portal 上では [Active Directory:構成されていません] と表示されている状況です。

Azure Portal 上での様子


Azure Portal で AD 参加前の確認


Azure Portal で リンクをクリックして表示されるチュートリアル

Azure Portal 上では構成状況が確認できるだけで、オンプレ AD DS との連携は、 Azure Portal からは構成できません。

2-1. オンプレ AD DS との連携を行うサーバーを準備する

オンプレミスの ドメイン参加済み サーバー上で Powershell を実行して構成をしますが、
AzFilesHybrid PowerShell モジュール を利用するには、以下の条件があります。
前提条件

それぞれ確認していきましょう。

2-1-1. .NET Framework のバージョンを確認する

Windows Server 2019 以降であれば、既定で 4.7.2 以降がインストールされているはずです。
以下 Powershell で実行することでバージョンを確認できます。

PowerShell - .NET Framework のバージョン確認用スクリプト
$release = Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release
switch ($release) {
    { $_ -ge 533320 } { $version = '4.8.1 or later'; break }
    { $_ -ge 528040 } { $version = '4.8'; break }
    { $_ -ge 461808 } { $version = '4.7.2'; break }
    { $_ -ge 461308 } { $version = '4.7.1'; break }
    { $_ -ge 460798 } { $version = '4.7'; break }
    { $_ -ge 394802 } { $version = '4.6.2'; break }
    { $_ -ge 394254 } { $version = '4.6.1'; break }
    { $_ -ge 393295 } { $version = '4.6'; break }
    { $_ -ge 379893 } { $version = '4.5.2'; break }
    { $_ -ge 378675 } { $version = '4.5.1'; break }
    { $_ -ge 378389 } { $version = '4.5'; break }
    default { $version = $null; break }
}

if ($version) {
    Write-Host -Object ".NET Framework Version: $version"
} else {
    Write-Host -Object '.NET Framework Version 4.5 or later is not detected.'
}


.NET Framework のバージョン確認用スクリプトの実行結果

今回用意したサーバー は Windows Server 2022 でしたので、既定で 4.8 がインストールされていました。

2-1-2. Azure PowerShell をインストールする

以下を実行することで、Azure PowerShell をインストールできます。
Az PowerShell モジュールをインストールすることで、Az.Storage モジュールもインストールされます。

Azure PowerShell をインストールする
# PowerShellGet を更新します。
Install-Module -Name PowerShellGet –Force

# PowerShell 実行ポリシーを確認
Get-ExecutionPolicy -List

# PowerShell 実行ポリシーをリモート署名済みに設定
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Az PowerShell モジュールをインストールする
Install-Module -Name Az -Repository PSGallery -Force

# Az.Storage モジュールがインストールされているかを確認する
Get-Command -Module Az.* | Where-Object { $_.Source -eq 'Az.Storage' }


Az PowerShell モジュールをインストール


Az.Storage モジュールがインストールされていることを確認

2-1-3. Active Directory PowerShell モジュールをインストールする

Active Directory を管理するための コマンド類が、Active Directory PowerShell モジュールです。
Remote Server Administration Tools (RSAT) をインストールすることで、Active Directory PowerShell モジュールもインストールされます。
今回は RSAT 内の Active Directory PowerShell モジュール が RSAT-AD-PowerShell であることを確認し、インストールを行います。

Active Directory PowerShell モジュールを探す
# Active Directory PowerShell モジュールを探す
Get-WindowsFutureture
Active Directory PowerShell モジュールをインストール
# Active Directory PowerShell モジュールをインストール
Install-WindowsFutureture -Name RSAT-AD-PowerShell


Active Directory PowerShell モジュールをインストール


Active Directory PowerShell モジュールを確認

2-2. AzFilesHybrid モジュールをダウンロードして解凍する

AzFilesHybrid モジュール を ダウンロード して 解凍 します。
公開ドキュメントの手順はこちら

最新バージョン をダウンロードして解凍します。
なお、2023/05/02 時点では、v0.2.7 が最新バージョンでした。

https://github.com/Azure-Samples/azure-files-samples/releases

保存先は適宜 temp フォルダ等に変更してください。

AzFiles ハイブリッドモジュールをダウンロード
# 最新版をダウンロードする。2023/05/02 時点では、v0.2.7 が最新
Invoke-WebRequest https://github.com/azure-samples/azure-files-samples/releases/download/v0.2.7/azfileshybrid.zip -OutFile C:\azfileshybrid.zip
AzFiles ハイブリッドモジュールを解凍する
# ダウンロードしたファイルを展開する
Expand-Archive -Path C:\azfileshybrid.zip -DestinationPath C:\azfileshybrid


AzFiles ハイブリッドモジュールを解凍

2-3. Join-AzStorageAccount を実行する

AzFiles ハイブリッドモジュールを解凍したら、解凍したフォルダに移動し、Join-AzStorageAccount を実行します。
Join-AzStorageAccount を実行することで、ストレージ アカウント の ドメイン参加相当(コンピューター アカウントを作成)の処理行われます。

スクリプト実行にあたり、まずは、AzFiles ハイブリッドモジュールを解凍したフォルダに移動します。
カレントディレクトリを移動しておかないと失敗するようです。

カレントディレクトリを移動する
cd C:\azfileshybrid

Join-AzStorageAccount を実行します。
公開ドキュメントからいくつかコメントアウトしてあります。また、以下のパラメーターは環境にあわせて入力します。

  • SubscriptionId : Azure サブスクリプション ID
  • ResourceGroupName : Azure リソースグループ名
  • StorageAccountName : Azure ストレージアカウント名
  • DomainAccountType : Azure Files に参加するアカウントの種類

なお、オンプレミス AD にコンピューター アカウントを作成するスクリプトですので、オンプレミスAD に対して権限を持つ ユーザー で、AD参加済みマシン上で実行する必要があります。
今回は DomainAdmin で実行しています。

実行すると、Azure AD の認証ダイアログが表示されます。
Azure AD 側で最小限必要な権限は、

  • ターゲット ストレージ アカウントが配置されているリソース グループの閲覧者。
  • AD DS に参加するストレージ アカウントの共同作成者。

ですが、今回は サブスクリプションの所有者権限を持つアカウントで実行しています。

Join-AzStorageAccount を実行する

```PowerShell: Join-AzStorageAccount を実行する
# PowerShell 実行ポリシーをリモート署名済みに設定
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

# AzFilesハイブリッドモジュールをインポートする
.\CopyToPSPath.ps1 

# AzFilesハイブリッドモジュールをインポートする
Import-Module -Name AzFilesHybrid

# Azure に接続する
Connect-AzAccount

# パラメーターを設定
$SubscriptionId = "<your-subscription-id-here>"
$ResourceGroupName = "<resource-group-name-here>"
$StorageAccountName = "<storage-account-name-here>"
$DomainAccountType = "ComputerAccount" # Default is set as ComputerAccount
# $SamAccountName = "<sam-account-name-here>" # 今回は特に指定しないのでコメントアウト

# OU を input する場合
# $OuDistinguishedName = "<ou-distinguishedname-here>" # 今回は特に指定しないのでコメントアウト

# 暗号化タイプ を 指定
# $EncryptionType = "<AES256|RC4|AES256,RC4>" # 既定 AES256 で構成するのでコメントアウト

# Select the target subscription for the current session
Select-AzSubscription -SubscriptionId $SubscriptionId 

# Join the storage account to the domain
Join-AzStorageAccount `
        -ResourceGroupName $ResourceGroupName `
        -StorageAccountName $StorageAccountName `
        -DomainAccountType $DomainAccountType `

# You can run the Debug-AzStorageAccountAuth cmdlet to conduct a set of basic checks on your AD configuration 
# with the logged on AD user. This cmdlet is supported on AzFilesHybrid v0.1.2+ version. For more details on 
# the checks performed in this cmdlet, see Azure Files Windows troubleshooting guide.
Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose


Join-AzStorageAccount の実行結果

2-4. ストレージ アカウントで Active Directory が有効か確認

Join-AzStorageAccoun が無事に終了すれば、OKなはずですが、確認をしておきます。
どう確認するかはお好みでよいかとおもいますが、いくつか載せておきます。

ストレージ アカウントで Active Directory が有効になっているかどうかを確認
# Get the target storage account
$storageaccount = Get-AzStorageAccount `
        -ResourceGroupName "<your-resource-group-name-here>" `
        -Name "<your-storage-account-name-here>"

# List the directory service of the selected service account
$storageAccount.AzureFilesIdentityBasedAuth.DirectoryServiceOptions

# List the directory domain information if the storage account has enabled AD DS authentication for file shares
$storageAccount.AzureFilesIdentityBasedAuth.ActiveDirectoryProperties


PowerShell での確認

また、Active Directory に コンピューターアカウントが作成されていました。

Active Directory の確認

Azure Portal 上でも、表示が [Active Directory:構成済み ] となっていることが確認できます。

Azure Portal での確認


Step3. ファイル共有レベルのアクセス権限を付与する

Azure Files のアクセス権は、Azure AD から RBAC で制御する ファイル共有レベルの と AD DS から ACL で制御する ディレクトリ/ファイル レベルのアクセス権限 の2種類があります。
2つのアクセス権の組み合わせで、最終的なアクセス権限が決定されます。
詳細は公式ドキュメント "SMB でディレクトリとファイル レベルのアクセス許可を構成する" に記載があります。

まずは Azure AD から RBAC で制御する ファイル共有レベルのアクセス権限 を設定します。


Azure Portal での確認

3.1 Azure Portal から ストレージアカウント に対して ロール割り当てを行う

ストレージアカウントの [アクセス制御(IAM)] から、[+追加] を選択し、[ロール割り当て] を選択します。


ロール割り当ての開始

"SMB" などで検索し、ロールを選択します。
今回は、最も権限の強い 記憶域ファイル データの SMB 共有の管理者特権共同作成者 を選択します。


割り当てるロールの選択

ハイブリッドID を指定します。


ロール割り当て先の選定

割り当てが完了しました。


ファイル共有レベルのアクセス権限 付与完了

3.2 クライアント で マウントを試す

接続のための PowerShell スクリプトは、 Azure Portal 上で確認できます。
Azure Files の 右端 […] をクリックして、 [接続] をクリックし、[認証方法] として [Active Directory] を選択して、スクリプトを表示できます。

マウントの試行
$connectTestResult = Test-NetConnection -ComputerName <ストレージアカウント名>.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # ドライブをマウントする
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<ストレージアカウント名>.file.core.windows.net\file-share-sales" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}


AD DS 連携後のマウント用Powershellスクリプト

それでは、demouser01 でログインしたクライアントで、マウントを試します。
今回は、上記の PowerShell スクリプトではなく、シンプルに net use を用いて、マウントを試します。

net use Z: \\<ストレージアカウント名>.file.core.windows.net\file-share-sales


ハイブリッド ID でマウントを試す


成功しました

念のため、ハイブリッド ID ではないユーザーや、アクセス権を付与していないユーザーで、同様のマウントを試して失敗することを確認します。


ハイブリッド ID でないユーザーで試した例

おわりに


検証環境の構成

今回、以下の手順を確認して、検証環境を構成しました。

  • ストレージアカウントの作成 と ファイル共有の作成
  • AD DS 認証を有効化(オンプレミスサーバー側で Join-AzStorageAccount を実行)
  • ファイル共有レベルのアクセス権限 の設定

オンプレミス AD DS + FileServer の組み合わせは、多く利用されていると思います。
検証環境を構成し、移行が可能かどうか、検証をしていきたいと思います。

参考

https://jpaztech.github.io/blog/storage/addsAuthforAzureFiles/

https://learn.microsoft.com/ja-jp/azure/storage/files/storage-files-active-directory-overview#supported-authentication-scenarios

https://learn.microsoft.com/ja-jp/azure/storage/files/storage-files-identity-ad-ds-configure-permissions

https://learn.microsoft.com/ja-jp/azure/storage/files/storage-files-identity-ad-ds-enable#download-azfileshybrid-module

https://learn.microsoft.com/ja-jp/azure/architecture/hybrid/azure-files-private

Microsoft (有志)

Discussion