REST 経由の Azure Files OAuth を使用すると、REST API ベースのアクセスに Microsoft Entra ID を使用して、 OAuth 認証プロトコルを使用して、ユーザーとアプリケーションの Azure ファイル共有への管理者レベルの読み取りと書き込みアクセスが可能になります。 ユーザー、グループ、Azure portal などのファースト パーティのサービス、REST インターフェイスを使用するサード パーティのサービスとアプリケーションで、Microsoft Entra アカウントで OAuth 認証と承認を使用して、Azure ファイル共有内のデータにアクセスできるようになりました。 REST API を呼び出す PowerShell コマンドレットと Azure CLI コマンドでは、OAuth を使用して Azure ファイル共有にアクセスすることもできます。 追加の特権を使用する意図を示すには、明示的なヘッダーを使用して REST API を呼び出す必要があります。 これは、Azure PowerShell と Azure CLI のアクセスにも当てはまります。
重要
この記事では、特定の 顧客のユース ケースに対して Azure ファイル共有への管理者レベルのアクセスを有効にする方法について説明します。 エンド ユーザーの ID ベースの認証に関するより一般的な記事をお探しの場合は、「 SMB アクセスのための Azure Files ID ベースの認証の概要」を参照してください。
対象
管理モデル | 課金モデル | メディア階層 | 冗長性 | 中小企業 | ネットワークファイルシステム(NFS) |
---|---|---|---|---|---|
Microsoft.Storage | プロビジョニング済み v2 | HDD (標準) | ローカル (LRS) |
![]() |
![]() |
Microsoft.Storage | プロビジョニング済み v2 | HDD (標準) | ゾーン (ZRS) |
![]() |
![]() |
Microsoft.Storage | プロビジョニング済み v2 | HDD (標準) | ジオ (GRS) |
![]() |
![]() |
Microsoft.Storage | プロビジョニング済み v2 | HDD (標準) | ジオゾーン (GZRS) |
![]() |
![]() |
Microsoft.Storage | プロビジョニング済み v1 | SSD (プレミアム) | ローカル (LRS) |
![]() |
![]() |
Microsoft.Storage | プロビジョニング済み v1 | SSD (プレミアム) | ゾーン (ZRS) |
![]() |
![]() |
Microsoft.Storage | 従量課金制 | HDD (標準) | ローカル (LRS) |
![]() |
![]() |
Microsoft.Storage | 従量課金制 | HDD (標準) | ゾーン (ZRS) |
![]() |
![]() |
Microsoft.Storage | 従量課金制 | HDD (標準) | ジオ (GRS) |
![]() |
![]() |
Microsoft.Storage | 従量課金制 | HDD (標準) | ジオゾーン (GZRS) |
![]() |
![]() |
制限事項
Microsoft Entra ID を使用したファイル データ操作の承認は、REST API バージョン 2022-11-02 以降でのみサポートされます。
FileService リソースと FileShare リソースを管理する Azure Files REST データ プレーン API に対する REST 経由の Azure Files OAuth のサポートは、REST API バージョン 2024-11-04 以降で利用できます。
「Azure Storage のバージョン管理」を参照してください。
顧客のユース ケース
REST API インターフェイスを介した Azure Files での OAuth 認証と承認は、次のシナリオでお客様に役立ちます。
アプリケーション開発とサービス統合
OAuth 認証と承認により、開発者は Microsoft Entra ID のユーザー ID またはアプリケーション ID を使用して Azure Storage REST API にアクセスするアプリケーションを構築できます。
顧客とパートナーは、ファースト パーティおよびサード パーティのサービスを有効にして、顧客のストレージ アカウントに対して必要なアクセスを安全かつ透過的に構成することもできます。
Azure portal、PowerShell、CLI、AzCopy、Storage Explorer などの DevOps ツールでは、ユーザーの ID を使用してデータを管理できるため、ストレージ アクセス キーを管理または配布する必要がなくなります。
管理されたアイデンティティー
バックアップ、復元、または監査の目的でファイル共有データへのアクセスを必要とするアプリケーションとマネージド ID をお持ちのお客様は、OAuth の認証と承認の恩恵を受けることができます。 各 ID に対してファイル レベルおよびディレクトリ レベルのアクセス許可を適用すると、複雑さが増し、特定のワークロードと互換性がない可能性があります。 たとえば、お客様は、ファイル固有のアクセス許可に関係なく、すべてのファイルへの読み取り専用アクセス権を持つ Azure ファイル共有にアクセスするバックアップ ソリューション サービスを承認することができます。
ストレージ アカウント キーの置換
Microsoft Entra ID は、共有キー アクセスよりも優れたセキュリティと使いやすさを提供します。 ストレージ アカウント キーのアクセスを OAuth 認証と承認に置き換えて、読み取り/書き込みすべての特権で Azure ファイル共有にアクセスできます。 この方法では、特定のユーザー アクセスの監査と追跡も向上します。
データ操作の特権アクセスとアクセス許可
REST 経由の Azure Files OAuth 機能を使用するには、ユーザー、グループ、またはサービス プリンシパルに割り当てられた RBAC ロールに含める必要がある追加のアクセス許可があります。 この機能の一部として、次の 2 つの新しいデータ アクションが導入されています。
Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/action
Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
OAuth で REST API を呼び出すユーザー、グループ、またはサービス プリンシパルには、データ アクセスを許可するロールに readFileBackupSemantics
または writeFileBackupSemantics
アクションが割り当てられている必要があります。 これは、この機能を使用するための要件です。 特定のファイル サービス操作を呼び出すために必要なアクセス許可の詳細については、「データ操作を 呼び出すためのアクセス許可」を参照してください。
この機能には、これらの新しいアクションを含む 2 つの新しい組み込みロールが用意されています。
役割 | データ アクション |
---|---|
ストレージ ファイル データ権限を持つ閲覧者 | Microsoft.Storage/storageAccounts/fileServices/fileShares/files/read Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/action |
ストレージ ファイル データ権限付き共同作成者 | Microsoft.Storage/storageAccounts/fileServices/fileShares/files/read Microsoft.Storage/storageAccounts/fileServices/fileShares/files/write Microsoft.Storage/storageAccounts/fileServices/fileShares/files/delete Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action |
これらの新しいロールは、既存の ストレージ ファイル データ SMB 共有閲覧者 ロールと ストレージ ファイル データ SMB 共有管理者特権共同作成者 組み込みロールに似ていますが、いくつかの違いがあります。
新しいロールには、OAuth アクセスに必要な追加のデータ アクションが含まれています。
Storage File Data Privileged Reader または Storage File Data Privileged Contributor ロールが割り当てられているユーザー、グループ、またはサービス プリンシパルが OAuth を使用して FilesREST Data API を呼び出すと、次の機能が利用可能になります。
- ストレージ ファイル データの特権リーダー: 設定されているファイル/ディレクトリ レベルの NTFS アクセス許可に関係なく、構成されているすべてのストレージ アカウントの共有内のすべてのデータに対するフル 読み取りアクセス。
- ストレージ ファイル データの特権共同作成者: 完全な読み取り、書き込み、ACL の変更、設定されているファイル/ディレクトリ レベルの NTFS アクセス許可に関係なく、構成されているすべてのストレージ アカウントの共有内のすべてのデータに対するアクセス権を削除します。
これらの特別なアクセス許可とロールを使用すると、システムはファイル/ディレクトリ レベルのアクセス許可をバイパスし、ファイル共有データへのアクセスを許可します。
新しいロールとデータ アクションを使用すると、この機能により、ストレージ アカウント内のすべてのファイル共有にあるファイルとフォルダーに対するすべてのアクセス許可よりも優先される、ストレージ アカウント全体の特権が提供されます。 ただし、新しいロールには、データ サービスにアクセスするためのアクセス許可のみが含まれます。 ファイル共有管理サービス (ファイル共有に対するアクション) にアクセスするためのアクセス許可は含まれません。 この機能を使用するには、アクセス許可があることを確認します。
- ストレージ アカウント
- ファイル共有管理サービス
- データ サービス (ファイル共有内のデータ)
管理サービスへのアクセスを提供する 組み込みロール は多数あります。 適切なアクセス許可を持つ カスタム ロールを作成 することもできます。 ロールベースのアクセス制御の詳細については、 Azure RBAC に関するページを参照してください。 組み込みのロールの定義方法の詳細については、ロール定義に関するページを参照してください。
ファイル共有リソースの種類では、対応する RBAC スコープはコントロール プレーン (管理操作) で shares
を使用しますが、データ プレーン (データ操作) では fileshares
を使用します。 RBAC スコープまたはデータ アクション文字列に shares
を含むファイル共有リソース ID を使用しようとすると、機能しません。 RBAC の割り当てのスコープで fileshares
を使用する必要があります。次に例を示します。
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/fileServices/default/fileshares/<share-name>
重要
パス Microsoft.Storage/storageAccounts/fileServices/*
以上のスコープに対して定義されているワイルドカードのユース ケースは、この新しいデータ アクションによって付与された追加のアクセスとアクセス許可を自動的に継承します。 Azure Files への意図しないアクセスや過剰な特権アクセスを防ぐために、ユーザーとアプリケーションが追加の特権を使用する意図を明示的に示す必要がある追加のチェックを実装しました。 さらに、ユーザーの RBAC ロールの割り当てを確認し、ワイルドカードの使用を明示的なアクセス許可に置き換えて、適切なデータ アクセス管理を確保することを強くお勧めします。
アプリケーション コード内のファイル データへのアクセスを承認する
Azure ID クライアントライブラリを使うと、Azure SDK を介して Microsoft Entra ID を使って認可するための OAuth 2.0 アクセス トークンを取得するプロセスが簡単になります。 .NET、Java、Python、JavaScript、Go 用の最新バージョンの Azure Storage クライアント ライブラリは、これらの言語ごとに Azure Id ライブラリと統合され、Azure ファイル サービスからの要求の承認のためのアクセス トークンを簡単かつ安全に取得できます。
Azure ID クライアント ライブラリの利点は、アプリケーションが開発環境または Azure のどちらで実行されているかにかかわらず、同じコードを使用してアクセス トークンを取得できることです。 Azure ID クライアント ライブラリからは、セキュリティ プリンシパルのためのアクセス トークンが返されます。 コードが Azure で実行されている場合は、セキュリティ プリンシパルは、Azure リソース用のマネージド ID、サービス プリンシパル、またはユーザーやグループのいずれでもかまいません。 開発環境では、クライアント ライブラリにより、ユーザーまたはサービス プリンシパルにテストのためのアクセス トークンが提供されます。
Azure ID クライアント ライブラリによって返されるアクセス トークンは、トークン資格情報にカプセル化されています。 その後、トークン資格情報を使用して、Azure Files サービスに対する承認された操作の実行に使用するサービス クライアント オブジェクトを取得できます。
次のコード例は、Microsoft Entra ID を使用してクライアント オブジェクトを承認し、ディレクトリとファイル レベルで操作を実行する方法を示しています。 この例では、ファイル共有が既に存在することを前提としています。
using Azure.Core;
using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
namespace FilesOAuthSample
{
internal class Program
{
static async Task Main(string[] args)
{
string tenantId = "";
string appId = "";
string appSecret = "";
string entraEndpoint = "";
string accountUri = "https://<storage-account-name>.file.core.windows.net/";
string shareName = "test-share";
string directoryName = "test-directory";
string fileName = "test-file";
TokenCredential tokenCredential = new ClientSecretCredential(
tenantId,
appId,
appSecret,
new TokenCredentialOptions()
{
AuthorityHost = new Uri(entraEndpoint)
});
// Set client options
ShareClientOptions clientOptions = new ShareClientOptions();
clientOptions.AllowTrailingDot = true;
clientOptions.AllowSourceTrailingDot = true;
// x-ms-file-intent=backup will automatically be applied to all APIs
// where it is required in derived clients
clientOptions.ShareTokenIntent = ShareTokenIntent.Backup;
ShareServiceClient shareServiceClient = new ShareServiceClient(
new Uri(accountUri),
tokenCredential,
clientOptions);
ShareClient shareClient = shareServiceClient.GetShareClient(shareName);
ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryName);
await directoryClient.CreateAsync();
ShareFileClient fileClient = directoryClient.GetFileClient(fileName);
await fileClient.CreateAsync(maxSize: 1024);
await fileClient.GetPropertiesAsync();
}
}
}
FileREST データ プレーン API を使用してアクセスを承認する
Azure portal、Azure PowerShell、または Azure CLI を使用して、ファイル データへのアクセスを承認することもできます。
Azure portal では、Microsoft Entra アカウントまたはストレージ アカウント アクセス キーのいずれかを使用して、Azure ストレージ アカウント内のファイル データにアクセスできます。 Azure portal で使用する認証スキームは、お客様に割り当てられている Azure ロールに応じて異なります。
ファイル データにアクセスしようとすると、まず、Azure portal によって、 Microsoft.Storage/storageAccounts/listkeys/action
で Azure ロールが割り当てられているかどうかが確認されます。 このアクションでロールが割り当てられている場合、Azure portal では、共有キーの承認を介してファイル データにアクセスするためにアカウント キーが使用されます。 このアクションを持つロールが割り当てられていない場合、Azure portal では Microsoft Entra アカウントを使ってデータへのアクセスを試みます。
Microsoft Entra アカウントを使用して Azure portal からファイル データにアクセスするには、ファイル データにアクセスするためのアクセス許可が必要です。また、Azure portal のストレージ アカウント リソース間を移動するためのアクセス許可も必要です。 Azure によって提供される組み込みロールはファイル リソースへのアクセス権を付与しますが、ストレージ アカウント リソースへのアクセス許可は付与しません。 このため、ポータルへのアクセスには、ストレージ アカウント以上のレベルをスコープとする 閲覧者 ロールなどの Azure Resource Manager (ARM) ロールも割り当てる必要があります。 閲覧者ロールは最も制限の厳しいアクセス許可を付与しますが、ストレージ アカウント管理リソースへのアクセスを許可する ARM ロールは許容されます。
Azure portal では、コンテナーに移動すると、どの認可スキームが使用されているかが示されます。 ポータルでのデータ アクセスの詳細については、「 Azure portal でファイル データへのアクセスを承認する方法を選択する」を参照してください。