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'
)
)
조건이 평가되는 방법
사용자가 <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인 경우 허용할 여러 작업이 포함될 수 있습니다. 단일 조건에 대해 여러 작업을 선택하는 경우 선택한 작업에서 특성을 사용할 수 있어야 하므로 조건에 대해 선택할 특성이 적을 수 있습니다.
(
(
!(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 스토리지 또는 큐 스토리지 데이터 작업을 포함하는 기본 제공 또는 사용자 지정 역할 할당에 조건을 추가할 수 있습니다. 여기에는 다음과 같은 기본 제공 역할이 포함됩니다.
- Storage Blob 데이터 기여자
- Storage Blob 데이터 소유자
- Storage Blob 데이터 읽기 권한자
- Storage 큐 데이터 기여자
- Storage 큐 데이터 메시지 처리자
- Storage 큐 데이터 메시지 보내는 사람
- Storage 큐 데이터 읽기 권한자
조건에서 사용할 수 있는 스토리지 작업 목록은 다음을 참조하세요.
특성
선택한 작업에 따라 다른 위치에서 특성을 찾을 수 있습니다. 단일 조건에 대해 여러 작업을 선택하는 경우 선택한 모든 작업에서 특성을 사용할 수 있어야 하므로 조건에 대해 선택할 특성이 적을 수 있습니다. 특성을 지정하려면 원본을 접두사로 포함해야 합니다.
특성 원본 | 설명 | 코드 |
---|---|---|
환경 | 특성은 요청의 네트워크 원본 또는 현재 날짜 및 시간과 같은 요청 환경과 연결됩니다. |
@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 endpoint
및 Subnet
특성은 원본이 아닌 스토리지 계정과 같은 대상에만 적용됩니다. 이 작업에 적용되는 복사 작업에 대한 자세한 내용은 테이블에서 각 특성을 선택하여 자세한 내용을 확인합니다.
2 현재 구독에 하나 이상의 프라이빗 엔드포인트가 구성된 경우에만 Private endpoint
특성을 사용할 수 있습니다.
3 현재 구독에 구성된 서비스 엔드포인트를 사용하는 가상 네트워크 서브넷이 하나 이상 있는 경우에만 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 조건 작성기에서 이러한 특성에 대해서만 지원됩니다. 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)