ADLS Gen2 でスティッキー ビットが有効になっている場合の 403 Access Denied 承認エラー
この記事では、スティッキー ビットを理解し、Azure Data Lake Storage (ADLS) Gen2 で構成するときにこの設定を確認して問題を取得する方法について説明します。
ADLS Gen2 のスティッキー ビットは何ですか?
ADLS Gen2 ユーザーは、多くの場合、さまざまなユーザーのアクセス許可を管理する必要があります。これを行う 1 つの方法は、アクセス制御リスト (ACL) を使用することです。 ACL は POSIX に似たアクセス制御システムで、承認エラーの原因となるスティッキー ビットと呼ばれる特定の設定があります。 アクセス許可制御モードとスティッキー ビットの詳細については、「Azure Data Lake Storage Gen2 のアクセス制御リスト (ACL)を参照してください。
スティッキー ビットは、ADLS Gen2 ストレージ アカウントの ACL 設定では必要ない高度な機能です。 代わりに、 mask 機能を使用して 名前付きユーザー、名前付きグループ、所有グループの最大アクセス許可を制限できます。 これはスティッキー ビットと同様に機能し、Azure portal で簡単に構成できます。
403 アクセス拒否承認エラー
以下のシナリオについて考えてみます。
- ADLS Gen2 ストレージ アカウントには、 container という名前のコンテナーと、 folder/child-folder という名前のフォルダー パスがあります。
- 承認方法として ACL を使用します。
- ADLS Gen2 ストレージ アカウントの ACL 設定では、ルート ディレクトリに対する実行 (X) アクセス許可と folderchild-folder に対する書き込みおよび実行 (WX) アクセス許可を使用して構成されています。
- スティッキー ビットは、 child-folder で有効になっています。
- test.txtなどの新しいファイルを ADLS Gen2 ストレージ アカウント のフォルダー パスcontainer/folder/child-folder/に作成またはアップロードしようとするとします。
このシナリオでは、403 アクセス拒否承認エラーが発生します。
このエラーは、次の 2 つの理由で発生します。
- フォルダー パスにアクセスするための十分なアクセス許可がありません。
- 十分なアクセス許可がありますが、スティッキー ビットを有効にすると、このフォルダー パスの所有者になりません。
スティッキー ビットによって 403 アクセス拒否エラーが発生するかどうかを特定する
フォルダーと親フォルダーの ACL 設定を確認し、ACL のアクセス許可に関連する Common シナリオと比較します。 アクセス許可が十分な場合は、スティッキー ビットが原因で 403 エラーが発生する可能性があります。
Azure CLI を使用してスティッキー ビット設定を確認する
REST API 呼び出し、PowerShell コマンド、Azure CLI など、この設定を確認する方法は多数あります。 追加のソフトウェアをインストールする必要がないため、Azure CLI オプションをお勧めします。コマンドは理解しやすいためです。
Azure CLI を使用してスティッキー ビット設定を確認するには、次の手順に従います。
アカウントを使用して Azure portal にサインインします。 このアカウントに、ADLS Gen2 ストレージ アカウントに対するストレージ BLOB データ所有者ロールの割り当てがあることを確認します。
Azure portal から Cloud Shell を選択します。
次のコマンドを使用して、 container/folder ディレクトリの ACL とスティッキー ビット設定を取得します。
az storage fs access show -p folder -f container --account-name account --auth-mode login
ルート ディレクトリの ACL とスティッキー ビット設定 (コンテナー レベルの ACL とスティッキー ビット設定) を確認するには、次のコマンドを使用します。
az storage fs access show -p / -f container --account-name account --auth-mode login
出力例を次に示します。
応答 JSON 本文で、
permissions
に注目します。 通常、追加の "+" 記号を持つ 9 ビットまたは 10 ビットが含まれています。 これらの文字の詳細については、「 ユーザーと IDを参照してください。前の例では、すべてのユーザーアクセス許可が有効になっており、スティッキー ビットが有効になっていることを示しています。 このアクセス許可表記を読み取る方法の詳細については、「 従来の Unix のアクセス許可の説明を参照してください。
9 番目の文字には、"-"、"x"、"t"、および "T" の 4 つの値があります。 この文字の値が "t" または "T" の場合は、スティッキー ビットが有効になっていることを意味します。 "t" はスティッキー ビットが有効な場合は "x" で、スティッキー ビットが有効になっている場合は "-" です。
"rwxrwxrwt" は、次のように説明できます。
- 所有者に対して r、w、x のアクセス許可が有効になっています。
- 所有グループに対して r、w、x のアクセス許可が有効になっています。
- 他のユーザーに対して r、w、x のアクセス許可が有効になっており、スティッキー ビットが有効になっています。
理解を深めるために、"rwxr-xr-T" の別の例を次に示します。
- 所有者に対して r、w、x のアクセス許可が有効になっています。
- 所有グループに対して r と x のアクセス許可が有効になっています。
- 他のユーザーに対して r アクセス許可のみが有効であり、スティッキー ビットが有効になっています。
アクセス許可の Short フォームに従って、短いフォームのアクセス許可は、3 文字のグループごとに計算されます ("r" は 4、"w" は 2、"x "as 1)。 そのため、"rw-rwx--x" は 4+2+0、4+2+1、0+0+1、671 になります。 この計算ルールに基づいて、最初に 4 文字目を追加するだけで済む。 スティッキー ビットが有効な場合は、1 に設定します。 スティッキー ビットが無効になっている場合は、0 に設定します。
次に例をいくつか示します。
- rwxrwxrwt => 1777
- rwxr-xr-T => 1754
- rw-rwx--x => 0671
スティッキー ビット設定を無効または有効にする
スティッキー ビット設定を無効または有効にするには、アクセス許可を期待値に設定します。
この設定の変更に使用する Azure アカウントには、ターゲット ADLS Gen2 ストレージ アカウントに対するストレージ BLOB データ所有者ロールが必要です。 スティッキー ビット設定を変更する方法は多数あります。 サポートされている SDK を次に示します。
SDK | サポートされているバージョン | 詳細 |
---|---|---|
REST API | 2019-12-12 以降の API バージョン | Path |
Az PowerShell モジュール | 5.6.0 以降のバージョン | Azure Data Lake Storage Gen2 で PowerShell を使用して ACL を管理する |
Azure CLI | 2.38.0 以降のバージョン | Azure Data Lake Storage Gen2 で Azure CLI を使用して ACL を管理する |
.NET SDK | 12.14.0 以降のバージョン | Azure Data Lake Storage Gen2 で .NET を使用して ACL を管理する |
Java SDK | 12.11.0 以降のバージョン | Azure Data Lake Storage Gen2 で Java を使用して ACL を管理する |
Python SDK | 12.8.0 以降のバージョン | Azure Data Lake Storage Gen2 で Python を使用して ACL を管理する |
JavaScript SDK | 12.11.0-beta.1 以降のバージョン | Node.js で JavaScript SDK を使用して Azure Data Lake Storage Gen2 の ACL を管理する |
HDFS CLI | 3.3.3 以降のバージョン | Data Lake Storage Gen2 および Apache Hadoop 3.3.3 – HDFS アクセス許可ガイドで HDFS CLI を使用する |
Azure CLI でスティッキー ビット設定を無効または有効にする例を次に示します。
ターゲット ADLS Gen2 ストレージ アカウントでストレージ BLOB データ所有者ロールが割り当てられているアカウントで Azure portal にサインインします。
Azure portal から Cloud Shell を選択します。
container/folder ディレクトリの ACL とスティッキー ビット設定を "rwxrwxrwt" アクセス許可に設定し、スティッキー ビットを有効にするには、次のコマンドを使用します。
az storage fs access set --permissions rwxrwxrwt -p folder -f container --account-name account --auth-mode login
ルート ディレクトリの設定 (コンテナー レベルの ACL とスティッキー ビットの設定) を変更するには、次のコマンドを使用します。
az storage fs access set --permissions rwxrwxrwt -p / -f container --account-name account --auth-mode login
前のコマンドの
{permission notation}
では、長い形式と短い形式の両方の表記を使用できます。 つまり、次のコマンドも修飾されます。az storage fs access set --permissions 1776 -p folder -f container --account-name account --auth-mode login
出力例を次に示します。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。