Azure のロールの割り当て条件の形式と構文

条件は、よりきめ細かなアクセス制御を行うために、必要に応じてロールの割り当てに追加できる追加のチェックです。 たとえば、特定のタグが設定されたオブジェクトしか読み取れない、という条件を設定できます。 この記事では、ロールの割り当て条件の形式と構文について説明します。

条件の形式

ロールの割り当て条件をよりよく理解するには、形式を確認することが役立ちます。

単純な条件

最も基本的な条件は、対象となるアクションと式で構成されます。 アクションは、あるリソースの種類に対してユーザーが実行できる操作です。 式は、true または false に評価されるステートメントであり、アクションの実行が許可されるかどうかを決定します。

単純な条件の形式を次に示します。

1 つのアクションと 1 つの式を含む単純な条件の形式。

(
    (
        !(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'
    )
)

特定のコンテナー名を持つ BLOB に対する読み取りアクセスを示す図。

条件の評価方法

ユーザーがロールの割り当て内の、<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 つの条件に対して複数のアクションを選択すると、選択したアクション全体で属性が使用できる必要があるため、条件のために選択する属性の数は少なくなる可能性があります。

条件が true の場合に許可する複数のアクションの形式。

(
    (
        !(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 ストレージまたはキュー ストレージ データ アクションがある、組み込みまたはカスタムのロール割り当てです。 これらには、次の組み込みロールが含まれます。

条件で使用できるストレージ アクションの一覧については、以下を参照してください。

属性

選択したアクションによっては、属性が異なる場所にある場合があります。 1 つの条件に対して複数のアクションを選択した場合、属性は、選択したすべてのアクションに対して使用できる必要があるため、その条件に対して選択できる属性の数は少なくなる場合があります。 属性を指定するには、ソースをプレフィックスとして含める必要があります。

Attribute source (属性ソース) 説明 Code
Environment 属性は、要求のネットワークの発信元や現在の日時など、要求の環境に関連付けられます。
@Environment
プリンシパル 属性は、ユーザーやエンタープライズ アプリケーション (サービス プリンシパル) などのプリンシパルに割り当てられるカスタム セキュリティ属性です。 @Principal
Request 属性は、BLOB インデックス タグの設定などのアクション要求の一部です。 @Request
リソース 属性は、コンテナー名などのリソースのプロパティです。 @Resource

条件で使用できるストレージ属性の完全な一覧については、以下を参照してください。

環境属性

環境属性は、日時やネットワーク環境など、アクセス要求が行われた状況に関連付けられます。 ネットワーク環境は、アクセスが特定のプライベート エンドポイント経由、仮想ネットワーク サブネット経由、または任意のプライベート リンク経由のいずれかの可能性があります。

次の表に、条件に対してサポートされている環境属性を示します。

[表示名] 説明 属性 タイプ
プライベート リンク1 この属性は、任意のプライベート リンク経由のアクセスを要求する条件で使用します。 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 現時点で、サブスクリプションにSubnetを使用する 1 つ以上の仮想ネットワーク サブネットが構成されている場合に、 属性のみ使用できます。

プリンシパル属性

プリンシパル属性は、リソースへのアクセスを要求するセキュリティ プリンシパルに割り当てられるカスタム セキュリティ属性です。 セキュリティ プリンシパルは、ユーザーまたはエンタープライズ アプリケーション (サービス プリンシパル) の場合があります。

プリンシパル属性を使用するには、次のものが必要です。

  • サインインしているユーザーの、属性割り当て管理者ロールなどの Microsoft Entra アクセス許可
  • Microsoft Entra ID で定義されているカスタム セキュリティ属性

カスタム セキュリティ属性の詳細については、以下を参照してください。

要求属性

要求属性は、一覧表示される 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

1Exists 演算子は、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)

次のステップ