次の方法で共有


Azure Blob Storage での Azure ロールの割り当て条件についてのセキュリティ上の考慮事項

Azure 属性ベースのアクセス制御 (Azure ABAC) を使用してリソースを完全にセキュリティで保護するには、Azure ロールの割り当て条件で使用される属性も保護する必要があります。 たとえば、ファイル パスに基づいて条件を作成する場合は、プリンシパルにファイル パスの名前を変更する無制限のアクセス許可があると、アクセスが侵害される可能性がある点に注意する必要があります。

この記事では、ロールの割り当て条件について考慮する際に、念頭に置いておくべきセキュリティ上の考慮事項について説明します。

重要

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 プレビューの追加使用条件」を参照してください。

その他の承認メカニズムを使用する

ロールの割り当て条件は、承認のために Azure RBAC を使用している場合にのみ評価されます。 代替の承認方法を使用してアクセスを許可する場合、これらの条件はバイパスできます。

同様に、階層型名前空間 (HNS) を持つストレージ アカウント内でアクセス制御リスト (ACL) を使用してアクセスが許可されている場合、条件は評価されません。

共有キー、アカウント レベルの SAS、サービス レベルの SAS の認可が行われないようにするには、ご自身のストレージ アカウントに対して共有キー認可を無効にします。 ユーザー委任 SAS は Azure RBAC に依存しているため、この認可方法を使用するときは、ロールの割り当て条件が評価されます。

条件で使用されるストレージ属性のセキュリティ保護

BLOB パス

条件の @Resource 属性として BLOB パスを使用する場合は、階層型名前空間を持つアカウントを使用するときに、ユーザーが BLOB の名前を変更してファイルにアクセスできないようにする必要もあります。 たとえば、BLOB パスに基づいて条件を作成する場合は、次の操作に対するユーザーのアクセスを制限する必要もあります。

アクション 説明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action このアクションにより、ユーザーが Path Create API を使用してファイル名を変更できます。
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action このアクションにより、さまざまなファイル システムおよびパス操作にアクセスできます。

BLOB インデックス タグ

BLOB インデックス タグは、ストレージ内の条件の自由形式属性として使用されます。 これらのタグを使用してアクセス条件を作成する場合は、タグ自体も保護する必要があります。 具体的には、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write DataAction を使用すると、ユーザーはストレージ オブジェクトでタグを変更できます。 このアクションを制限することで、ユーザーがタグ キーまたは値を操作して、許可されていないオブジェクトにアクセスするのを防ぐことができます。

さらに、BLOB インデックス タグが条件内で使用されている場合、データおよび関連付けられたインデックス タグが別の操作で更新されると、データが脆弱になる可能性があります。 BLOB 書き込み操作で @Request 条件を使用すると、同じ更新操作でインデックス タグを設定するように要求することができます。 この方法により、データを、ストレージに書き込まれた瞬間からセキュリティで保護することができます。

コピーされた BLOB のタグ

BLOB のコピー API またはそのいずれかのバリアントを使用している場合、BLOB インデックス タグは、既定では、コピー元 BLOB からコピー先にコピーされません。 コピー時に BLOB のアクセス範囲を保持するには、タグもコピーする必要があります。

スナップショットのタグ

BLOB スナップショット上のタグは変更できません。 そのため、スナップショットを取得する前に、BLOB のタグを更新する必要があります。 ベース BLOB 上のタグを変更すると、そのスナップショット上のタグには以前の値が引き続き保持されます。

スナップショット取得後にベース BLOB 上のタグが変更された場合、アクセス範囲がベース BLOB とスナップショットで異なる場合があります。

BLOB バージョンでのタグ

BLOB インデックス タグは、Put BlobPut Block List、または Copy Blob API を使用して BLOB バージョンを作成するときにコピーされません。 これらの API のヘッダーを使用してタグを指定できます。

現在のベース BLOB 上のタグと、各 BLOB バージョン上のタグは個別に設定できます。 ベース BLOB 上のタグを変更しても、以前のバージョンのタグは更新されません。 タグを使用して BLOB とそのすべてのバージョンのアクセス範囲を変更する必要がある場合は、各バージョンのタグを更新する必要があります。

バージョンとスナップショットのクエリとフィルター処理の制限事項

タグを使用してコンテナー内の BLOB のクエリとフィルター処理を行う場合、応答に含まれるのはベース BLOB のみです。 要求されたキーと値を持つ BLOB バージョンまたはスナップショットは含まれません。

ロールとアクセス許可

Azure 組み込みロールに対してロールの割り当て条件を使用している場合は、ロールがプリンシパルに付与するアクセス許可をすべて慎重に確認する必要があります。

継承されたロールの割り当て

ロールの割り当ては、管理グループ、サブスクリプション、リソース グループ、ストレージ アカウント、またはコンテナーに対して構成できます。また、各レベルで指定された順序で継承されます。 Azure RBAC には加法モデルがあるため、各レベルでのロール割り当ての合計が有効なアクセス許可になります。 複数のロールの割り当てを使用して、プリンシパルに同じアクセス許可が割り当てられている場合、そのアクセス許可を使用している操作に対するアクセスは、すべてのレベルで割り当てごとに個別に評価されます。

条件はロールの割り当ての条件として実装されるため、無条件のロールの割り当てを使用すると、ユーザーは条件をバイパスできます。 たとえば、ストレージ BLOB データ共同作成者ロールは、ストレージ アカウントとサブスクリプションのユーザーに割り当てて、条件は、ストレージ アカウントの割り当てにのみ追加するとします。 これで、ユーザーは、サブスクリプション レベルでのロールの割り当てによって、ストレージ アカウントに無制限にアクセスできます。

そのため、リソース階層全体のすべてのロールの割り当てに対して、一貫した条件を適用する必要があるのです。

その他の注意事項

BLOB を書き込む条件操作

BLOB を書き込む多くの操作に、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write または Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action のいずれかのアクセス許可が必要です。 ストレージ BLOB データ所有者ストレージ BLOB データ共同作成者などの組み込みロールは、セキュリティ プリンシパルに両方の権限を付与します。

これらのロールに対してロールの割り当て条件を定義する場合は、これらのアクセス許可の両方で同じ条件を使用し、書き込み操作に対して一貫性のあるアクセス制限を確保する必要があります。

Copy Blob と Copy Blob From URL の動作

Copy Blob および Copy Blob From URL 操作の場合、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write アクションの属性として BLOB パスを使用する条件 @Request とそのサブ操作は、コピー先 BLOB に対してのみ評価されます。

コピー元 BLOB の条件では、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read アクションの条件 @Resource が評価されます。

関連項目