チュートリアル: Azure portal でロールの割り当ての条件を追加して BLOB へのアクセスを制限する

ほとんどの場合、ロールの割り当てを使えば Azure リソースに必要なアクセス許可が付与されます。 しかし、さらにきめ細かなアクセス制御をしたい局面が出てくることもあるでしょう。そのような場合には、ロールの割り当て条件を追加します。

このチュートリアルでは、以下の内容を学習します。

  • ロールの割り当てに条件を追加する
  • BLOB インデックス タグに基づいて BLOB に対するアクセスを制限する

重要

Azure 属性ベースのアクセス制御 (Azure ABAC) は、ストレージ アカウントの Standard と Premium 両方のパフォーマンス レベルで、requestresourceenvironmentprincipal を使用して Azure Blob Storage、Azure Data Lake Storage Gen2、Azure キューへのアクセスを制御するために一般提供 (GA) されています。 現在、コンテナー メタデータ リソース属性とリスト BLOB インクルード要求属性はプレビュー段階です。 Azure Storage の ABAC の完全な機能状態情報については、「Azure Storage の条件機能の状態」を参照してください。

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

前提条件

ロールの割り当て条件を追加または編集するための前提条件の詳細については、条件の前提条件に関するページを参照してください。

条件

このチュートリアルでは、特定のタグが設定されている BLOB に対するアクセスを制限します。 たとえば、Chandra が読み取ることができるファイルを Project=Cascade というタグが設定されているものだけにするような条件を、ロールの割り当てに追加します。

条件を設定したロールの割り当ての図。

Project=Cascade タグの設定されていない BLOB を Chandra で読み取ろうとしても、アクセスが許可されません。

Project=Cascade タグが設定されている BLOB に対する読み取りアクセスを示した図。

条件をコードで示すと、次のようになります。

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
        AND NOT
        SubOperationMatches{'Blob.List'})
    )
    OR
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'
    )
)

手順 1 - ユーザーを作成する

  1. サブスクリプションの所有者として Azure portal にサインインします。

  2. [Microsoft Entra ID] を選びます。

  3. ユーザーを作成するか、既存のユーザーを探します。 このチュートリアルでは、例として Chandra を使用しています。

手順 2: ストレージを設定する

  1. BLOB インデックス タグ機能に対応したストレージ アカウントを作成します。 詳細については、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。

  2. ストレージ アカウント内に新しいコンテナーを作成し、匿名アクセス レベルを プライベート (匿名アクセスなし)に設定します。

  3. コンテナーで [アップロード] を選択して、[BLOB のアップロード] ペインを開きます。

  4. アップロードするテキスト ファイルを探します。

  5. [詳細設定] を選択してペインを展開します。

  6. [Blob index tags](BLOB インデックス タグ) セクションで、テキスト ファイルに次の BLOB インデックス タグを追加します。

    [Blob index tags](BLOB インデックス タグ) セクションが表示されず、サブスクリプションを登録したばかりの場合は、数分待つと変更が反映されることがあります。 詳細については、「BLOB インデックス タグを使用して Azure Blob Storage でデータを管理および検索する」を参照してください。

    Note

    BLOB ではほかにも、ユーザー定義による任意のキー値メタデータを格納する機能がサポートされています。 メタデータと BLOB インデックス タグはよく似ていますが、条件では BLOB インデックス タグを使用する必要があります。

    キー
    Project Cascade

[BLOB のアップロード] ペインの [Blog index tags]\(ブログ インデックス タグ\) セクションを示したスクリーンショット。

  1. [アップロード] ボタンを選択してファイルをアップロードします。

  2. 2 つめのテキスト ファイルをアップロードします。

  3. 2 つめのテキストファイルには、次の BLOB インデックス タグを追加します。

    キー
    Project Baker

手順 3: ストレージ BLOB のデータ ロールを割り当てる

  1. リソース グループを開きます。

  2. [アクセス制御 (IAM)] を選択します。

  3. [ロールの割り当て] タブを選択して、このスコープのロールの割り当てを表示します。

  4. [追加]>[ロール割り当ての追加] の順に選択します。 [ロールの割り当ての追加] ページが開きます。

[追加] > [ロールの割り当ての追加] メニューのスクリーンショット。

  1. [ロール] タブで [ストレージ BLOB データ閲覧者] ロールを選択します。

[ロールの割り当ての追加] ページで [ロール] タブが表示された状態のスクリーンショット。

  1. [メンバー] タブで、先ほど作成したユーザーを選択します。

[ロールの割り当ての追加] ページで [メンバー] タブが表示された状態のスクリーンショット。

  1. (省略可能) [説明] ボックスに「タグ Project=Cascade が設定されている BLOB に対する読み取りアクセス」と入力します。

  2. [次へ] を選択します。

手順 4: 条件を追加する

  1. [条件 (省略可能)] タブで、[条件の追加] を選択します。 [ロールの割り当て条件を追加する] ページが表示されます。

新しい条件の [ロールの割り当て条件を追加する] ページのスクリーンショット。

  1. [アクションの追加] セクションで [アクションの追加] を選択します。

    [アクションの選択] ペインが表示されます。 条件を設定するロール割り当てに合わせて絞り込まれたデータ アクションのリストが、このペインに表示されます。 [BLOB を読み取る] の横にあるボックスをオンにし、[選択] を選択します。

[アクションを選択します] ペインでアクションを 1 件選択した状態のスクリーンショット。

  1. [式の作成] セクションで、[式の追加] を選択します。

    [式] セクションが展開されます。

  2. 次の式の設定を行います。

    設定
    Attribute source (属性ソース) リソース
    属性 Blob index tags [Values in key] (BLOB インデックス タグ [キー内の値])
    キー Project
    演算子 StringEqualsIgnoreCase
    Cascade

BLOB インデックス タグの [Build expression]\(式の作成\) セクションのスクリーンショット。

  1. [エディターの種類] まで上方にスクロールし、[コード] を選択します。

    条件がコードとして表示されます。 このコード エディターでは、条件を変更できます。 ビジュアル エディターに戻るには、[ビジュアル] を選択します。

コード エディターに条件が表示された状態のスクリーンショット。

  1. [保存] を選択して条件を追加し、[ロールの割り当てを追加] ページに戻ります。

  2. [次へ] を選択します。

  3. [レビューと割り当て] タブで [レビューと割り当て] を選択して、条件を設定したロールを割り当てます。

    しばらくすると、セキュリティ プリンシパルに選択されたスコープのロールが割り当てられます。

ロールを割り当てた後のロールの割り当ての一覧のスクリーンショット。

手順 5: 閲覧者ロールを割り当てる

  • 前の手順を繰り返して、先ほどリソース グループ スコープで作成したユーザーに閲覧者ロールを割り当てます。

    注意

    通常、閲覧者ロールを割り当てる必要はありません。 ここでは、Azure portal を使用して条件をテストできるようにするために行います。

手順 6: 条件をテストする

  1. 新しいウィンドウで、Azure Portal にサインインします。

  2. 先ほど作成したユーザーとしてサインインします。

  3. 作成したストレージ アカウントとコンテナーを開きます。

  4. 認証方法が、アクセス キー ではなく、Microsoft Entra ユーザー アカウントに設定されていることを確認します。

テスト ファイルのあるストレージ コンテナーのスクリーンショット。

  1. Baker テキスト ファイルを選択します。

    BLOB の表示やダウンロードはできず、認証に失敗したことを示すメッセージが表示されます。

  2. Cascade テキスト ファイルを選択します。

    BLOB を表示してダウンロードできるようになります。

手順 7: リソースをクリーンアップする

  1. 追加したロールの割り当てを削除します。

  2. 作成したテスト用ストレージ アカウントを削除します。

  3. 作成したユーザーを削除します。

次の手順