Azure 역할 할당 이해

역할 할당을 사용하면 특정 Azure 리소스에 대한 액세스 권한을 보안 주체(예: 사용자, 그룹, 관리 ID 또는 서비스 주체)에 부여할 수 있습니다. 이 문서에서는 역할 할당에 대해 자세히 설명합니다.

역할 할당

역할 할당을 만들면 Azure 리소스에 대한 액세스 권한이 부여되고, 역할 할당을 제거하면 액세스 권한이 취소됩니다.

역할 할당에는 다음을 포함한 여러 구성 요소가 있습니다.

  • 역할이 할당된 보안 주체 또는 사용자
  • 할당된 역할
  • 역할이 할당된 범위
  • 역할 할당 이름 및 역할이 할당된 이유를 설명하는 데 도움이 되는 설명

예를 들어 Azure RBAC를 사용하여 할당할 수 있는 역할은 다음과 같습니다.

  • Sally라는 사용자는 ContosoStorage 리소스 그룹의 contoso123 스토리지 계정에 대한 소유자 액세스 권한을 갖습니다.
  • Microsoft Entra ID의 클라우드 관리자 그룹에 속한 모든 사람은 리소스 그룹 ContosoStorage의 모든 리소스에 대한 읽기 권한자 액세스 권한을 갖습니다.
  • 애플리케이션과 연결된 관리 ID는 Contoso의 구독 내에서 가상 머신을 다시 시작할 수 있습니다.

Azure PowerShell을 사용하여 표시되는 역할 할당의 속성에 대한 예는 다음과 같습니다.

{
  "RoleAssignmentName": "00000000-0000-0000-0000-000000000000",
  "RoleAssignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "Scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "DisplayName": "User Name",
  "SignInName": "user@contoso.com",
  "RoleDefinitionName": "Contributor",
  "RoleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "ObjectId": "22222222-2222-2222-2222-222222222222",
  "ObjectType": "User",
  "CanDelegate": false,
  "Description": null,
  "ConditionVersion": null,
  "Condition": null
}

Azure CLI 또는 REST API를 사용하여 표시되는 역할 할당의 속성에 대한 예는 다음과 같습니다.

{
  "canDelegate": null,
  "condition": null,
  "conditionVersion": null,
  "description": null,
  "id": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "name": "00000000-0000-0000-0000-000000000000",
  "principalId": "22222222-2222-2222-2222-222222222222",
  "principalName": "user@contoso.com",
  "principalType": "User",
  "roleDefinitionId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
  "roleDefinitionName": "Contributor",
  "scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "type": "Microsoft.Authorization/roleAssignments"
}

다음 표에서는 역할 할당 속성의 의미에 대해 설명합니다.

속성 설명
RoleAssignmentName
name
GUID(Globally Unique Identifier)인 역할 할당의 이름입니다.
RoleAssignmentId
id
이름을 포함하는 역할 할당의 고유 ID입니다.
Scope
scope
역할 할당의 범위가 지정된 Azure 리소스 식별자입니다.
RoleDefinitionId
roleDefinitionId
역할의 고유 ID입니다.
RoleDefinitionName
roleDefinitionName
역할의 이름.
ObjectId
principalId
역할이 할당된 보안 주체에 대한 Microsoft Entra 개체 식별자입니다.
ObjectType
principalType
주체가 나타내는 Microsoft Entra 개체의 형식입니다. 유효한 값은 User, GroupServicePrincipal입니다.
DisplayName 사용자에 대한 역할 할당의 경우 사용자의 표시 이름입니다.
SignInName
principalName
사용자의 UPN(고유한 주체 이름) 또는 서비스 주체와 연결된 애플리케이션의 이름입니다.
Description
description
역할 할당에 대한 설명입니다.
Condition
condition
역할 정의 및 특성에서 하나 이상의 작업을 사용하여 작성된 조건문입니다.
ConditionVersion
conditionVersion
조건 버전 번호입니다. 기본값은 2.0이며 지원되는 유일한 버전입니다.
CanDelegate
canDelegate
구현되지 않았습니다.

범위

역할 할당을 만드는 경우 적용되는 범위를 지정해야 합니다. 범위는 보안 주체가 액세스할 수 있는 리소스 또는 리소스 집합을 나타냅니다. 역할 할당 범위를 단일 리소스, 리소스 그룹, 구독 또는 관리 그룹으로 지정할 수 있습니다.

요구 사항을 충족하는 데 필요한 가장 작은 범위를 사용합니다.

예를 들어, 단일 스토리지 계정에 관리 ID 액세스 권한을 부여해야 하는 경우 보안상 리소스 그룹 또는 구독 범위가 아니라 스토리지 계정 범위에서 역할 할당을 만드는 것이 좋습니다.

범위에 대한 자세한 내용은 범위 이해를 참조하세요.

할당할 역할

역할 할당은 역할 정의와 연결됩니다. 역할 정의는 역할 할당 범위 내에서 보안 주체에 있어야 하는 권한을 지정합니다.

기본 제공 역할 정의 또는 사용자 지정 역할 정의를 할당할 수 있습니다. 역할 할당을 만들 때 일부 도구에서는 역할 정의 ID를 사용해야 하지만 다른 도구에서는 역할 이름을 제공할 수 있습니다.

역할 정의에 대한 자세한 내용은 역할 정의 이해를 참조하세요.

주 서버

보안 주체에는 사용자, 보안 그룹, 관리 ID, 워크로드 ID 및 서비스 주체가 포함됩니다. 주체는 Microsoft Entra 테넌트에서 만들어지고 관리됩니다. 역할은 모든 보안 주체에 할당할 수 있습니다. Microsoft Entra ID 개체 ID를 사용하여 역할을 할당하려는 주체를 식별합니다.

Azure PowerShell, Azure CLI, Bicep 또는 다른 IaC(Infrastructure as Code) 기술을 사용하여 역할 할당을 만들 때 보안 주체 유형을 지정합니다. 보안 주체 유형에는 User, GroupServicePrincipal이 포함됩니다. 보안 주체 유형을 올바르게 지정해야 합니다. 그렇지 않으면 특히 서비스 주체 및 관리 ID를 사용하는 경우 일시적인 배포 오류가 발생할 수 있습니다.

이름

역할 할당의 리소스 이름은 GUID(Globally Unique IDentifier)이어야 합니다.

역할 할당 리소스 이름은 역할 할당 범위가 더 좁은 경우에도 Microsoft Entra 테넌트 내에서 고유해야 합니다.

Azure Portal, Azure PowerShell 또는 Azure CLI를 사용하여 역할 할당을 만드는 경우 만들기 프로세스에서 자동으로 고유한 이름을 역할 할당에 지정합니다.

Bicep 또는 다른 IaC(Infrastructure as Code) 기술을 사용하여 역할 할당을 만드는 경우 역할 할당의 이름을 지정하는 방법을 신중하게 계획해야 합니다. 자세한 내용은 Bicep을 사용하여 Azure RBAC 리소스 만들기를 참조하세요.

리소스 삭제 동작

Microsoft Entra ID에서 사용자, 그룹, 서비스 주체 또는 관리 ID를 삭제할 때 모든 역할 할당을 삭제하는 것이 좋습니다. 자동으로 삭제되지 않습니다. 삭제된 보안 주체 ID를 참조하는 모든 역할 할당은 무효화됩니다.

다른 역할 할당에 역할 할당 이름을 재사용하려고 하면 배포가 실패합니다. 이러한 도구를 사용하는 경우 역할 할당 이름을 명시적으로 설정해야 하므로 이 문제는 Bicep 또는 ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 역할 할당을 배포할 때 발생할 가능성이 더 큽니다. 이 동작을 해결하려면 이전 역할 할당을 다시 만들기 전에 제거하거나 새 역할 할당을 배포할 때 고유한 이름을 사용해야 합니다.

설명

텍스트 설명을 역할 할당에 추가할 수 있습니다. 설명은 선택 사항이지만 역할 할당에 추가하는 것이 좋습니다. 보안 주체에 할당된 역할이 필요한 이유에 대한 간단한 근거를 제공합니다. 누군가가 역할 할당을 감사할 때 설명은 해당 역할 할당이 만들어진 이유와 여전히 적용 가능한지 여부를 이해하는 데 도움이 될 수 있습니다.

조건

일부 역할은 특정 작업의 컨텍스트에서 특성을 기반으로 하는 역할 할당 조건을 지원합니다. 역할 할당 조건은 필요에 따라 역할 할당에 추가하여 보다 세분화된 액세스 제어를 제공할 수 있는 추가 검사입니다.

예를 들어 사용자가 개체를 읽을 수 있도록 개체에 특정 태그가 있어야 한다는 조건을 추가할 수 있습니다.

일반적으로 시각적 조건 편집기를 사용하여 조건을 작성하지만 코드의 조건 예제는 다음과 같습니다.

((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'))

앞의 조건을 통해 사용자는 Project라는 Blob 인덱스 태그 키와 Cascade라는 값을 사용하여 Blob을 읽을 수 있습니다.

조건에 대한 자세한 내용은 Azure ABAC(Azure 특성 기반 액세스 제어)란?을 참조하세요.

다음 단계