Azure Files OAuth over REST で Microsoft Entra ID を使って Azure ファイル共有にアクセスする

Azure Files OAuth over REST で REST API ベースのアクセスに Microsoft Entra ID を使うことで、OAuth 認証プロトコル経由でユーザーとアプリケーションに Azure ファイル共有に対する管理者レベルの読み取りおよび書き込みアクセスが可能になります。 REST インターフェイスを使うユーザー、グループ、Azure portal などのファーストパーティのサービス、サードパーティのサービスとアプリケーションで、Microsoft Entra アカウントでの OAuth 認証と認可を使って、Azure ファイル共有のデータにアクセスできるようになりました。 REST API を呼び出す PowerShell コマンドレットと Azure CLI コマンドは、OAuth を使用して Azure ファイル共有にアクセスすることもできます。

重要

追加の権限を使用する意図を示すには、明示的なヘッダーを使用して REST API を呼び出す必要があります。 これは、Azure PowerShell と Azure CLI のアクセスにも当てはまります。

制限事項

Azure Files OAuth over REST では、ファイルとディレクトリに対する操作をサポートする FileREST Data API のみがサポートされます。 OAuth は、FileService リソースと FileShare リソースを管理する FilesREST データ プレーン API ではサポートされていません。 これらの管理 API は、ストレージ アカウント キーまたは SAS トークンを使用して呼び出され、従来の理由からデータ プレーンを介して公開されます。 FileService および FileShare リソースに関連するすべての管理アクティビティに対して OAuth をサポートするコントロール プレーン API (ストレージ リソース プロバイダー - Microsoft.Storage) を使用することをお勧めします。

Microsoft Entra ID を使ったファイル データ操作の認可は、REST API バージョン 2022-11-02 以降でのみサポートされています。 「Azure Storage のバージョン管理」を参照してください。

お客様のユース ケース

REST API インターフェイスを介した Azure Files を使用した OAuth 認証と承認は、次のシナリオでお客様に役立ちます。

アプリケーション開発とサービス統合

OAuth 認証と認可を使うと、開発者は Microsoft Entra ID からユーザーまたはアプリケーション ID を使って、Azure Storage REST API にアクセスするアプリケーションを構築できます。

顧客とパートナーは、ファーストパーティのサービスおよびサードパーティのサービスを有効にして、顧客ストレージ アカウントに対して必要なアクセスを安全かつ透過的に構成することもできます。

Azure portal、PowerShell、CLI、AzCopy、Storage Explorer などの DevOps ツールでは、ユーザーの ID を使用してデータを管理できるため、ストレージ アクセス キーを管理または配布する必要がなくなります。

マネージド ID

バックアップ、復元、または監査の目的でファイル共有データへのアクセスを必要とするアプリケーションとマネージド ID をお持ちのお客様は、OAuth の認証と承認のベネフィットを受けることができます。 各 ID に対してファイル レベルとディレクトリ レベルのアクセス許可を適用すると、複雑さが増して、特定のワークロードと互換性がない可能性があります。 たとえば、バックアップ ソリューション サービスが、ファイル固有のアクセス許可に関係なく、すべてのファイルへの読み取り専用アクセス権を持つ Azure ファイル共有にアクセスすることを承認する必要がある場合などがあります。

ストレージ アカウント キーの置換

Microsoft Entra ID では、共有キー アクセスよりも優れたセキュリティと使いやすさが実現されます。 ストレージ アカウント キーのアクセスを OAuth 認証と承認に置き換えて、読み取り/書き込みのすべての特権を持つ Azure ファイル共有にアクセスできます。 また、この方法では、特定のユーザー アクセスの監査と追跡も向上します。

データ操作の特権アクセスとアクセス許可

Azure Files OAuth over REST 機能を使用するには、ユーザー、グループ、またはサービス プリンシパルに割り当てられた 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 アクセスに必要な追加のデータ アクションが含まれています。

  • ストレージ ファイル データ特権を持つ閲覧者またはストレージ ファイル データ特権付き共同作成者ロールが割り当てられているユーザー、グループ、またはサービス プリンシパルが、OAuth、ユーザー、グループ、またはサービス プリンシパルを使用して FilesREST データ API を呼び出すと、次のようになります。

    • ストレージ ファイル データの特権を持つ閲覧者: 設定されているファイル/ディレクトリ レベルの NTFS アクセス許可に関係なく、構成されているすべてのストレージ アカウントの共有内のすべてのデータに対する完全な読み取りアクセス。
    • ストレージ ファイル データの特権付き共同作成者: 設定されているファイル/ディレクトリ レベルの NTFS アクセス許可に関係なく、構成されているすべてのストレージ アカウントの共有内のすべてのデータに対する完全な読み取り、書き込み、変更、ACL、削除アクセス。
  • これらの特別なアクセス許可とロールにより、システムはファイル/ディレクトリ レベルのアクセス許可をバイパスし、ファイル共有データへのアクセスを許可します。

新しいロールとデータ アクションを使用すると、この機能により、ストレージ アカウント内のすべてのファイル共有にあるファイルとフォルダーに対するすべてのアクセス許可を置き換えるストレージ アカウント全体の特権が提供されます。 ただし、新しいロールには、データ サービスにアクセスするためのアクセス許可のみが含まれます。 ファイル共有管理サービス (ファイル共有に対するアクション) にアクセスするためのアクセス許可は含まれません。 この機能を使用するには、アクセス許可があることを確認します。

  • ストレージ アカウント
  • ファイル共有管理サービス
  • データ サービス (ファイル共有のデータ)

管理サービスへのアクセスを提供する組み込みロールは多数あります。 適切な権限を持つカスタム役割を作成することもできます。 Azure ロールベースのアクセス制御に関する詳細については、「Azure RBAC」 を参照してください。 組み込みのロールの定義方法の詳細については、ロール定義に関するページを参照してください。

重要

パス 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 のサービスに対する承認された操作の実行で使用できます。

サンプル コードは次のようになります。

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 aadEndpoint = "";
            string accountUri = "";
            string connectionString = "";
            string shareName = "test-share";
            string directoryName = "testDirectory";
            string fileName = "testFile"; 

            ShareClient sharedKeyShareClient = new ShareClient(connectionString, shareName); 
            await sharedKeyShareClient.CreateIfNotExistsAsync(); 

            TokenCredential tokenCredential = new ClientSecretCredential(
                tenantId,
                appId,
                appSecret,
                new TokenCredentialOptions()
                {
                    AuthorityHost = new Uri(aadEndpoint)
                });

            ShareClientOptions clientOptions = new ShareClientOptions(ShareClientOptions.ServiceVersion.V2023_05_03);

            // Set Allow Trailing Dot and Source Allow Trailing Dot.
            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();
            await sharedKeyShareClient.DeleteIfExistsAsync();
        }
    }
}

FileREST データ プレーン API を使用してアクセスを承認する

Azure portal または Azure PowerShell を使用して、ファイル データへのアクセスを承認することもできます。

Azure portal では、Microsoft Entra アカウントまたはストレージ アカウント アクセス キーのいずれかを使って、Azure Storage アカウントのファイル データにアクセスできます。 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 でファイル データへのアクセスの承認方法を選択する」を参照してください。

こちらもご覧ください