Azure Data Lake Storage Gen2のマスクについて

Azure Data Lake Storage Gen2(以下ADLS)のACLでアクセス制御を設定したい場合、マスクに対する権限設定が必要になってきます。

マスクの権限についてどのような権限設定が必要なのか試してみました。

※ なお、ADLSに対して、IAMで何も権限を付与していない前提で説明します。

マスクとは

ADLSでは、マスクによって、名前付きユーザー(以下ユーザー)・所有グループ・および名前付きグループのアクセスが制限されます。

例えば、ユーザーがあるパスに対して「読み取り」、「書き込み」、「実行」権限を持っていたとします。

同じパスに対して、マスクに対して何も権限が付与されていない場合は、そのパスに対してユーザーが読み取りも書き込みもできない状態になります。

一方で、マスクに「読み取り」、「書き込み」、「実行」を与えてあげると、ユーザーはそのパスに対して、読み取りやファイルの書き込みができるようになります。

このように、各ユーザーやグループに対してのACLの権限設定だけでなく、マスクに対しても権限を設定しておかないと、アクセスが制限されてしまいます。

検証

検証のフォルダー階層構造について

今回は以下の様なフォルダー階層構造で検証を行いました。

フォルダー階層構造

パスへのアクセスは、sales-manager01-testというユーザーがtest2というフォルダーにMicrosoft Azure Storage Explorer(以下Storage Explorer)を使用して行います。

なお、コンテナーとtest1ディレクトリには、sales-manager01-testユーザーとマスクに対して実行権限を付与しています。これは、ユーザーが読み込みおよび書き込みのアクセス許可を得るには、コンテナーを含むすべての親フォルダーに対する実行権限を持っている必要があるためです。

マスク権限なしでの書き込み

まず、対象のフォルダーのtest2について権限を設定します。

マスクには何も権限を付与せず、ユーザーには「読み取り」、「書き込み」、「実行」権限を付与しておきます。

マスク権限なしでのACL設定

ACLを設定したので、実際にアクセス制御がされるのか確認をします。Storage Explorerから対象にユーザーでログインし、対象のパスにアクセスしてみます。

まず、対象のユーザー下の「ストレージアカウント」を右クリックし、「Azure Storageへの接続..」をクリックします。

Azure Storageへの接続

「ADLS Gen2コンテナーまたはディレクトリ」を選択します。

リソース選択

「OAuthを使用してサインイン」を選択し、「次へ」をクリックします。

接続方法の選択

「表示名」と「BLOBコンテナーまたはディレクトリのURL」を入力し、「次へ」をクリックします。

接続情報の入力

「次へ」をクリックします。

概要

 

接続が完了すると、以下の画面になります。

※ 画面上部に「This request is not authorized to perform this operation using this permission.」とのメッセージが表示されていますが、これは権限がないため、表示されています。

マスクなし接続画面

次に、ファイルのアップロードを行い、書き込みができるかどうかを試してみました。

「アップロード」を選択し、「ファイルのアップロード...」をクリックします。

ファイルのアップロード

ファイルを選択し、「アップロード」をクリックします。

アップロード画面

しかし、下記画面のように、ファイルのアップロード操作は失敗します。

ファイルのアップロード失敗画面

以上が、マスクに権限を付与しなかった場合の動作検証でした。

マスク権限ありでの書き込み

次に、マスクに権限を設定して、アクセスおよび書き込みを行います。

マスクへの権限付与

同様にアクセスしてみると、今度は、画面上の方に表示されていた権限不足のメッセージが出ていません。

マスクへの権限付与時の画面

ファイルを同様にアップロードすると、今度は正常にアップロードすることができました。

マスクへの権限付与後のファイルアップロード

まとめ

ADLSのACLのマスクに関する権限について、アクセスやファイルのアップロードについて検証をしました。

ADLSのIAMではなくACLのみで権限を付与する場合は、マスクにも権限が付与されているか注意して設定をする必要があることが分かりました。

執筆担当者プロフィール
齊藤 泰一

齊藤 泰一(日本ビジネスシステムズ株式会社)

機械学習系ソリューション開発、開発環境自動化などを担当。

担当記事一覧