適用対象: ✔️ SMB Azure ファイル共有
この記事では、 マネージド ID を 使用して、Windows および Linux 仮想マシン (VM) が Microsoft Entra ID (プレビュー) による ID ベースの認証を使用して SMB Azure ファイル共有にアクセスできるようにする方法について説明します。
マネージド ID は、Azure によって自動的に管理される Microsoft Entra ID の ID です。 通常は、クラウド アプリケーションを開発するときにマネージド ID を使用して、Azure サービスに対する認証用の資格情報を管理します。
このガイドを終了すると、マネージド ID でアクセスできるストレージ アカウントが作成されます。 また、VM のマネージド ID を作成し、それに対して OAuth トークンを生成する方法についても説明します。 次に、マネージド ID ベースの認証と承認を使用してファイル共有をマウントし、ストレージ アカウント キーを使用する必要がなくなります。
マネージド ID を使用して認証する理由
セキュリティ上の理由から、ストレージ アカウント キーを使用してファイル共有にアクセスすることはお勧めしません。 VM にマネージド ID を割り当てたり、アプリケーション ID を使用したりする場合は、その ID を使用して Azure Files に対する認証を行うことができます。
次のような利点があります。
セキュリティ強化: 管理または公開するストレージ アカウント キーに依存しない
管理の簡素化: キーのローテーションは必要ありません
きめ細かいアクセス制御: ID レベルでのロールベースのアクセス
自動化に優しい: CI/CD パイプライン、Azure Kubernetes Service (AKS) ワークロード、および顧客アプリケーションと簡単に統合できます
コスト効率: マネージド ID は、追加のストレージ コストなしで使用できます
システム割り当てマネージド ID とユーザー割り当てマネージド ID
Azure には、システム割り当てとユーザー割り当ての 2 種類のマネージド ID があります。
システム割り当てマネージド ID はリソースごとに 1 つに制限され、このリソースのライフサイクルに関連付けられます。 マネージド ID には、Azure ロールベースのアクセス制御 (Azure RBAC) を使用してアクセス許可を付与できます。 マネージド ID は Microsoft Entra ID で認証されるため、資格情報をコードに保存する必要はありません。 Linux VM では、システム割り当てマネージド ID はサポートされていません。
ユーザー割り当てマネージド ID を使用すると、Azure リソースは、コードに資格情報を格納せずにクラウド サービスに対して認証を行うことができます。 この種類のマネージド ID は、スタンドアロンの Azure リソースとして作成され、独自のライフサイクルがあります。 VM などの 1 つのリソースは、複数のユーザー割り当てマネージド ID を利用できます。 同様に、1 人のユーザー割り当てマネージド ID を複数の VM 間で共有できます。
Windows VM では、ユーザー割り当てマネージド ID とシステム割り当てマネージド ID の両方を構成できます。
[前提条件]
この記事では、ストレージ アカウントを作成し、Azure Role-Based アクセス制御 (RBAC) ロールを割り当てるアクセス許可を持つ Azure サブスクリプションがあることを前提としています。 ロールを割り当てるには、指定したスコープでロールの割り当て権限(Microsoft.Authorization/roleAssignments/write)が必要です。
さらに、マネージド ID を使用して認証する必要があるクライアントは、どのドメインにも参加させるべきではありません。
PowerShell 環境を準備する
管理者として PowerShell を開き、次のコマンドを実行して PowerShell 実行ポリシーを設定します。
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
最新の PowerShellGet があることを確認します。
Install-Module PowerShellGet -Force -AllowClobber
まだインストールされていない場合は、Az モジュールをインストールします。
Install-Module -Name Az -Repository PSGallery -Force
Import-Module Az
Azure にサインインします。
Connect-AzAccount
サブスクリプション ID を指定してサブスクリプションを選択します (推奨):
Set-AzContext -SubscriptionId "<subscription-ID>"
サブスクリプション名を指定して、サブスクリプションを選択することもできます。
Set-AzContext -Subscription "<subscription-name>"
ストレージ アカウントでマネージド ID アクセス プロパティを構成する
マネージド ID を認証するには、アクセスする Azure ファイル共有を含むストレージ アカウントで SMBOAuth というプロパティを有効にする必要があります。 この目的のために、新しいストレージ アカウントを作成することをお勧めします。 既存のストレージ アカウントは、他の ID ソースが構成されていない場合にのみ使用できます。
SMBOAuth を有効にして新しいストレージ アカウントを作成するには、管理者として次の PowerShell コマンドを実行します。
<resource-group>、<storage-account-name>、<region> を独自の値で置き換えます。 必要に応じて、別の SKU を指定できます。
New-AzStorageAccount -ResourceGroupName <resource-group> -Name <storage-account-name> -SkuName Standard_LRS -Location <region> -EnableSmbOAuth $true
既存のストレージ アカウントで SMBOAuth を有効にするには、次の PowerShell コマンドを実行します。
<resource-group> と <storage-account-name> を独自の値に置き換えます。
Set-AzStorageAccount -ResourceGroupName <resource-group> -Name <storage-account-name> -EnableSmbOAuth $true
リソースがポリシーによって許可されなかったというエラーが表示された場合は、サブスクリプションにポリシーが設定され、 Set-AzStorageAccountが許可されていない可能性があります。 回避するには、次のコマンドを使用して再試行します。
Set-AzStorageAccount -ResourceGroupName <resource-group> -Name <storage-account-name> -EnableSmbOAuth $true -AllowBlobPublicAccess $false
次に、ストレージ アカウントに SMB ファイル共有を作成します。
<resource-group>、<storage-account-name>、<file-share-name> を独自の値で置き換えます。
$storageAccount = Get-AzStorageAccount -ResourceGroupName <resource-group> -Name <storage-account-name>
New-AzStorageShare -Name <file-share-name> -Context $storageAccount.Context
これで、ストレージ アカウントとファイル共有を SMB OAuth 認証の準備ができました。 Azure portal で、ストレージ アカウントとファイル共有が作成されたことを確認します。
マネージド ID を構成する
マネージド ID は、Windows または Linux で使用できます。 適切なタブを選択し、オペレーティング システムの指示に従います。
ここで説明する有効化手順は、Azure VM 用です。 Azure 以外の Windows マシン (オンプレミスまたは他のクラウド) でマネージド ID を有効にする場合は、 それらを Azure Arc にオンボードし、マネージド ID を割り当てる必要があります。 VM または Windows デバイスでマネージド ID を使用する代わりに、アプリケーション ID を使用して認証することもできます。
Azure VM でマネージド ID を有効にする
Azure VM でマネージド ID を有効にするには、次の手順に従います。
Azure portal にサインインし、Windows VM を作成します。 VM で、サーバー SKU または任意の Windows クライアント SKU に対して Windows Server 2019 以降が実行されている必要があります。 Azure portal での Windows 仮想マシンの作成に関するページを参照してください。
VM でマネージド ID を有効にします。 システム割り当てまたはユーザー割り当てのいずれかを指定できます。 VM にシステム割り当て ID とユーザー割り当て ID の両方がある場合、Azure は既定でシステム割り当て済みになります。 最適な結果を得るには、1 つだけ割り当てます。 VM の作成時に、[ 管理 ] タブでシステム割り当てマネージド ID を有効にすることができます。
マネージド ID またはアプリケーション ID に組み込みの RBAC ロールを割り当てる
マネージド ID が有効になったら、Azure RBAC を介して必要なすべてのアクセス許可を付与できます。 ロールを割り当てるには、ロールを割り当てるスコープでロールの割り当て書き込みアクセス許可を持つユーザーとしてサインインする必要があります。
次の手順に従って、組み込みの Azure RBAC ロール Storage File Data SMB MI Admin を割り当てます。これにより、Azure Files 内のファイルとディレクトリのマネージド ID に対する管理者レベルのアクセスが許可されます。
マネージド ID を使用してマウントするファイル共有を含むストレージ アカウントに移動します。 サービス メニューから [アクセス制御 (IAM)] を選択します。
[このリソースへのアクセス権の付与] で [ロールの割り当ての追加] を選択します。
[ ロール ] タブの [ジョブ関数ロール] で、 ストレージ ファイル データ SMB MI 管理者を検索して選択し、[ 次へ] を選択します。
[ メンバー ] タブの [ アクセスの割り当て] で、VM または Azure Arc ID のマネージド ID を選択します。 アプリケーション ID の場合は、[ ユーザー、グループ、またはサービス プリンシパル] を選択します。
[ メンバー] で、[ + メンバーの選択] をクリックします。
Azure VM または Azure Arc ID の場合は、VM または Windows デバイスのマネージド ID を選択します。 アプリケーション ID の場合は、アプリケーション ID を検索して選択します。 [選択] をクリックします。
これで、[ メンバー] の下にマネージド ID またはアプリケーション ID が表示されます。 [次へ] を選択します。
[ 確認と割り当て] を選択して、ロールの割り当てをストレージ アカウントに追加します。
マネージド ID を使用して認証するようにクライアントを準備する
マネージド ID 認証を使用してファイル共有をマウントするようにシステムを準備するには、次の手順に従います。 手順は、Windows クライアントと Linux クライアントでは異なります。 クライアントをドメインに参加させるべきではありません。
マネージド ID を使用して認証するようにクライアント VM または Windows デバイスを準備するには、次の手順に従います。
マネージド ID が割り当てられている VM またはデバイスにログインし、管理者として PowerShell ウィンドウを開きます。 PowerShell 5.1 以降または PowerShell 7 以降が必要です。
Azure Files SMB マネージド ID クライアント PowerShell モジュールをインストールしてインポートします。
Install-Module AzFilesSMBMIClient Import-Module AzFilesSMBMIClient次のコマンドを実行して、現在の PowerShell 実行ポリシーを確認します。
Get-ExecutionPolicy -ListCurrentUser の実行ポリシーが Restricted または Undefined の場合は、 RemoteSigned に変更します。 実行ポリシーが RemoteSigned、 Default、 AllSigned、 Bypass、または Unrestricted の場合は、この手順をスキップできます。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
認証資格情報を更新する
マネージド ID を使用してファイル共有をマウントする前に、認証資格情報を更新し、ストレージ アカウント エンドポイントを指定する必要があります。 ストレージ アカウント URI をコピーするには、Azure portal でストレージ アカウントに移動し、サービス メニューから >Endpoints] を選択します。 末尾のスラッシュを含む URI 全体をコピーしてください。 https://<storage-account-name>.file.core.windows.net/
AzFilesSMBMIClient.exe refresh --uri https://<storage-account-name>.file.core.windows.net/
これにより、OAuth トークンが取得され、Kerberos キャッシュに挿入され、トークンの有効期限が近づくと自動更新されます。 必要に応じて、 refreshを省略できます。
Windows VM にユーザー割り当てマネージド ID とシステム割り当てマネージド ID の両方が構成されている場合は、次のコマンドを使用して、ユーザー割り当てマネージド ID を指定できます。
<client-id>をマネージド ID のクライアント ID に置き換えます。
AzFilesSmbMIClient.exe refresh --uri https://<storage-account-name>.file.core.windows.net/ --clientId <client-id>
ヒント
完全な使用状況情報と例を表示するには、パラメーターを指定せずに実行可能ファイルを実行します。 AzFilesSmbMIClient.exe
ファイル共有をマウントする
ストレージ アカウント キーを使用せずに、Windows または Linux でファイル共有をマウントできるようになりました。
Windows クライアントでは、Windows エクスプローラーに次のように入力することで、UNC パスを使用して Azure ファイル共有に直接アクセスできます。
<storage-account-name>は必ずストレージ アカウント名に置き換え、<file-share-name>はファイル共有名に置き換えてください。
\\<storage-account-name>.file.core.windows.net\<file-share-name>
詳細については、「 Windows での SMB Azure ファイル共有のマウント」を参照してください。
トラブルシューティング
Windows クライアントと Linux クライアントでは、トラブルシューティングの手順が異なります。
Windows でファイル共有をマウントするときに問題が発生した場合は、次の手順に従って詳細ログを有効にし、診断情報を収集します。
Windows クライアントでは、レジストリ エディターを使用して、詳細度のデータ レベルを
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Azure\Storage\Files\SmbAuthの0x00000004 (4) に設定します。共有をもう一度マウントして、エラーを再現してください。
これで、
AzFilesSmbMILog.logという名前のファイルが作成されます。 ログ ファイルを azurefilespm@microsoft.com に送信して支援を受けてください。
クライアント ライブラリのインストールと統合のオプション
次の情報は、マネージド ID をアプリケーションに統合する必要がある開発者を対象としています。
マネージド ID を Windows アプリケーションに統合する必要がある開発者は、アプリケーションのアーキテクチャと要件に応じて複数の実装方法を使用できます。
マネージド アセンブリ統合: NuGet パッケージ
.NET アプリケーションの場合、 Microsoft.Azure.AzFilesSmbMI NuGet パッケージには、SMB OAuth 認証機能への直接アクセスを提供するマネージド アセンブリ (Microsoft.Azure.AzFilesSmbMI.dll) が含まれています。 このアプローチは、C# およびその他の .NET ベースのアプリケーションに推奨されます。
取り付け: Install-Package Microsoft.Azure.AzFilesSmbMI -version 1.2.3168.94
DLL のネイティブ統合
直接 API アクセスを必要とするネイティブ アプリケーションの場合、AzFilesSmbMIClient は ネイティブ DLL として使用できます。 これは、下位レベルの統合を必要とする C/C++ アプリケーションまたはシステムに特に役立ちます。 Windows 実装と API リファレンス (ネイティブ ヘッダー ファイル) を参照してください。
ネイティブ API メソッド
ネイティブ DLL は、資格情報管理のために次の主要な方法をエクスポートします。
extern "C" AZFILESSMBMI_API HRESULT SmbSetCredential(
_In_ PCWSTR pwszFileEndpointUri,
_In_ PCWSTR pwszOauthToken,
_In_ PCWSTR pwszClientID,
_Out_ PDWORD pdwCredentialExpiresInSeconds
);
extern "C" AZFILESSMBMI_API HRESULT SmbRefreshCredential(
_In_ PCWSTR pwszFileEndpointUri,
_In_ PCWSTR pwszClientID
);
extern "C" AZFILESSMBMI_API HRESULT SmbClearCredential(
_In_ PCWSTR pwszFileEndpointUri
);