Azure 역할 할당 조건 형식 및 구문

조건은 필요에 따라 역할 할당에 추가하여 더 세분화된 액세스 제어를 제공할 수 있는 추가 검사입니다. 예를 들어 개체를 읽을 특정 태그를 포함하는 개체를 필요로 하는 조건을 추가할 수 있습니다. 이 문서에서는 역할 할당 조건의 형식 및 구문을 설명합니다.

조건 형식

역할 할당 조건을 더 잘 이해하려면 형식을 살펴보는 것이 좋습니다.

단순 조건

가장 기본적인 조건은 대상 동작과 식으로 구성됩니다. 작업은 사용자가 리소스 형식에 대해 수행할 수 있는 작업입니다. 식은 true 또는 false로 평가되는 명령문이며 작업을 수행할 수 있는지 여부를 결정합니다.

다음은 단순 조건의 형식을 보여줍니다.

단일 작업 및 단일 식이 있는 단순 조건의 형식입니다.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

다음 조건에는 "Blob 읽기" 작업이 있습니다. 식은 컨테이너 이름이 blob-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>을 수행할 수 없습니다.

다음 의사 코드는 이 조건을 읽을 수 있는 다른 방법을 보여줍니다.

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인 경우 허용할 여러 작업이 포함될 수 있습니다. 단일 조건에 대해 여러 작업을 선택하는 경우 선택한 작업에서 특성을 사용할 수 있어야 하므로 조건에 대해 선택할 특성이 적을 수 있습니다.

조건이 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
...

actions

현재 Blob 스토리지 또는 큐 스토리지 데이터 작업을 포함하는 기본 제공 또는 사용자 지정 역할 할당에 조건을 추가할 수 있습니다. 여기에는 다음과 같은 기본 제공 역할이 포함됩니다.

조건에서 사용할 수 있는 스토리지 작업 목록은 다음을 참조하세요.

특성

선택한 작업에 따라 다른 위치에서 특성을 찾을 수 있습니다. 단일 조건에 대해 여러 작업을 선택하는 경우 선택한 모든 작업에서 특성을 사용할 수 있어야 하므로 조건에 대해 선택할 특성이 적을 수 있습니다. 특성을 지정하려면 원본을 접두사로 포함해야 합니다.

특성 원본 설명 코드
환경 특성은 요청의 네트워크 원본 또는 현재 날짜 및 시간과 같은 요청 환경과 연결됩니다.
@Environment
주 서버 특성은 사용자 또는 엔터프라이즈 애플리케이션(서비스 주체)과 같이 보안 주체에 할당된 사용자 지정 보안 특성입니다. @Principal
요청 특성은 BLOB 인덱스 태그 설정과 같은 작업 요청의 일부입니다. @Request
리소스 특성은 컨테이너 이름과 같은 리소스의 속성입니다. @Resource

조건에서 사용할 수 있는 스토리지 특성의 전체 목록은 다음을 참조하세요.

환경 특성

환경 특성은 액세스 요청이 수행되는 상황(예: 날짜 및 시간 또는 네트워크 환경)과 연결됩니다. 네트워크 환경은 특정 프라이빗 엔드포인트 또는 가상 네트워크 서브넷을 통해 액세스하는지 또는 프라이빗 링크를 통해 액세스하는지 여부일 수 있습니다.

다음 표에서는 조건에 대해 지원되는 환경 특성을 나열합니다.

표시 이름 설명 Attribute Type
프라이빗 링크1 프라이빗 링크를 통해 액세스해야 하는 조건에서 이 특성을 사용합니다. isPrivateLink 부울
프라이빗 엔드포인트1,2 특정 프라이빗 엔드포인트에 대한 액세스를 제한하려면 조건에서 이 특성을 사용합니다. Microsoft.Network/privateEndpoints String
서브넷1,3 특정 서브넷에서 액세스를 제한하려면 조건에서 이 특성을 사용합니다. Microsoft.Network/virtualNetworks/subnets String
현재 UTC 특정 기간 동안 개체에 대한 액세스를 제한하려면 조건에서 이 특성을 사용합니다. UtcNow DateTime

1 복사 작업의 경우 Is private link, Private endpointSubnet 특성은 원본이 아닌 스토리지 계정과 같은 대상에만 적용됩니다. 이 작업에 적용되는 복사 작업에 대한 자세한 내용은 테이블에서 각 특성을 선택하여 자세한 내용을 확인합니다.
2 현재 구독에 하나 이상의 프라이빗 엔드포인트가 구성된 경우에만 Private endpoint 특성을 사용할 수 있습니다.
3 현재 구독에 구성된 서비스 엔드포인트를 사용하는 가상 네트워크 서브넷이 하나 이상 있는 경우에만 Subnet 특성을 사용할 수 있습니다.

보안 주체 특성

주 특성은 리소스에 대한 액세스를 요청하는 보안 주체에 할당된 사용자 지정 보안 특성입니다. 보안 주체는 사용자 또는 엔터프라이즈 애플리케이션(서비스 주체)일 수 있습니다.

보안 주체 특성을 사용하려면 다음이 있어야 합니다.

  • 로그인한 사용자에 대한 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 조건 작성기에서 이러한 특성에 대해서만 지원됩니다. PowerShell, Azure CLI, REST API 및 Azure Portal에서 조건 코드 편집기와 같은 다른 도구를 사용하여 모든 특성에 Exists 연산자를 추가할 수 있습니다.

논리 연산자

이 섹션에는 조건을 구성하는 데 사용할 수 있는 논리 연산자가 나열되어 있습니다.

속성
연산자 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) 연산자의 부정

StringStartSkopenowh

속성
연산자 StringStartsWith
StringStartsWithIgnoreCase
설명 대/소문자를 구분하여(또는 대/소문자를 구분하지 않고) 일치 여부 확인. 값은 문자열로 시작합니다.

StringNotStartsWith

속성
연산자 StringNotStartsWith
StringNotStartsWithIgnoreCase
설명 StringStartsWith(또는 StringStartsWithIgnoreCase) 연산자의 부정

StringLike

속성
연산자 StringLike
StringLikeIgnoreCase
설명 대/소문자를 구분하여(또는 대/소문자를 구분하지 않고) 일치 여부 확인. 이 값은 문자열의 임의의 위치에 여러 문자 일치 와일드카드(*) 또는 단일 문자 일치 와일드카드(?)를 포함할 수 있습니다. 이러한 문자는 필요한 경우 백슬래시 \*\?를 추가하여 이스케이프할 수 있습니다.
예제 @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(Globally Unique Identifier) 비교 연산자를 나열합니다.

속성
연산자 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
설명 왼쪽에 있는 하나 이상의 값이 오른쪽에 있는 하나 이상의 값에 대한 비교를 충족하는 경우 식은 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
설명 왼쪽에 있는 모든 값이 오른쪽에 있는 하나 이상의 값에 대한 비교를 충족하는 경우 식은 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
설명 왼쪽에 있는 하나 이상의 값이 오른쪽에 있는 모든 값에 대한 비교를 충족하는 경우 식은 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 연산자와 함께 사용할 수 있습니다. 필요한 경우 백슬래시를 추가하여(\?) 물음표를 이스케이프할 수 있습니다.
$ 달러 기호($)는 태그 키를 묘사하는 데 사용됩니다. Azure PowerShell에서 큰따옴표(")로 묶인 문자열에 달러 기호가 포함된 경우 백틱(`) 접두사를 붙여야 합니다. 예: tags:Project<`$key_case_sensitive`$>

그룹화 및 우선 순위

식 간에 연산자가 서로 다른 대상 작업에 대해 세 개 이상의 식이 있는 경우 평가 순서가 모호합니다. 괄호 ()를 사용하여 식을 그룹화하고 식이 계산되는 순서를 지정합니다. 괄호로 묶인 식이 우선 순위가 더 높습니다. 예를 들어 다음 식이 있는 경우:

a AND b OR c

다음 중 한 가지 방법으로 괄호를 추가해야 합니다.

(a AND b) OR c
a AND (b OR c)

다음 단계