チュートリアル: Azure portal でロールの割り当ての条件を追加して BLOB へのアクセスを制限する
ほとんどの場合、ロールの割り当てを使えば Azure リソースに必要なアクセス許可が付与されます。 しかし、さらにきめ細かなアクセス制御をしたい局面が出てくることもあるでしょう。そのような場合には、ロールの割り当て条件を追加します。
このチュートリアルでは、以下の内容を学習します。
- ロールの割り当てに条件を追加する
- BLOB インデックス タグに基づいて BLOB に対するアクセスを制限する
重要
Azure 属性ベースのアクセス制御 (Azure ABAC) は、ストレージ アカウントの Standard と Premium 両方のパフォーマンス レベルで、request
、resource
、environment
、principal
を使用して 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 で読み取ろうとしても、アクセスが許可されません。
条件をコードで示すと、次のようになります。
(
(
!(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 - ユーザーを作成する
サブスクリプションの所有者として Azure portal にサインインします。
[Microsoft Entra ID] を選びます。
ユーザーを作成するか、既存のユーザーを探します。 このチュートリアルでは、例として Chandra を使用しています。
手順 2: ストレージを設定する
BLOB インデックス タグ機能に対応したストレージ アカウントを作成します。 詳細については、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。
ストレージ アカウント内に新しいコンテナーを作成し、匿名アクセス レベルを プライベート (匿名アクセスなし)に設定します。
コンテナーで [アップロード] を選択して、[BLOB のアップロード] ペインを開きます。
アップロードするテキスト ファイルを探します。
[詳細設定] を選択してペインを展開します。
[Blob index tags](BLOB インデックス タグ) セクションで、テキスト ファイルに次の BLOB インデックス タグを追加します。
[Blob index tags](BLOB インデックス タグ) セクションが表示されず、サブスクリプションを登録したばかりの場合は、数分待つと変更が反映されることがあります。 詳細については、「BLOB インデックス タグを使用して Azure Blob Storage でデータを管理および検索する」を参照してください。
Note
BLOB ではほかにも、ユーザー定義による任意のキー値メタデータを格納する機能がサポートされています。 メタデータと BLOB インデックス タグはよく似ていますが、条件では BLOB インデックス タグを使用する必要があります。
キー 値 Project Cascade
[アップロード] ボタンを選択してファイルをアップロードします。
2 つめのテキスト ファイルをアップロードします。
2 つめのテキストファイルには、次の BLOB インデックス タグを追加します。
キー 値 Project Baker
手順 3: ストレージ BLOB のデータ ロールを割り当てる
リソース グループを開きます。
[アクセス制御 (IAM)] を選択します。
[ロールの割り当て] タブを選択して、このスコープのロールの割り当てを表示します。
[追加] > [ロール割り当ての追加] の順に選択します。 [ロールの割り当ての追加] ページが開きます。
- [ロール] タブで [ストレージ BLOB データ閲覧者] ロールを選択します。
- [メンバー] タブで、先ほど作成したユーザーを選択します。
(省略可能) [説明] ボックスに「タグ Project=Cascade が設定されている BLOB に対する読み取りアクセス」と入力します。
[次へ] を選択します。
手順 4: 条件を追加する
- [条件 (省略可能)] タブで、[条件の追加] を選択します。 [ロールの割り当て条件を追加する] ページが表示されます。
[アクションの追加] セクションで [アクションの追加] を選択します。
[アクションの選択] ペインが表示されます。 条件を設定するロール割り当てに合わせて絞り込まれたデータ アクションのリストが、このペインに表示されます。 [BLOB を読み取る] の横にあるボックスをオンにし、[選択] を選択します。
[式の作成] セクションで、[式の追加] を選択します。
[式] セクションが展開されます。
次の式の設定を行います。
設定 値 Attribute source (属性ソース) リソース 属性 Blob index tags [Values in key] (BLOB インデックス タグ [キー内の値]) キー Project 演算子 StringEqualsIgnoreCase 値 Cascade
[エディターの種類] まで上方にスクロールし、[コード] を選択します。
条件がコードとして表示されます。 このコード エディターでは、条件を変更できます。 ビジュアル エディターに戻るには、[ビジュアル] を選択します。
[保存] を選択して条件を追加し、[ロールの割り当てを追加] ページに戻ります。
[次へ] を選択します。
[レビューと割り当て] タブで [レビューと割り当て] を選択して、条件を設定したロールを割り当てます。
しばらくすると、セキュリティ プリンシパルに選択されたスコープのロールが割り当てられます。
手順 5: 閲覧者ロールを割り当てる
前の手順を繰り返して、先ほどリソース グループ スコープで作成したユーザーに閲覧者ロールを割り当てます。
注意
通常、閲覧者ロールを割り当てる必要はありません。 ここでは、Azure portal を使用して条件をテストできるようにするために行います。
手順 6: 条件をテストする
新しいウィンドウで、Azure Portal にサインインします。
先ほど作成したユーザーとしてサインインします。
作成したストレージ アカウントとコンテナーを開きます。
認証方法が、アクセス キー ではなく、Microsoft Entra ユーザー アカウントに設定されていることを確認します。
Baker テキスト ファイルを選択します。
BLOB の表示やダウンロードはできず、認証に失敗したことを示すメッセージが表示されます。
Cascade テキスト ファイルを選択します。
BLOB を表示してダウンロードできるようになります。
手順 7: リソースをクリーンアップする
追加したロールの割り当てを削除します。
作成したテスト用ストレージ アカウントを削除します。
作成したユーザーを削除します。