超ハマったのでメモを残しておきます。
まず、AzureADでアプリ作らないといけないんですよ、アプリ。基本的な手順は以下のページに従ってやればOKです。
ハマった所としては、このとき使うAzureADのディレクトリってAzureに最初から作られてるディレクトリじゃないといけないってところでした。新しくディレクトリ作ったりしてましたよ…。
アプリケーションを作ったら、クライアントIDとキーとテナントIDを取得しておきます。
以下のページにほぼしたがっていけばOKです。
ハマった所としては、RBACでリソースグループに対してアプリケーションにアクセス権をOwnerとして与えたのですが、それだと何故かアクセスできなくてData Lakeの画面からフォルダに対してアプリケーションにフルアクセス権限与えたら、フォルダのリストを取得できるようになりました。
とりあえずエラーが出ずに動いたコードを貼っておきます。上記サイトではTenantIdにcommonを使ってますが、私の環境ではエラーになったのでテナントIDはAzureADのアプリケーションから取得したものに差し替えました。
using Microsoft.Azure.Management.DataLake.Store; using Microsoft.Azure.Management.DataLake.Store.Models; using Microsoft.IdentityModel.Clients.ActiveDirectory; using Microsoft.Rest; using System; namespace ConsoleApplication8 { class Program { privatestaticstring ClientId { get; } = "AzureADで取得したクライアントID"; privatestaticstring Key { get; } = "AzureADで取得したキー"; privatestaticstring TenantId { get; } = "AzureADで取得したテナントID"; privatestaticstring SubscriptionId { get; } = "自分のサブスクリプションID"; staticvoid Main(string[] args) { // signin var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{TenantId}"); var credential = new ClientCredential(ClientId, Key); var authResult = authContext.AcquireToken("https://management.core.windows.net/", credential); var tokenCredentials = new TokenCredentials(authResult.AccessToken); // init var adlsClient = new DataLakeStoreAccountManagementClient(tokenCredentials) { SubscriptionId = SubscriptionId }; var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(tokenCredentials) { SubscriptionId = SubscriptionId }; adlsClient.Account.Create("リソースグループ名", "DataLakeのアカウント名(Data LakeのURLの最初の部分)", new DataLakeStoreAccount(location: "East US 2")); foreach(var fs in adlsFileSystemClient.FileSystem.ListFileStatus("/", "dlsampleadls").FileStatuses.FileStatus) { Console.WriteLine($"{fs.PathSuffix}"); } } } }