403 ADLS Gen2 でスティッキー ビットが有効になっている場合のアクセス拒否承認エラー

この記事では、スティッキー ビットを理解し、この設定を Azure Data Lake Storage (ADLS) Gen2 で構成し、問題を受け取るときにチェックする方法について説明します。

ADLS Gen2 のスティッキー ビットは何ですか?

ADLS Gen2 ユーザーは、多くの場合、さまざまなユーザーのアクセス許可を管理する必要があります。これを行う方法の 1 つは、アクセス制御リスト (ACL) を使用することです。 ACL は、承認エラーを引き起こす可能性があるスティッキー ビットと呼ばれる特定の設定を持つ POSIX に似たアクセス制御システムです。 アクセス許可制御モードとスティッキー ビットの詳細については、Azure Data Lake Storage Gen2のアクセス制御リスト (ACL) に関するページを参照してください。

スティッキー ビットは、ADLS Gen2 ストレージ アカウントの ACL 設定では必要ない高度な機能です。 代わりに、 マスク機能 を使用して、名前付きユーザー、名前付きグループ、所有グループの最大アクセス許可を制限できます。 これはスティッキー ビットと同様に機能し、Azure portalで簡単に構成できます。

403 アクセス拒否承認エラー

次のような状況で問題が発生します。

  • ADLS Gen2 ストレージ アカウントには、 コンテナー と呼ばれるコンテナーと、 folder/child-folder という名前のフォルダー パスがあります。
  • 承認方法として ACL を使用します。
  • ADLS Gen2 ストレージ アカウントの ACL 設定では、ルート ディレクトリとフォルダーに対する実行 (X) アクセス許可と、子フォルダーに対する書き込みおよび実行 (WX) アクセス許可を使用して構成されています。
  • スティッキー ビットは 、子フォルダーで有効になっています。
  • 新しいファイル (たとえば、 test.txt) を作成または ADLS Gen2 ストレージ アカウント フォルダー パス コンテナー/フォルダー/子フォルダー/にアップロードしようとするとします。

このシナリオでは、403 アクセス拒否承認エラーが発生します。

このエラーは、次の 2 つの理由で発生します。

  • フォルダー パスにアクセスするための十分なアクセス許可がありません。
  • 十分なアクセス許可がありますが、スティッキー ビットを有効にすると、このフォルダー パスの所有者になりません。

スティッキー ビットが 403 アクセス拒否エラーを引き起こすかどうかを特定する

フォルダーと親フォルダーの ACL 設定を確認し、 ACL アクセス許可に関連する一般的なシナリオと比較します。 アクセス許可で十分な場合は、スティッキー ビットによって 403 エラーが発生する可能性があります。

Azure CLI を使用してスティッキー ビット設定を確認する

この設定をチェックするには、REST API 呼び出し、PowerShell コマンド、Azure CLI など、さまざまな方法があります。 Azure CLI オプションは、追加のソフトウェアをインストールする必要がないため、コマンドを簡単に理解できるため、お勧めします。

Azure CLI を使用してスティッキー ビット設定を確認するには、次の手順に従います。

  1. アカウントでAzure portalにサインインします。 このアカウントに、ADLS Gen2 ストレージ アカウントに対するストレージ BLOB データ所有者ロールの割り当てがあることを確認します。

  2. Azure portal から Cloud Shell を選択します。

    Azure portal の [Cloud Shell] ボタンのスクリーンショット。

  3. 次のコマンドを使用して、 コンテナー/フォルダー ディレクトリの 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 権限のみが有効になっており、スティッキー ビットが有効になっています。

    アクセス許可の短いフォームに従って、短いフォームのアクセス許可は、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 バージョン パス
Az PowerShell モジュール 5.6.0 以降のバージョン PowerShell を使用してAzure Data Lake Storage Gen2の ACL を管理する
Azure CLI 2.38.0 以降のバージョン Azure CLI を使用してAzure Data Lake Storage Gen2の ACL を管理する
.NET SDK 12.14.0 以降のバージョン .NET を使用してAzure Data Lake Storage Gen2の ACL を管理する
Java SDK 12.11.0 以降のバージョン Java を使用して Azure Data Lake Storage Gen2 で ACL を管理する
Python SDK 12.8.0 以降のバージョン Python を使用してAzure Data Lake Storage Gen2の 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 Gen2Apache Hadoop 3.3.3 での HDFS CLI の使用 – HDFS アクセス許可ガイド

Azure CLI でスティッキー ビット設定を無効または有効にする例を次に示します。

  1. ターゲット ADLS Gen2 ストレージ アカウントでストレージ BLOB データ所有者ロールが割り当てられているアカウントでAzure portalにサインインします。

  2. Azure portal から Cloud Shell を選択します。

    Azure portal の [Cloud Shell] ボタンのスクリーンショット。

  3. コンテナー/フォルダー ディレクトリの 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 フィードバック コミュニティに製品フィードバックを送信することもできます。