역할을 사용하여 리소스 액세스 제어
Azure 리소스에 대한 기본 제공 역할(PowerShell 사용)
Azure는 가장 일반적인 보안 시나리오를 해결하기 위한 몇 가지 기본 제공 역할을 제공합니다. 역할의 작동 방식을 파악하기 위해 모든 리소스 종류에 적용되는 다음 세 가지 역할을 살펴봅시다.
- 소유자: 액세스 권한을 다른 사용자에게 위임할 수 있는 권한을 포함하여 모든 리소스에 대한 전체 액세스 권한을 보유합니다.
- 기여자: 모든 유형의 Azure 리소스를 만들고 관리할 수 있지만 다른 사용자에게 액세스 권한을 부여할 수 없습니다.
- 읽기 권한자: 기존 Azure 리소스를 볼 수 있습니다.
역할 정의
각 역할은 JSON(JavaScript Object Notation) 파일에 정의된 속성 집합입니다. 역할 정의에는 이름, ID설명이 포함됩니다. 허용된 권한(Actions), 거부된 권한(NotActions) 및 역할의 범위(예: 읽기 권한)도 포함됩니다.
소유자 역할의 경우 별표(*)로 표시되는 모든 작업, 거부된 작업 없음, 슬래시(/)로 표시되는 모든 범위에 해당합니다.
PowerShell Get-AzRoleDefinition Owner
cmdlet을 사용하여 이 정보를 가져올 수 있습니다.
Get-AzRoleDefinition Owner
이 코드는 다음과 같은 결과를 생성합니다.
Name : Owner
Id : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
IsCustom : False
Description : Lets you manage everything, including access to resources.
Actions : {*}
NotActions : {}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
참가자 및 읽기 권한자 역할에 대해 동일한 작업을 수행하여 허용된 작업과 거부된 작업을 확인합니다.
기본 제공 역할
Microsoft Entra ID의 RBAC 및 사용자 역할에 대한 심층적인 검사는 Microsoft Entra ID의 RBAC 및 사용자 역할 검사를 참조하세요.
역할 정의란?
역할 정의는 사용 권한 컬렉션입니다. 역할 정의에는 읽기, 쓰기, 삭제 등 역할이 수행할 수 있는 작업이 나열됩니다. 수행할 수 없는 작업이나 기본 데이터와 관련된 작업도 나열될 수 있습니다.
앞에서 설명한 것처럼 역할 정의의 구조는 다음과 같습니다.
이름 | 설명 |
---|---|
Id |
Azure에서 할당한 역할의 고유 식별자 |
IsCustom |
사용자 지정 역할인 경우 True이고, 기본 제공 역할인 경우 False입니다. |
Description |
역할에 대한 읽기 가능한 설명 |
Actions [] |
허용된 사용 권한으로, * 는 모두를 나타냅니다. |
NotActions [] |
거부된 사용 권한 |
DataActions [] |
데이터에 적용되는, 허용된 특정 사용 권한입니다(예: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read ). |
NotDataActions [] |
데이터에 적용되는, 거부된 특정 사용 권한입니다. |
AssignableScopes [] |
이 역할이 적용되는 범위. / 는 전역을 나타내지만 계층 트리까지 도달할 수 있습니다. |
RBAC(Role-Based Access Control, 역할 기반 액세스 제어) 또는 기본 API에서 사용할 경우 이 구조는 JSON으로 표현됩니다. 예를 들어 다음은 JSON 형식의 참가자 역할 정의입니다.
{
"Name": "Contributor",
"Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"IsCustom": false,
"Description": "Lets you manage everything except access to resources.",
"Actions": [
"*"
],
"NotActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/"
]
}
Actions 및 NotActions
Actions
및 NotActions
속성을 조정하여 필요한 사용 권한을 정확히 부여하고 거부할 수 있습니다. 두 속성은 항상 {Company}.{ProviderName}/{resourceType}/{action}
형식입니다.
예를 들어 다음은 앞에서 살펴본 세 가지 역할의 작업입니다.
기본 제공 역할 | Actions | NotActions |
---|---|---|
소유자(모든 작업 허용) | * |
- |
참가자(역할 할당 작성 또는 삭제를 제외한 모든 작업 허용) | * |
Microsoft.Authorization/*/Delete, Microsoft.Authorization/*/Write, Microsoft.Authorization/elevateAccess/Action |
읽기 권한자(모든 읽기 작업 허용) | */read |
- |
Actions
의 와일드카드(*
) 작업은 이 역할에 할당된 보안 주체가 모든 작업을 수행할 수 있음을 나타냅니다. 즉, 새 리소스 종류가 Azure에 추가될 때 이 역할은 나중에 정의된 작업을 포함하여 모든 항목을 관리할 수 있습니다. 읽기 권한자 역할의 경우 read
작업만 허용됩니다.
NotActions
에 포함된 작업은 Actions
에서 제외됩니다. 참가자 역할에서 NotActions
는 리소스에 대한 액세스를 관리하는 이 역할의 기능을 제거하고, 리소스에 액세스를 할당하는 기능도 제거합니다.
DataActions 및 NotDataActions
데이터 작업은 DataActions
및 NotDataActions
속성에 명시됩니다. 관리 작업과 별도로 데이터 작업을 지정할 수 있습니다. 이렇게 하면 와일드카드(*
)를 사용한 현재 역할 조정이 갑자기 데이터에 액세스할 수 있게 되는 경우를 방지할 수 있습니다. DataActions
및 NotDataActions
에서 지정할 수 있는 몇 가지 데이터 작업은 다음과 같습니다.
- 컨테이너의 Blob 목록 읽기
- 컨테이너에서 Storage Blob 작성
- 큐의 메시지 삭제
DataActions
및 NotDataActions
속성에만 데이터 작업을 추가할 수 있습니다. 리소스 공급자는 isDataAction
속성을 true
로 설정하여 데이터 작업을 확인합니다. 데이터 작업이 없는 역할은 역할 정의에서 해당 속성을 생략할 수 있습니다.
이 작업은 해당하는 관리 작업과 똑같이 작동합니다. 허용하려는 작업을 지정하고(또는 모든 작업을 허용하려면 *
지정), NotDataActions
컬렉션에서 제거할 특정 작업 목록을 제공할 수 있습니다. 다음은 몇 가지 예입니다. 리소스 공급자 설명서에서 작업 및 데이터 작업의 전체 목록을 확인할 수 있습니다.
데이터 작업 | 설명 |
---|---|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
Blob 데이터 삭제 |
Microsoft.Compute/virtualMachines/login/action |
일반 사용자로 VM에 로그인 |
Microsoft.EventHub/namespaces/messages/send/action |
이벤트 허브를 통해 메시지 보내기 |
Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read |
파일/폴더 또는 파일/폴더 목록 반환 |
Microsoft.Storage/storageAccounts/queueServices/queues/messages/read |
큐에서 메시지 읽기 |
할당 가능한 범위
Actions 및 NotActions 속성 정의만으로는 역할을 완전히 구현할 수 없습니다. 역할의 범위도 올바르게 지정해야 합니다.
역할의 AssignableScopes 속성은 역할을 할당할 수 있는 범위(구독, 리소스 그룹 또는 리소스)를 지정합니다. 역할이 필요한 구독이나 리소스 그룹에만 사용자 지정 역할을 할당할 수 있도록 설정하여, 그 외의 구독이나 리소스 그룹에서는 사용자 환경이 복잡해지는 것을 방지할 수 있습니다.
다음 몇 가지 예를 참조하세요.
작업 | 사용 범위 |
---|---|
구독으로 제한 | "/subscriptions/{sub-id}" |
특정 구독의 특정 리소스 그룹으로 제한 | "/subscriptions/{sub-id}/resourceGroups/{rg-name}" |
특정 리소스로 제한 | "/subscriptions/{sub-id}/resourceGroups/{rg-name}/{resource-name}" |
두 개의 구독에 역할을 할당할 수 있도록 설정 | "/subscriptions/{sub-id}", "/subscriptions/{sub-id}" |
역할 만들기
Microsoft Entra ID에는 사용자가 원하는 작업의 99%를 처리할 수 있는 기본 제공 역할이 포함되어 있습니다. 가능하면 기본 제공 역할을 사용하는 것이 좋습니다. 그러나 필요한 경우에는 사용자 지정 역할을 만들 수 있습니다.
참고 항목
사용자 지정 역할을 만들려면 Microsoft Entra ID P1 또는 P2가 필요합니다. 무료 계층에서는 사용자 지정 역할을 만들 수 없습니다.
다음과 같은 여러 메커니즘을 통해 새 역할을 만들 수 있습니다.
Microsoft Entra 관리 센터: Microsoft Entra 관리 센터를 사용하면 왼쪽 메뉴의 역할 및 관리자에서 역할 및 관리자를 선택한 다음 새 사용자 지정 역할을 선택하여 사용자 지정 역할을 만들 수 있습니다.
Azure Portal: Azure Portal에서 Microsoft Entra ID>역할 및 관리자>새 사용자 지정 역할을 선택하여 사용자 지정 역할을 만들 수 있습니다.
Azure PowerShell:
New-AzRoleDefinition
cmdlet을 사용하여 새 역할을 정의할 수 있습니다.Azure Graph API: Graph API에 대한 REST 호출을 사용하여 프로그래밍 방식으로 새 역할을 만들 수 있습니다.
이 모듈의 요약 섹션에는 이러한 방식에 대한 설명서에 대한 링크가 포함되어 있습니다.