皆さんこんにちは。内苑です。
以前当ブログにて紹介したストレージアカウントに格納されているデータへのアクセスを RBAC で制御する機能が、2019/03/21 に一般提供(GA)されました。パブリックプレビューからの変更点や、追加点などを簡単にご紹介したいと思います。
詳しくは 私の過去のブログ記事 を参照いただければと思いますが、本機能を利用することにより、従来のアクセスキーの共有や、Shared Access Signatures(SAS)の共有を行うことなく、Azure AD ユーザーに付与される権限によってストレージアカウント内のデータへのアクセスを制御することができます。
これにより、ユーザー固有の情報(ID/Pass/Device など)を用いてセキュアで柔軟なデータアクセスを実現することが可能になります。
GA に伴い、以下の組み込みロールが本機能に追加されました。
ストレージ BLOB データ所有者の権限についてもう少し掘り下げて情報を確認したところ、公開情報 に掲載されていた説明では、前述したとおり Azure Data Lake Storage Gen2 にて コンテナ/データアクセスの制御設定を可能にすると記述がありましたが、不変ストレージのポリシーなどについても操作が可能になっているようでした。
以下はポータルからアクセス許可設定を確認したものの一部となりますが、Immutability Policy のアクションが許可されていることがわかります。
せっかくなので、本ブログ記事では、この新しく追加された所有者ロールで特定フォルダに対してアクセス権を付与する動作を確認してみようと思います。
動作を確認するにあたって、以下のリソースを準備しました。
Storage Explorer にて、[blobowner] のアカウントを用いてサインインを行い、[rbacstorage02] 内のフォルダを選択し、[Manage Access... ] をクリックします。
アクセスリストが表示されるので、ここに [blobreader] の UPN を入力し、Write / Execute の接続を許可して [Save] をクリックします。
Storage Explorer の画面下部に、権限付与が成功した旨が表示されます。
フォルダにデータを追加するには、こちら のアクセス許可シナリオを参考に、各階層に対して同様にアクセス権を付与していく必要があります。
この設定により、[blobreader] は [test-folder] に対してファイルを操作する権限を得ました。
それでは先ほど同様、今度は [blobreader] のアカウントを用いてサインインを行い、[test-folder] 内にファイルをアップロードしてみましょう。
[test-file] がアップロードされ、成功のメッセージが画面下部に表示されました。[blobreader] には Blob データを操作する権限を Azure AD 上では付与することなく、特定のフォルダに対して更新操作を行うように設定ができました。
[blobowner] から何のアクセス権も付与されていないデータ閲覧者がデータのアップロードを行っても、以下のようにエラーメッセージが表示され、失敗します。
通常の Blob ストレージでは、コンテナに対して権限を設定するところまででしたが、Azure Data Lake Storage Gen2 の場合、ファイル単位でアクセス管理を行うことができます。今回紹介した [ストレージ BLOB データ所有者] のロールを用いてファイルシステム単位でアクセス管理を行うユーザーを定義し、さらにその中でフォルダ、ファイル単位のアクセス許可を行う、というところまで細かく設定ができるようになりました。あまり権限周りの設計を細かくすると管理負荷が大きくなる懸念はありますが、データに対しての要件が複雑でシビアなシステムを利用する際には効果を発揮すると言えそうです。
今回紹介した動作の中の、[blobowner] がフォルダ、ファイル単位で付与したアクセス権は Blob 内部に保存されたデータに対するアクセス権となるため、Azure ポータルでは管理ができない点に十分注意して運用する必要がありそうです。