Azure のロールの割り当て条件の形式と構文
条件は、よりきめ細かなアクセス制御を行うために、必要に応じてロールの割り当てに追加できる追加のチェックです。 たとえば、特定のタグが設定されたオブジェクトしか読み取れない、という条件を設定できます。 この記事では、ロールの割り当て条件の形式と構文について説明します。
条件の形式
ロールの割り当て条件をよりよく理解するには、形式を確認することが役立ちます。
単純な条件
最も基本的な条件は、対象となるアクションと式で構成されます。 アクションは、あるリソースの種類に対してユーザーが実行できる操作です。 式は、true または false に評価されるステートメントであり、アクションの実行が許可されるかどうかを決定します。
単純な条件の形式を次に示します。
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
次の条件には、"BLOB を読み取る" というアクションがあります。 式では、コンテナー名が blobs-example-container であるかどうかがチェックされます。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
StringEquals 'blobs-example-container'
)
)
条件の評価方法
ユーザーがロールの割り当て内の、<action>
でないアクションを実行しようとする場合、!(ActionMatches)
は true に評価され、全体的な条件は true に評価されて、アクションの実行が許可されます。
ユーザーがロールの割り当て内の <action>
を実行しようとする場合、!(ActionMatches)
は false に評価され、それにより、式が評価されます。 式が true に評価された場合、全体的な条件は true に評価され、<action>
の実行が許可されます。 それ以外の場合は、<action>
の実行は許可されません。
次の擬似コードは、この条件を読み取ることができるもう 1 つの方法を示しています。
if a user tries to perform an action in the role assignment that does not match <action>
{
Allow action to be performed
}
else
{
if <attribute> <operator> <value> is true
{
Allow <action> to be performed
}
else
{
Do not allow <action> to be performed
}
}
サブ操作
一部のアクションには副操作があります。 たとえば、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
データ アクションには副操作 "BLOB の一覧表示" があります。 副操作を含む条件の形式は次のとおりです。
(
(
!(ActionMatches{'<action>'}
AND
SubOperationMatches{'<subOperation>'})
)
OR
(
<attribute> <operator> <value>
)
)
複数のアクション
条件には、その条件が true の場合に許可する複数のアクションを含めることができます。 1 つの条件に対して複数のアクションを選択すると、選択したアクション全体で属性が使用できる必要があるため、条件のために選択する属性の数は少なくなる可能性があります。
(
(
!(ActionMatches{'<action>'})
AND
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
複数の式
条件には複数の式を含めることができます。 演算子に応じて、属性を複数の値に対してチェックできます。
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
複数の条件
条件を組み合わせて複数のアクションを対象にすることもできます。
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
AND
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> <value>
)
)
条件の構文
ロールの割り当て条件の構文を次に示します。
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
...
アクション
現在条件を追加できるのは、BLOB ストレージまたはキュー ストレージ データ アクションがある、組み込みまたはカスタムのロール割り当てです。 これらには、次の組み込みロールが含まれます。
- ストレージ BLOB データ共同作成者
- ストレージ BLOB データ所有者
- ストレージ BLOB データ閲覧者
- ストレージ キュー データ共同作成者共同作成者
- ストレージ キュー データのメッセージ プロセッサ
- ストレージ キュー データ メッセージ送信者
- ストレージ キュー データ閲覧者
条件で使用できるストレージ アクションの一覧については、以下を参照してください。
属性
選択したアクションによっては、属性が異なる場所にある場合があります。 1 つの条件に対して複数のアクションを選択した場合、属性は、選択したすべてのアクションに対して使用できる必要があるため、その条件に対して選択できる属性の数は少なくなる場合があります。 属性を指定するには、ソースをプレフィックスとして含める必要があります。
Attribute source (属性ソース) | 説明 | コード |
---|---|---|
Environment | 属性は、要求のネットワークの発信元や現在の日時など、要求の環境に関連付けられます。 |
@Environment |
プリンシパル | 属性は、ユーザーやエンタープライズ アプリケーション (サービス プリンシパル) などのプリンシパルに割り当てられるカスタム セキュリティ属性です。 | @Principal |
Request | 属性は、BLOB インデックス タグの設定などのアクション要求の一部です。 | @Request |
リソース | 属性は、コンテナー名などのリソースのプロパティです。 | @Resource |
条件で使用できるストレージ属性の完全な一覧については、以下を参照してください。
環境属性
環境属性は、日時やネットワーク環境など、アクセス要求が行われた状況に関連付けられます。 ネットワーク環境は、アクセスが特定のプライベート エンドポイント経由、仮想ネットワーク サブネット経由、または任意のプライベート リンク経由のいずれかの可能性があります。
次の表に、条件に対してサポートされている環境属性を示します。
[表示名] | 説明 | 属性 | Type |
---|---|---|---|
Is private link1 | この属性は、任意のプライベート リンク経由のアクセスを要求する条件で使用します。 | isPrivateLink |
Boolean |
プライベート エンドポイント 1、2 | この属性は、特定のプライベート エンドポイント経由にアクセスを制限する条件で使用します。 | Microsoft.Network/privateEndpoints |
String |
サブネット 1、3 | この属性は、特定のサブネットからのアクセスを制限する条件で使用します。 | Microsoft.Network/virtualNetworks/subnets |
String |
UTC 現在 | この属性は、特定の時間間隔でオブジェクトへのアクセスを制限する条件で使用します。 | UtcNow |
DateTime |
1 コピー操作の場合、Is private link
、Private endpoint
、Subnet
属性はソースではなく、ストレージ アカウントなどの宛先にのみ適用されます。 これが適用されるコピー操作の詳細については、表の各属性を選択して詳細を参照してください。
2 サブスクリプションに 1 つ以上のプライベート エンドポイントが構成されている場合に、Private endpoint
属性のみ使用できます。
3 現時点で、サブスクリプションにサービス エンドポイントを使用する 1 つ以上の仮想ネットワーク サブネットが構成されている場合に、Subnet
属性のみ使用できます。
プリンシパル属性
プリンシパル属性は、リソースへのアクセスを要求するセキュリティ プリンシパルに割り当てられるカスタム セキュリティ属性です。 セキュリティ プリンシパルは、ユーザーまたはエンタープライズ アプリケーション (サービス プリンシパル) の場合があります。
プリンシパル属性を使用するには、次のものが必要です。
- サインインしているユーザーの、属性割り当て管理者ロールなどの Microsoft Entra アクセス許可
- Microsoft Entra ID で定義されているカスタム セキュリティ属性
カスタム セキュリティ属性の詳細については、以下を参照してください。
- Microsoft Entra ID でカスタム セキュリティ属性を追加または非アクティブ化する
- タグとカスタム セキュリティ属性に基づいて BLOB への読み取りアクセスを許可する
- 属性ソースにプリンシパルが表示されない
要求属性
要求属性は、一覧表示される BLOB の指定されたプレフィックスなど、アクセス要求で指定された基準に関連付けられます。
リソース属性
リソース属性は、ストレージ アカウント名、コンテナー名、ストレージ アカウントに対して階層型名前空間が有効になっているかどうかなど、アクセスが要求されるオブジェクトに関連付けられます。
関数演算子
このセクションでは、条件を構成するために使用できる関数演算子を一覧で示します。
ActionMatches
プロパティ | 値 |
---|---|
Operator | ActionMatches |
説明 | 現在のアクションが指定したアクション パターンと一致するかどうかをチェックします。 |
使用例 | ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} チェックされているアクションが "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read" と等しい場合は true ActionMatches{'Microsoft.Authorization/roleAssignments/*'} チェックされているアクションが "Microsoft.Authorization/roleAssignments/write" と等しい場合は true ActionMatches{'Microsoft.Authorization/roleDefinitions/*'} チェックされているアクションが "Microsoft.Authorization/roleAssignments/write" と等しい場合は false |
SubOperationMatches
プロパティ | 値 |
---|---|
Operator | SubOperationMatches |
説明 | 現在のサブ操作が、指定したサブ操作パターンと一致するかどうかをチェックします。 |
使用例 | SubOperationMatches{'Blob.List'} |
Exists
プロパティ | 値 |
---|---|
Operator | Exists |
説明 | 指定した属性が存在するかどうかをチェックします。 |
使用例 | Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot] |
属性のサポート 1 | 暗号化スコープ名 スナップショット バージョン ID |
1 Exists
演算子は、Azure portal のビジュアル ABAC 条件ビルダーで、これらの属性に対してのみサポートされます。 Exists
演算子は、PowerShell、Azure CLI、REST API、Azure portal の条件コード エディターなど、他のツールを使って任意の属性に追加できます。
論理演算子
このセクションでは、条件を構成するために使用できる論理演算子を一覧で示します。
および
プロパティ | 値 |
---|---|
演算子 | AND && |
説明 | AND 演算子。 |
使用例 | !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) |
または
プロパティ | 値 |
---|---|
演算子 | OR || |
説明 | OR 演算子。 |
使用例 | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId |
Not
プロパティ | 値 |
---|---|
演算子 | NOT ! |
説明 | NOT または否定演算子。 |
使用例 | NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] |
ブール値の比較演算子
このセクションでは、条件を構成するために使用できるブール値の比較演算子を一覧で示します。
プロパティ | 値 |
---|---|
演算子 | BoolEquals BoolNotEquals |
説明 | ブール値の比較 |
使用例 | @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true |
文字列の比較演算子
このセクションでは、条件を構成するために使用できる文字列の比較演算子を一覧で示します。
StringEquals
プロパティ | 値 |
---|---|
演算子 | StringEquals StringEqualsIgnoreCase |
説明 | 大文字と小文字を区別する (または大文字と小文字を区別しない) 一致。 値は文字列と正確に一致している必要があります。 |
使用例 | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' |
StringNotEquals
プロパティ | 値 |
---|---|
演算子 | StringNotEquals StringNotEqualsIgnoreCase |
説明 | StringEquals (または StringEqualsIgnoreCase ) 演算子の否定 |
StringStartsWith
プロパティ | 値 |
---|---|
演算子 | StringStartsWith StringStartsWithIgnoreCase |
説明 | 大文字と小文字を区別する (または大文字と小文字を区別しない) 一致。 値は文字列で始まります。 |
StringNotStartsWith
プロパティ | 値 |
---|---|
演算子 | StringNotStartsWith StringNotStartsWithIgnoreCase |
説明 | StringStartsWith (または StringStartsWithIgnoreCase ) 演算子の否定 |
StringLike
プロパティ | 値 |
---|---|
演算子 | StringLike StringLikeIgnoreCase |
説明 | 大文字と小文字を区別する (または大文字と小文字を区別しない) 一致。 値では、文字列内の任意の場所に複数文字の一致ワイルドカード (* ) または 1 文字の一致ワイルドカード (? ) を含めることができ ます。 必要であれば、円記号 \* と \? を追加してこれらの文字をエスケープできます。 |
使用例 | @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*' Resource[name1] StringLike 'a*c?' Resource[name1] が "abcd" と等しい場合は true Resource[name1] StringLike 'A*C?' Resource[name1] が "abcd" と等しい場合は false Resource[name1] StringLike 'a*c' Resource[name1] が "abcd" と等しい場合は false |
StringNotLike
プロパティ | 値 |
---|---|
演算子 | StringNotLike StringNotLikeIgnoreCase |
説明 | StringLike (または StringLikeIgnoreCase ) 演算子の否定 |
数値の比較演算子
このセクションでは、条件を構成するために使用できる数値の比較演算子を一覧で示します。
プロパティ | 値 |
---|---|
演算子 | NumericEquals NumericNotEquals NumericGreaterThan NumericGreaterThanEquals NumericLessThan NumericLessThanEquals |
説明 | 数値の一致。 整数のみがサポートされています。 |
DateTime 比較演算子
このセクションでは、条件の構築に使用できる日付/時刻の比較演算子の一覧を示します。
プロパティ | 値 |
---|---|
演算子 | DateTimeEquals DateTimeNotEquals DateTimeGreaterThan DateTimeGreaterThanEquals DateTimeLessThan DateTimeLessThanEquals |
説明 | yyyy-mm-ddThh:mm:ss.mmmmmmmZ の形式で完全な精度チェックを行います。 BLOB バージョン ID、BLOB スナップショット、および UTC に使用されるようになりました。 |
使用例 | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' |
GUID 比較演算子
このセクションでは、条件の構築に使用できるグローバル一意識別子 (GUID) の比較演算子の一覧を示します。
プロパティ | 値 |
---|---|
演算子 | GuidEquals GuidNotEquals |
説明 | 次の形式を使用して、大文字と小文字を区別する一致: 00000000-0000-0000-0000-000000000000 。 プリンシパル ID やロール定義 ID など、リソースを識別するために使用されます。 |
使用例 |
クロス積の比較演算子
このセクションでは、条件の構築に使用できるクロス積の比較演算子の一覧を示します。
ForAnyOfAnyValues
プロパティ | 値 |
---|---|
演算子 | ForAnyOfAnyValues:StringEquals ForAnyOfAnyValues:StringEqualsIgnoreCase ForAnyOfAnyValues:StringNotEquals ForAnyOfAnyValues:StringNotEqualsIgnoreCase ForAnyOfAnyValues:StringLike ForAnyOfAnyValues:StringLikeIgnoreCase ForAnyOfAnyValues:StringNotLike ForAnyOfAnyValues:StringNotLikeIgnoreCase ForAnyOfAnyValues:NumericEquals ForAnyOfAnyValues:NumericNotEquals ForAnyOfAnyValues:NumericGreaterThan ForAnyOfAnyValues:NumericGreaterThanEquals ForAnyOfAnyValues:NumericLessThan ForAnyOfAnyValues:NumericLessThanEquals ForAnyOfAnyValues:GuidEquals ForAnyOfAnyValues:GuidNotEquals |
説明 | 左側の少なくとも 1 つの値が右側の少なくとも 1 つの値との比較を満たす場合、式は true に評価されます。 形式は ForAnyOfAnyValues:<BooleanFunction> です。 複数の文字列と数値をサポートします。 |
使用例 | @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'} 暗号化スコープ名が validScope1 または validScope2 の場合は true{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'} true {'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'} false |
ForAllOfAnyValues
プロパティ | 値 |
---|---|
演算子 | ForAllOfAnyValues:StringEquals ForAllOfAnyValues:StringEqualsIgnoreCase ForAllOfAnyValues:StringNotEquals ForAllOfAnyValues:StringNotEqualsIgnoreCase ForAllOfAnyValues:StringLike ForAllOfAnyValues:StringLikeIgnoreCase ForAllOfAnyValues:StringNotLike ForAllOfAnyValues:StringNotLikeIgnoreCase ForAllOfAnyValues:NumericEquals ForAllOfAnyValues:NumericNotEquals ForAllOfAnyValues:NumericGreaterThan ForAllOfAnyValues:NumericGreaterThanEquals ForAllOfAnyValues:NumericLessThan ForAllOfAnyValues:NumericLessThanEquals ForAllOfAnyValues:GuidEquals ForAllOfAnyValues:GuidNotEquals |
説明 | 左側のすべての値が右側の少なくとも 1 つの値との比較を満たす場合、式は true に評価されます。 形式は ForAllOfAnyValues:<BooleanFunction> です。 複数の文字列と数値をサポートします。 |
使用例 | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'} {'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'} true {'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'} false |
ForAnyOfAllValues
プロパティ | 値 |
---|---|
演算子 | ForAnyOfAllValues:StringEquals ForAnyOfAllValues:StringEqualsIgnoreCase ForAnyOfAllValues:StringNotEquals ForAnyOfAllValues:StringNotEqualsIgnoreCase ForAnyOfAllValues:StringLike ForAnyOfAllValues:StringLikeIgnoreCase ForAnyOfAllValues:StringNotLike ForAnyOfAllValues:StringNotLikeIgnoreCase ForAnyOfAllValues:NumericEquals ForAnyOfAllValues:NumericNotEquals ForAnyOfAllValues:NumericGreaterThan ForAnyOfAllValues:NumericGreaterThanEquals ForAnyOfAllValues:NumericLessThan ForAnyOfAllValues:NumericLessThanEquals ForAnyOfAllValues:GuidEquals ForAnyOfAllValues:GuidNotEquals |
説明 | 左側の少なくとも 1 つの値が右側のすべての値との比較を満たす場合、式は true に評価されます。 形式は ForAnyOfAllValues:<BooleanFunction> です。 複数の文字列と数値をサポートします。 |
使用例 | {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18} true |
ForAllOfAllValues
プロパティ | 値 |
---|---|
演算子 | ForAllOfAllValues:StringEquals ForAllOfAllValues:StringEqualsIgnoreCase ForAllOfAllValues:StringNotEquals ForAllOfAllValues:StringNotEqualsIgnoreCase ForAllOfAllValues:StringLike ForAllOfAllValues:StringLikeIgnoreCase ForAllOfAllValues:StringNotLike ForAllOfAllValues:StringNotLikeIgnoreCase ForAllOfAllValues:NumericEquals ForAllOfAllValues:NumericNotEquals ForAllOfAllValues:NumericGreaterThan ForAllOfAllValues:NumericGreaterThanEquals ForAllOfAllValues:NumericLessThan ForAllOfAllValues:NumericLessThanEquals ForAllOfAllValues:GuidEquals ForAllOfAllValues:GuidNotEquals |
説明 | 左側のすべての値が右側のすべての値との比較を満たす場合、式は true に評価されます。 形式は ForAllOfAllValues:<BooleanFunction> です。 複数の文字列と数値をサポートします。 |
使用例 | {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18} false {10, 20} ForAllOfAllValues:NumericLessThan {25, 30} true {10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30} false |
特殊文字
文字 | 説明 |
---|---|
* |
アスタリスク (*) は、Like 演算子で使用できる複数文字のワイルドカード一致を表します。 必要であれば、円記号 \* を追加してアスタリスクをエスケープできます。 |
? |
疑問符 (?) は、Like 演算子で使用できる 1 文字のワイルドカード一致を表します。 必要であれば、円記号 \? を追加して疑問符をエスケープできます。 |
$ |
ドル記号 ($) は、タグ キーを区切るために使用します。 Azure PowerShell では、二重引用符 (") で囲まれた文字列にドル記号が含まれている場合、バックティック (`) でプレフィックスを付ける必要があります。 (例: tags:Project<`$key_case_sensitive`$> )。 |
グループ化と優先順位
対象のクションに対して 3 つ以上の式があり、式の間で演算子が異なっている場合、評価の順序はあいまいです。 かっこ ()
を使用して式をグループ化し、式を評価する順序を指定します。 かっこで囲まれた式は、より高い優先順位になります。 たとえば、次のような式があるとします。
a AND b OR c
次のいずれかの方法でかっこを追加する必要があります。
(a AND b) OR c
a AND (b OR c)